Source code for cherryservers_sdk_python.images

"""Cherry Servers image resource management module."""

from __future__ import annotations

from pydantic import Field

from cherryservers_sdk_python import _base, plans


[docs] class ImageModel(_base.ResourceModel): """Cherry Servers image model. This model is frozen by default, since it represents an actual Cherry Servers image resource state. Attributes: id(int): ID of the image. name(str | None): Full name of the image. slug(str | None): Slug of the image name. pricing(list[cherryservers_sdk_python.plans.PricingModel] | None): Image pricing data. """ id: int = Field(description="ID of the image.") name: str | None = Field(description="Full name of the image.", default=None) slug: str | None = Field(description="Slug of the image name.", default=None) pricing: list[plans.PricingModel] | None = Field( description="Image pricing data.", default=None )
[docs] class ImageClient(_base.ResourceClient): """Cherry Servers image client. Manage Cherry Servers image resources. This class should typically be initialized by :class:`cherryservers_sdk_python.facade.CherryApiFacade`. Example: .. code-block:: python facade = cherryservers_sdk_python.facade.CherryApiFacade(token="my-token") # Retrieve a list of available OSes for a server plan. images = facade.images.get_by_plan("B1-1-1gb-20s-shared") """
[docs] def list_by_plan(self, plan_slug: str) -> list[Image]: """Retrieve a list of available OSes for a server plan.""" response = self._api_client.get( f"plans/{plan_slug}/images", None, self.request_timeout ) images: list[Image] = [] for value in response.json(): image_model = ImageModel.model_validate(value) images.append(Image(self, image_model)) return images
[docs] class Image(_base.Resource[ImageClient, ImageModel]): """Cherry Servers image resource. This class represents an existing Cherry Servers resource and should only be initialized by :class:`ImageClient`. """
[docs] def get_id(self) -> int: """Get resource ID.""" return self._model.id