Source code for cherryservers_sdk_python.sshkeys

"""Cherry Servers SSH key resource management module."""

from __future__ import annotations

from pydantic import Field

from cherryservers_sdk_python import _base, users


[docs] class SSHKeyModel(_base.ResourceModel): """Cherry Servers SSH key model. This model is frozen by default, since it represents an actual Cherry Servers SSH key resource state. Attributes: id (int): SSH key ID. label (str | None): SSH key label. key (str | None): Public SSH key. fingerprint (str | None): SSH key fingerprint. user (cherryservers_sdk_python.users.UserModel | None): SSH key user. updated (str | None): Timestamp of the last SSH key update. created (str | None): Timestamp of the SSH key creation. href (str | None): SSH key href. """ id: int = Field(description="SSH key ID.") label: str | None = Field(description="SSH key label.", default=None) key: str | None = Field(description="Public SSH key.", default=None) fingerprint: str | None = Field(description="SSH key fingerprint.", default=None) user: users.UserModel | None = Field(description="SSH key user.", default=None) updated: str | None = Field( description="Timestamp of the last SSH key update.", default=None ) created: str | None = Field( description="Timestamp of the SSH key creation.", default=None ) href: str | None = Field(description="SSH key href.", default=None)
[docs] class CreationRequest(_base.RequestSchema): """Cherry Servers SSH key creation request schema. Attributes: label (str): SSH key label. key (str): Public SSH key. """ label: str = Field(description="SSH key label.") key: str = Field(description="Public SSH key.")
[docs] class UpdateRequest(_base.RequestSchema): """Cherry Servers SSH key update request schema. Attributes: label (str | None): SSH key label. key (str | None): Public SSH key. """ label: str | None = Field(description="SSH key label.", default=None) key: str | None = Field(description="Public SSH key.", default=None)
[docs] class SSHKeyClient(_base.ResourceClient): """Cherry Servers SSH key client. Manage Cherry Servers SSH key resources. This class should typically be initialized by :class:`cherryservers_sdk_python.facade.CherryApiFacade`. Example: .. code-block:: python # Create SSH key. facade = cherryservers_sdk_python.facade.CherryApiFacade(token="my-token") req = cherryservers_sdk_python.sshkeys.CreationRequest( label = "test", key = "my-public-api-key" ) sshkey = facade.sshkeys.create(req) # Update SSH key. upd_req = cherryservers_sdk_python.sshkeys.UpdateRequest( label = "test-updated" ) sshkey.update(upd_req) # Remove SSH key. sshkey.delete() """
[docs] def get_by_id(self, sshkey_id: int) -> SSHKey: """Retrieve an SSH key by ID.""" response = self._api_client.get( f"ssh-keys/{sshkey_id}", {"fields": "ssh_key,user"}, self.request_timeout, ) sshkey_model = SSHKeyModel.model_validate(response.json()) return SSHKey(self, sshkey_model)
[docs] def get_all(self) -> list[SSHKey]: """Retrieve all SSH keys.""" response = self._api_client.get( "ssh-keys", {"fields": "ssh_key,user"}, self.request_timeout ) keys: list[SSHKey] = [] for value in response.json(): sshkey_model = SSHKeyModel.model_validate(value) keys.append(SSHKey(self, sshkey_model)) return keys
[docs] def create(self, creation_schema: CreationRequest) -> SSHKey: """Create a new SSH key.""" response = self._api_client.post( "ssh-keys", creation_schema, None, self.request_timeout ) return self.get_by_id(response.json()["id"])
[docs] def delete(self, sshkey_id: int) -> None: """Delete SSH key by ID.""" self._api_client.delete(f"ssh-keys/{sshkey_id}", None, self.request_timeout)
[docs] def update( self, sshkey_id: int, update_schema: UpdateRequest, ) -> SSHKey: """Update SSH key by ID.""" response = self._api_client.put( f"ssh-keys/{sshkey_id}", update_schema, None, self.request_timeout ) return self.get_by_id(response.json()["id"])
[docs] class SSHKey(_base.Resource[SSHKeyClient, SSHKeyModel]): """Cherry Servers SSH key resource. This class represents an existing Cherry Servers resource and should only be initialized by :class:`SSHKeyClient`. """
[docs] def delete(self) -> None: """Delete Cherry Servers SSH key resource.""" self._client.delete(self._model.id)
[docs] def update(self, update_schema: UpdateRequest) -> None: """Update Cherry Servers SSH key resource.""" updated = self._client.update(self._model.id, update_schema) self._model = updated.get_model()
[docs] def get_id(self) -> int: """Get resource ID.""" return self._model.id