diff --git a/nuon/api/apps/create_app_kubernetes_contexts_config.py b/nuon/api/apps/create_app_kubernetes_contexts_config.py new file mode 100644 index 00000000..e7cd1a8f --- /dev/null +++ b/nuon/api/apps/create_app_kubernetes_contexts_config.py @@ -0,0 +1,216 @@ +from http import HTTPStatus +from typing import Any +from urllib.parse import quote + +import httpx + +from ... import errors +from ...client import AuthenticatedClient, Client +from ...models.app_app_kubernetes_contexts_config import AppAppKubernetesContextsConfig +from ...models.service_create_app_kubernetes_contexts_config_request import ( + ServiceCreateAppKubernetesContextsConfigRequest, +) +from ...models.stderr_err_response import StderrErrResponse +from ...types import Response + + +def _get_kwargs( + app_id: str, + *, + body: ServiceCreateAppKubernetesContextsConfigRequest, +) -> dict[str, Any]: + headers: dict[str, Any] = {} + + _kwargs: dict[str, Any] = { + "method": "post", + "url": "/v1/apps/{app_id}/kubernetes-contexts-configs".format( + app_id=quote(str(app_id), safe=""), + ), + } + + _kwargs["json"] = body.to_dict() + + headers["Content-Type"] = "application/json" + + _kwargs["headers"] = headers + return _kwargs + + +def _parse_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> AppAppKubernetesContextsConfig | StderrErrResponse | None: + if response.status_code == 201: + response_201 = AppAppKubernetesContextsConfig.from_dict(response.json()) + + return response_201 + + if response.status_code == 400: + response_400 = StderrErrResponse.from_dict(response.json()) + + return response_400 + + if response.status_code == 401: + response_401 = StderrErrResponse.from_dict(response.json()) + + return response_401 + + if response.status_code == 403: + response_403 = StderrErrResponse.from_dict(response.json()) + + return response_403 + + if response.status_code == 404: + response_404 = StderrErrResponse.from_dict(response.json()) + + return response_404 + + if response.status_code == 500: + response_500 = StderrErrResponse.from_dict(response.json()) + + return response_500 + + if client.raise_on_unexpected_status: + raise errors.UnexpectedStatus(response.status_code, response.content) + else: + return None + + +def _build_response( + *, client: AuthenticatedClient | Client, response: httpx.Response +) -> Response[AppAppKubernetesContextsConfig | StderrErrResponse]: + return Response( + status_code=HTTPStatus(response.status_code), + content=response.content, + headers=response.headers, + parsed=_parse_response(client=client, response=response), + ) + + +def sync_detailed( + app_id: str, + *, + client: AuthenticatedClient, + body: ServiceCreateAppKubernetesContextsConfigRequest, +) -> Response[AppAppKubernetesContextsConfig | StderrErrResponse]: + """create a kubernetes contexts config + + Create the named kubernetes_context bindings for an app config version. Each context names a peer + terraform_module or pulumi component that emits cluster connection details as outputs. + + Args: + app_id (str): + body (ServiceCreateAppKubernetesContextsConfigRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AppAppKubernetesContextsConfig | StderrErrResponse] + """ + + kwargs = _get_kwargs( + app_id=app_id, + body=body, + ) + + response = client.get_httpx_client().request( + **kwargs, + ) + + return _build_response(client=client, response=response) + + +def sync( + app_id: str, + *, + client: AuthenticatedClient, + body: ServiceCreateAppKubernetesContextsConfigRequest, +) -> AppAppKubernetesContextsConfig | StderrErrResponse | None: + """create a kubernetes contexts config + + Create the named kubernetes_context bindings for an app config version. Each context names a peer + terraform_module or pulumi component that emits cluster connection details as outputs. + + Args: + app_id (str): + body (ServiceCreateAppKubernetesContextsConfigRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AppAppKubernetesContextsConfig | StderrErrResponse + """ + + return sync_detailed( + app_id=app_id, + client=client, + body=body, + ).parsed + + +async def asyncio_detailed( + app_id: str, + *, + client: AuthenticatedClient, + body: ServiceCreateAppKubernetesContextsConfigRequest, +) -> Response[AppAppKubernetesContextsConfig | StderrErrResponse]: + """create a kubernetes contexts config + + Create the named kubernetes_context bindings for an app config version. Each context names a peer + terraform_module or pulumi component that emits cluster connection details as outputs. + + Args: + app_id (str): + body (ServiceCreateAppKubernetesContextsConfigRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + Response[AppAppKubernetesContextsConfig | StderrErrResponse] + """ + + kwargs = _get_kwargs( + app_id=app_id, + body=body, + ) + + response = await client.get_async_httpx_client().request(**kwargs) + + return _build_response(client=client, response=response) + + +async def asyncio( + app_id: str, + *, + client: AuthenticatedClient, + body: ServiceCreateAppKubernetesContextsConfigRequest, +) -> AppAppKubernetesContextsConfig | StderrErrResponse | None: + """create a kubernetes contexts config + + Create the named kubernetes_context bindings for an app config version. Each context names a peer + terraform_module or pulumi component that emits cluster connection details as outputs. + + Args: + app_id (str): + body (ServiceCreateAppKubernetesContextsConfigRequest): + + Raises: + errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True. + httpx.TimeoutException: If the request takes longer than Client.timeout. + + Returns: + AppAppKubernetesContextsConfig | StderrErrResponse + """ + + return ( + await asyncio_detailed( + app_id=app_id, + client=client, + body=body, + ) + ).parsed diff --git a/nuon/models/__init__.py b/nuon/models/__init__.py index 1f622f1a..15e0c902 100644 --- a/nuon/models/__init__.py +++ b/nuon/models/__init__.py @@ -25,6 +25,8 @@ from .app_app_input_config import AppAppInputConfig from .app_app_input_group import AppAppInputGroup from .app_app_input_source import AppAppInputSource +from .app_app_kubernetes_context_config import AppAppKubernetesContextConfig +from .app_app_kubernetes_contexts_config import AppAppKubernetesContextsConfig from .app_app_links import AppAppLinks from .app_app_operation_role_config import AppAppOperationRoleConfig from .app_app_operation_role_rule import AppAppOperationRoleRule @@ -416,6 +418,7 @@ from .service_app_config_template_type import ServiceAppConfigTemplateType from .service_app_group_request import ServiceAppGroupRequest from .service_app_input_request import ServiceAppInputRequest +from .service_app_kubernetes_context import ServiceAppKubernetesContext from .service_app_policy_config import ServiceAppPolicyConfig from .service_app_secret_config import ServiceAppSecretConfig from .service_auth_me_identity import ServiceAuthMeIdentity @@ -466,6 +469,7 @@ from .service_create_app_input_config_request import ServiceCreateAppInputConfigRequest from .service_create_app_input_config_request_groups import ServiceCreateAppInputConfigRequestGroups from .service_create_app_input_config_request_inputs import ServiceCreateAppInputConfigRequestInputs +from .service_create_app_kubernetes_contexts_config_request import ServiceCreateAppKubernetesContextsConfigRequest from .service_create_app_operation_role_config_request import ServiceCreateAppOperationRoleConfigRequest from .service_create_app_permissions_config_request import ServiceCreateAppPermissionsConfigRequest from .service_create_app_policies_config_request import ServiceCreateAppPoliciesConfigRequest @@ -749,6 +753,8 @@ "AppAppInputConfig", "AppAppInputGroup", "AppAppInputSource", + "AppAppKubernetesContextConfig", + "AppAppKubernetesContextsConfig", "AppAppLinks", "AppAppOperationRoleConfig", "AppAppOperationRoleRule", @@ -1136,6 +1142,7 @@ "ServiceAppConfigTemplateType", "ServiceAppGroupRequest", "ServiceAppInputRequest", + "ServiceAppKubernetesContext", "ServiceAppPolicyConfig", "ServiceAppSecretConfig", "ServiceAuthMeIdentity", @@ -1182,6 +1189,7 @@ "ServiceCreateAppInputConfigRequest", "ServiceCreateAppInputConfigRequestGroups", "ServiceCreateAppInputConfigRequestInputs", + "ServiceCreateAppKubernetesContextsConfigRequest", "ServiceCreateAppOperationRoleConfigRequest", "ServiceCreateAppPermissionsConfigRequest", "ServiceCreateAppPoliciesConfigRequest", diff --git a/nuon/models/app_action_workflow_config.py b/nuon/models/app_action_workflow_config.py index 615e3c00..9837a4da 100644 --- a/nuon/models/app_action_workflow_config.py +++ b/nuon/models/app_action_workflow_config.py @@ -31,6 +31,10 @@ class AppActionWorkflowConfig: created_by_id (str | Unset): enable_kube_config (SqlNullBool | Unset): id (str | Unset): + kubernetes_context_name (str | Unset): KubernetesContextName is the name of an AppKubernetesContextConfig on + the same AppConfig. Empty means fall back to the implicit sandbox + default. Stored as a name (not an FK) so it remains stable across + AppConfig versions. references (list[str] | Unset): refs (list[RefsRef] | Unset): role (str | Unset): @@ -50,6 +54,7 @@ class AppActionWorkflowConfig: created_by_id: str | Unset = UNSET enable_kube_config: SqlNullBool | Unset = UNSET id: str | Unset = UNSET + kubernetes_context_name: str | Unset = UNSET references: list[str] | Unset = UNSET refs: list[RefsRef] | Unset = UNSET role: str | Unset = UNSET @@ -82,6 +87,8 @@ def to_dict(self) -> dict[str, Any]: id = self.id + kubernetes_context_name = self.kubernetes_context_name + references: list[str] | Unset = UNSET if not isinstance(self.references, Unset): references = self.references @@ -134,6 +141,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["enable_kube_config"] = enable_kube_config if id is not UNSET: field_dict["id"] = id + if kubernetes_context_name is not UNSET: + field_dict["kubernetes_context_name"] = kubernetes_context_name if references is not UNSET: field_dict["references"] = references if refs is not UNSET: @@ -182,6 +191,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = d.pop("id", UNSET) + kubernetes_context_name = d.pop("kubernetes_context_name", UNSET) + references = cast(list[str], d.pop("references", UNSET)) _refs = d.pop("refs", UNSET) @@ -227,6 +238,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: created_by_id=created_by_id, enable_kube_config=enable_kube_config, id=id, + kubernetes_context_name=kubernetes_context_name, references=references, refs=refs, role=role, diff --git a/nuon/models/app_app_config.py b/nuon/models/app_app_config.py index 55bcb700..a7a72cb6 100644 --- a/nuon/models/app_app_config.py +++ b/nuon/models/app_app_config.py @@ -14,6 +14,7 @@ from ..models.app_app_branch import AppAppBranch from ..models.app_app_break_glass_config import AppAppBreakGlassConfig from ..models.app_app_input_config import AppAppInputConfig + from ..models.app_app_kubernetes_contexts_config import AppAppKubernetesContextsConfig from ..models.app_app_operation_role_config import AppAppOperationRoleConfig from ..models.app_app_permissions_config import AppAppPermissionsConfig from ..models.app_app_policies_config import AppAppPoliciesConfig @@ -49,6 +50,7 @@ class AppAppConfig: id (str | Unset): input_ (AppAppInputConfig | Unset): intermediate_config (BlobstoreBlob | Unset): + kubernetes_contexts (AppAppKubernetesContextsConfig | Unset): operation_role_config (AppAppOperationRoleConfig | Unset): org_id (str | Unset): permissions (AppAppPermissionsConfig | Unset): @@ -82,6 +84,7 @@ class AppAppConfig: id: str | Unset = UNSET input_: AppAppInputConfig | Unset = UNSET intermediate_config: BlobstoreBlob | Unset = UNSET + kubernetes_contexts: AppAppKubernetesContextsConfig | Unset = UNSET operation_role_config: AppAppOperationRoleConfig | Unset = UNSET org_id: str | Unset = UNSET permissions: AppAppPermissionsConfig | Unset = UNSET @@ -153,6 +156,10 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.intermediate_config, Unset): intermediate_config = self.intermediate_config.to_dict() + kubernetes_contexts: dict[str, Any] | Unset = UNSET + if not isinstance(self.kubernetes_contexts, Unset): + kubernetes_contexts = self.kubernetes_contexts.to_dict() + operation_role_config: dict[str, Any] | Unset = UNSET if not isinstance(self.operation_role_config, Unset): operation_role_config = self.operation_role_config.to_dict() @@ -238,6 +245,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["input"] = input_ if intermediate_config is not UNSET: field_dict["intermediate_config"] = intermediate_config + if kubernetes_contexts is not UNSET: + field_dict["kubernetes_contexts"] = kubernetes_contexts if operation_role_config is not UNSET: field_dict["operation_role_config"] = operation_role_config if org_id is not UNSET: @@ -279,6 +288,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.app_app_branch import AppAppBranch from ..models.app_app_break_glass_config import AppAppBreakGlassConfig from ..models.app_app_input_config import AppAppInputConfig + from ..models.app_app_kubernetes_contexts_config import AppAppKubernetesContextsConfig from ..models.app_app_operation_role_config import AppAppOperationRoleConfig from ..models.app_app_permissions_config import AppAppPermissionsConfig from ..models.app_app_policies_config import AppAppPoliciesConfig @@ -358,6 +368,13 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: intermediate_config = BlobstoreBlob.from_dict(_intermediate_config) + _kubernetes_contexts = d.pop("kubernetes_contexts", UNSET) + kubernetes_contexts: AppAppKubernetesContextsConfig | Unset + if isinstance(_kubernetes_contexts, Unset): + kubernetes_contexts = UNSET + else: + kubernetes_contexts = AppAppKubernetesContextsConfig.from_dict(_kubernetes_contexts) + _operation_role_config = d.pop("operation_role_config", UNSET) operation_role_config: AppAppOperationRoleConfig | Unset if isinstance(_operation_role_config, Unset): @@ -456,6 +473,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id=id, input_=input_, intermediate_config=intermediate_config, + kubernetes_contexts=kubernetes_contexts, operation_role_config=operation_role_config, org_id=org_id, permissions=permissions, diff --git a/nuon/models/app_app_kubernetes_context_config.py b/nuon/models/app_app_kubernetes_context_config.py new file mode 100644 index 00000000..12104b7c --- /dev/null +++ b/nuon/models/app_app_kubernetes_context_config.py @@ -0,0 +1,151 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +T = TypeVar("T", bound="AppAppKubernetesContextConfig") + + +@_attrs_define +class AppAppKubernetesContextConfig: + """ + Attributes: + app_config_id (str | Unset): + app_id (str | Unset): + app_kubernetes_contexts_config_id (str | Unset): + created_at (str | Unset): + created_by_id (str | Unset): + id (str | Unset): + name (str | Unset): + org_id (str | Unset): + source_component_id (str | Unset): + source_component_name (str | Unset): + updated_at (str | Unset): + """ + + app_config_id: str | Unset = UNSET + app_id: str | Unset = UNSET + app_kubernetes_contexts_config_id: str | Unset = UNSET + created_at: str | Unset = UNSET + created_by_id: str | Unset = UNSET + id: str | Unset = UNSET + name: str | Unset = UNSET + org_id: str | Unset = UNSET + source_component_id: str | Unset = UNSET + source_component_name: str | Unset = UNSET + updated_at: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + app_config_id = self.app_config_id + + app_id = self.app_id + + app_kubernetes_contexts_config_id = self.app_kubernetes_contexts_config_id + + created_at = self.created_at + + created_by_id = self.created_by_id + + id = self.id + + name = self.name + + org_id = self.org_id + + source_component_id = self.source_component_id + + source_component_name = self.source_component_name + + updated_at = self.updated_at + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if app_config_id is not UNSET: + field_dict["app_config_id"] = app_config_id + if app_id is not UNSET: + field_dict["app_id"] = app_id + if app_kubernetes_contexts_config_id is not UNSET: + field_dict["app_kubernetes_contexts_config_id"] = app_kubernetes_contexts_config_id + if created_at is not UNSET: + field_dict["created_at"] = created_at + if created_by_id is not UNSET: + field_dict["created_by_id"] = created_by_id + if id is not UNSET: + field_dict["id"] = id + if name is not UNSET: + field_dict["name"] = name + if org_id is not UNSET: + field_dict["org_id"] = org_id + if source_component_id is not UNSET: + field_dict["source_component_id"] = source_component_id + if source_component_name is not UNSET: + field_dict["source_component_name"] = source_component_name + if updated_at is not UNSET: + field_dict["updated_at"] = updated_at + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + app_config_id = d.pop("app_config_id", UNSET) + + app_id = d.pop("app_id", UNSET) + + app_kubernetes_contexts_config_id = d.pop("app_kubernetes_contexts_config_id", UNSET) + + created_at = d.pop("created_at", UNSET) + + created_by_id = d.pop("created_by_id", UNSET) + + id = d.pop("id", UNSET) + + name = d.pop("name", UNSET) + + org_id = d.pop("org_id", UNSET) + + source_component_id = d.pop("source_component_id", UNSET) + + source_component_name = d.pop("source_component_name", UNSET) + + updated_at = d.pop("updated_at", UNSET) + + app_app_kubernetes_context_config = cls( + app_config_id=app_config_id, + app_id=app_id, + app_kubernetes_contexts_config_id=app_kubernetes_contexts_config_id, + created_at=created_at, + created_by_id=created_by_id, + id=id, + name=name, + org_id=org_id, + source_component_id=source_component_id, + source_component_name=source_component_name, + updated_at=updated_at, + ) + + app_app_kubernetes_context_config.additional_properties = d + return app_app_kubernetes_context_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/nuon/models/app_app_kubernetes_contexts_config.py b/nuon/models/app_app_kubernetes_contexts_config.py new file mode 100644 index 00000000..a2430e34 --- /dev/null +++ b/nuon/models/app_app_kubernetes_contexts_config.py @@ -0,0 +1,142 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.app_app_kubernetes_context_config import AppAppKubernetesContextConfig + + +T = TypeVar("T", bound="AppAppKubernetesContextsConfig") + + +@_attrs_define +class AppAppKubernetesContextsConfig: + """ + Attributes: + app_config_id (str | Unset): + app_id (str | Unset): + contexts (list[AppAppKubernetesContextConfig] | Unset): + created_at (str | Unset): + created_by_id (str | Unset): + id (str | Unset): + org_id (str | Unset): + updated_at (str | Unset): + """ + + app_config_id: str | Unset = UNSET + app_id: str | Unset = UNSET + contexts: list[AppAppKubernetesContextConfig] | Unset = UNSET + created_at: str | Unset = UNSET + created_by_id: str | Unset = UNSET + id: str | Unset = UNSET + org_id: str | Unset = UNSET + updated_at: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + app_config_id = self.app_config_id + + app_id = self.app_id + + contexts: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.contexts, Unset): + contexts = [] + for contexts_item_data in self.contexts: + contexts_item = contexts_item_data.to_dict() + contexts.append(contexts_item) + + created_at = self.created_at + + created_by_id = self.created_by_id + + id = self.id + + org_id = self.org_id + + updated_at = self.updated_at + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if app_config_id is not UNSET: + field_dict["app_config_id"] = app_config_id + if app_id is not UNSET: + field_dict["app_id"] = app_id + if contexts is not UNSET: + field_dict["contexts"] = contexts + if created_at is not UNSET: + field_dict["created_at"] = created_at + if created_by_id is not UNSET: + field_dict["created_by_id"] = created_by_id + if id is not UNSET: + field_dict["id"] = id + if org_id is not UNSET: + field_dict["org_id"] = org_id + if updated_at is not UNSET: + field_dict["updated_at"] = updated_at + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.app_app_kubernetes_context_config import AppAppKubernetesContextConfig + + d = dict(src_dict) + app_config_id = d.pop("app_config_id", UNSET) + + app_id = d.pop("app_id", UNSET) + + _contexts = d.pop("contexts", UNSET) + contexts: list[AppAppKubernetesContextConfig] | Unset = UNSET + if _contexts is not UNSET: + contexts = [] + for contexts_item_data in _contexts: + contexts_item = AppAppKubernetesContextConfig.from_dict(contexts_item_data) + + contexts.append(contexts_item) + + created_at = d.pop("created_at", UNSET) + + created_by_id = d.pop("created_by_id", UNSET) + + id = d.pop("id", UNSET) + + org_id = d.pop("org_id", UNSET) + + updated_at = d.pop("updated_at", UNSET) + + app_app_kubernetes_contexts_config = cls( + app_config_id=app_config_id, + app_id=app_id, + contexts=contexts, + created_at=created_at, + created_by_id=created_by_id, + id=id, + org_id=org_id, + updated_at=updated_at, + ) + + app_app_kubernetes_contexts_config.additional_properties = d + return app_app_kubernetes_contexts_config + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/nuon/models/app_component_config_connection.py b/nuon/models/app_component_config_connection.py index 397d28e8..ab0f385f 100644 --- a/nuon/models/app_component_config_connection.py +++ b/nuon/models/app_component_config_connection.py @@ -46,6 +46,10 @@ class AppComponentConfigConnection: helm (AppHelmComponentConfig | Unset): id (str | Unset): job (AppJobComponentConfig | Unset): + kubernetes_context_name (str | Unset): KubernetesContextName is the name of an AppKubernetesContextConfig on + the same AppConfig. Empty means fall back to the implicit sandbox + default. Stored as a name (not an FK) so it remains stable across + AppConfig versions, mirroring how component dependencies are tracked. kubernetes_manifest (AppKubernetesManifestComponentConfig | Unset): max_auto_retries (int | Unset): operation_roles (AppComponentConfigConnectionOperationRoles | Unset): Operation roles map: operation type -> @@ -79,6 +83,7 @@ class AppComponentConfigConnection: helm: AppHelmComponentConfig | Unset = UNSET id: str | Unset = UNSET job: AppJobComponentConfig | Unset = UNSET + kubernetes_context_name: str | Unset = UNSET kubernetes_manifest: AppKubernetesManifestComponentConfig | Unset = UNSET max_auto_retries: int | Unset = UNSET operation_roles: AppComponentConfigConnectionOperationRoles | Unset = UNSET @@ -140,6 +145,8 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.job, Unset): job = self.job.to_dict() + kubernetes_context_name = self.kubernetes_context_name + kubernetes_manifest: dict[str, Any] | Unset = UNSET if not isinstance(self.kubernetes_manifest, Unset): kubernetes_manifest = self.kubernetes_manifest.to_dict() @@ -220,6 +227,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["id"] = id if job is not UNSET: field_dict["job"] = job + if kubernetes_context_name is not UNSET: + field_dict["kubernetes_context_name"] = kubernetes_context_name if kubernetes_manifest is not UNSET: field_dict["kubernetes_manifest"] = kubernetes_manifest if max_auto_retries is not UNSET: @@ -316,6 +325,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: job = AppJobComponentConfig.from_dict(_job) + kubernetes_context_name = d.pop("kubernetes_context_name", UNSET) + _kubernetes_manifest = d.pop("kubernetes_manifest", UNSET) kubernetes_manifest: AppKubernetesManifestComponentConfig | Unset if isinstance(_kubernetes_manifest, Unset): @@ -391,6 +402,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: helm=helm, id=id, job=job, + kubernetes_context_name=kubernetes_context_name, kubernetes_manifest=kubernetes_manifest, max_auto_retries=max_auto_retries, operation_roles=operation_roles, diff --git a/nuon/models/app_install_action_workflow_run.py b/nuon/models/app_install_action_workflow_run.py index 862ad7d4..8e827fa3 100644 --- a/nuon/models/app_install_action_workflow_run.py +++ b/nuon/models/app_install_action_workflow_run.py @@ -42,6 +42,9 @@ class AppInstallActionWorkflowRun: install_action_workflow_id (str | Unset): install_id (str | Unset): install_workflow_id (str | Unset): + kubernetes_context_name (str | Unset): KubernetesContextName is snapshotted from the action's + ActionWorkflowConfig at run-creation time so plan resolution can target + the correct cluster. Empty means fall back to the sandbox default. log_stream (AppLogStream | Unset): outputs (AppInstallActionWorkflowRunOutputs | Unset): role (str | Unset): Role to be used when running this action @@ -72,6 +75,7 @@ class AppInstallActionWorkflowRun: install_action_workflow_id: str | Unset = UNSET install_id: str | Unset = UNSET install_workflow_id: str | Unset = UNSET + kubernetes_context_name: str | Unset = UNSET log_stream: AppLogStream | Unset = UNSET outputs: AppInstallActionWorkflowRunOutputs | Unset = UNSET role: str | Unset = UNSET @@ -123,6 +127,8 @@ def to_dict(self) -> dict[str, Any]: install_workflow_id = self.install_workflow_id + kubernetes_context_name = self.kubernetes_context_name + log_stream: dict[str, Any] | Unset = UNSET if not isinstance(self.log_stream, Unset): log_stream = self.log_stream.to_dict() @@ -201,6 +207,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["install_id"] = install_id if install_workflow_id is not UNSET: field_dict["install_workflow_id"] = install_workflow_id + if kubernetes_context_name is not UNSET: + field_dict["kubernetes_context_name"] = kubernetes_context_name if log_stream is not UNSET: field_dict["log_stream"] = log_stream if outputs is not UNSET: @@ -295,6 +303,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: install_workflow_id = d.pop("install_workflow_id", UNSET) + kubernetes_context_name = d.pop("kubernetes_context_name", UNSET) + _log_stream = d.pop("log_stream", UNSET) log_stream: AppLogStream | Unset if isinstance(_log_stream, Unset): @@ -382,6 +392,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: install_action_workflow_id=install_action_workflow_id, install_id=install_id, install_workflow_id=install_workflow_id, + kubernetes_context_name=kubernetes_context_name, log_stream=log_stream, outputs=outputs, role=role, diff --git a/nuon/models/service_app_kubernetes_context.py b/nuon/models/service_app_kubernetes_context.py new file mode 100644 index 00000000..df6974e8 --- /dev/null +++ b/nuon/models/service_app_kubernetes_context.py @@ -0,0 +1,70 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import Any, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +T = TypeVar("T", bound="ServiceAppKubernetesContext") + + +@_attrs_define +class ServiceAppKubernetesContext: + """ + Attributes: + component (str): Component is the name of the peer terraform_module or pulumi component + that emits cluster connection details as outputs. + name (str): + """ + + component: str + name: str + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + component = self.component + + name = self.name + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "component": component, + "name": name, + } + ) + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + component = d.pop("component") + + name = d.pop("name") + + service_app_kubernetes_context = cls( + component=component, + name=name, + ) + + service_app_kubernetes_context.additional_properties = d + return service_app_kubernetes_context + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/nuon/models/service_create_action_workflow_config_request.py b/nuon/models/service_create_action_workflow_config_request.py index f05bff94..ad0174bc 100644 --- a/nuon/models/service_create_action_workflow_config_request.py +++ b/nuon/models/service_create_action_workflow_config_request.py @@ -28,6 +28,7 @@ class ServiceCreateActionWorkflowConfigRequest: break_glass_role_arn (str | Unset): dependencies (list[str] | Unset): enable_kube_config (bool | None | Unset): + kubernetes_context (str | Unset): references (list[str] | Unset): role (str | Unset): timeout (int | Unset): @@ -39,6 +40,7 @@ class ServiceCreateActionWorkflowConfigRequest: break_glass_role_arn: str | Unset = UNSET dependencies: list[str] | Unset = UNSET enable_kube_config: bool | None | Unset = UNSET + kubernetes_context: str | Unset = UNSET references: list[str] | Unset = UNSET role: str | Unset = UNSET timeout: int | Unset = UNSET @@ -69,6 +71,8 @@ def to_dict(self) -> dict[str, Any]: else: enable_kube_config = self.enable_kube_config + kubernetes_context = self.kubernetes_context + references: list[str] | Unset = UNSET if not isinstance(self.references, Unset): references = self.references @@ -92,6 +96,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["dependencies"] = dependencies if enable_kube_config is not UNSET: field_dict["enable_kube_config"] = enable_kube_config + if kubernetes_context is not UNSET: + field_dict["kubernetes_context"] = kubernetes_context if references is not UNSET: field_dict["references"] = references if role is not UNSET: @@ -140,6 +146,8 @@ def _parse_enable_kube_config(data: object) -> bool | None | Unset: enable_kube_config = _parse_enable_kube_config(d.pop("enable_kube_config", UNSET)) + kubernetes_context = d.pop("kubernetes_context", UNSET) + references = cast(list[str], d.pop("references", UNSET)) role = d.pop("role", UNSET) @@ -153,6 +161,7 @@ def _parse_enable_kube_config(data: object) -> bool | None | Unset: break_glass_role_arn=break_glass_role_arn, dependencies=dependencies, enable_kube_config=enable_kube_config, + kubernetes_context=kubernetes_context, references=references, role=role, timeout=timeout, diff --git a/nuon/models/service_create_app_config_request.py b/nuon/models/service_create_app_config_request.py index 39a99804..fa43928a 100644 --- a/nuon/models/service_create_app_config_request.py +++ b/nuon/models/service_create_app_config_request.py @@ -20,12 +20,15 @@ class ServiceCreateAppConfigRequest: cli_version (str | Unset): plan_only (bool | Unset): PlanOnly creates a preview run (plan without apply). Only used with AppBranchID. readme (str | Unset): not required Readme + skip_notification (bool | Unset): SkipNotification suppresses the app-config-synced signal emission. + Used when creating a config as part of app deletion cleanup. """ app_branch_id: str | Unset = UNSET cli_version: str | Unset = UNSET plan_only: bool | Unset = UNSET readme: str | Unset = UNSET + skip_notification: bool | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -37,6 +40,8 @@ def to_dict(self) -> dict[str, Any]: readme = self.readme + skip_notification = self.skip_notification + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update({}) @@ -48,6 +53,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["plan_only"] = plan_only if readme is not UNSET: field_dict["readme"] = readme + if skip_notification is not UNSET: + field_dict["skip_notification"] = skip_notification return field_dict @@ -62,11 +69,14 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: readme = d.pop("readme", UNSET) + skip_notification = d.pop("skip_notification", UNSET) + service_create_app_config_request = cls( app_branch_id=app_branch_id, cli_version=cli_version, plan_only=plan_only, readme=readme, + skip_notification=skip_notification, ) service_create_app_config_request.additional_properties = d diff --git a/nuon/models/service_create_app_kubernetes_contexts_config_request.py b/nuon/models/service_create_app_kubernetes_contexts_config_request.py new file mode 100644 index 00000000..17ee6203 --- /dev/null +++ b/nuon/models/service_create_app_kubernetes_contexts_config_request.py @@ -0,0 +1,90 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.service_app_kubernetes_context import ServiceAppKubernetesContext + + +T = TypeVar("T", bound="ServiceCreateAppKubernetesContextsConfigRequest") + + +@_attrs_define +class ServiceCreateAppKubernetesContextsConfigRequest: + """ + Attributes: + app_config_id (str): + contexts (list[ServiceAppKubernetesContext] | Unset): + """ + + app_config_id: str + contexts: list[ServiceAppKubernetesContext] | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + app_config_id = self.app_config_id + + contexts: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.contexts, Unset): + contexts = [] + for contexts_item_data in self.contexts: + contexts_item = contexts_item_data.to_dict() + contexts.append(contexts_item) + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update( + { + "app_config_id": app_config_id, + } + ) + if contexts is not UNSET: + field_dict["contexts"] = contexts + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.service_app_kubernetes_context import ServiceAppKubernetesContext + + d = dict(src_dict) + app_config_id = d.pop("app_config_id") + + _contexts = d.pop("contexts", UNSET) + contexts: list[ServiceAppKubernetesContext] | Unset = UNSET + if _contexts is not UNSET: + contexts = [] + for contexts_item_data in _contexts: + contexts_item = ServiceAppKubernetesContext.from_dict(contexts_item_data) + + contexts.append(contexts_item) + + service_create_app_kubernetes_contexts_config_request = cls( + app_config_id=app_config_id, + contexts=contexts, + ) + + service_create_app_kubernetes_contexts_config_request.additional_properties = d + return service_create_app_kubernetes_contexts_config_request + + @property + def additional_keys(self) -> list[str]: + return list(self.additional_properties.keys()) + + def __getitem__(self, key: str) -> Any: + return self.additional_properties[key] + + def __setitem__(self, key: str, value: Any) -> None: + self.additional_properties[key] = value + + def __delitem__(self, key: str) -> None: + del self.additional_properties[key] + + def __contains__(self, key: str) -> bool: + return key in self.additional_properties diff --git a/nuon/models/service_create_helm_component_config_request.py b/nuon/models/service_create_helm_component_config_request.py index 6a92ed7f..b7c1789d 100644 --- a/nuon/models/service_create_helm_component_config_request.py +++ b/nuon/models/service_create_helm_component_config_request.py @@ -39,6 +39,7 @@ class ServiceCreateHelmComponentConfigRequest: deploy_timeout (str | Unset): Duration string for deploy operations (e.g., "30m", "1h") drift_schedule (str | Unset): helm_repo_config (ServiceHelmRepoConfigRequest | Unset): + kubernetes_context (str | Unset): max_auto_retries (int | Unset): namespace (str | Unset): operation_roles (ServiceCreateHelmComponentConfigRequestOperationRoles | Unset): @@ -63,6 +64,7 @@ class ServiceCreateHelmComponentConfigRequest: deploy_timeout: str | Unset = UNSET drift_schedule: str | Unset = UNSET helm_repo_config: ServiceHelmRepoConfigRequest | Unset = UNSET + kubernetes_context: str | Unset = UNSET max_auto_retries: int | Unset = UNSET namespace: str | Unset = UNSET operation_roles: ServiceCreateHelmComponentConfigRequestOperationRoles | Unset = UNSET @@ -106,6 +108,8 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.helm_repo_config, Unset): helm_repo_config = self.helm_repo_config.to_dict() + kubernetes_context = self.kubernetes_context + max_auto_retries = self.max_auto_retries namespace = self.namespace @@ -162,6 +166,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["drift_schedule"] = drift_schedule if helm_repo_config is not UNSET: field_dict["helm_repo_config"] = helm_repo_config + if kubernetes_context is not UNSET: + field_dict["kubernetes_context"] = kubernetes_context if max_auto_retries is not UNSET: field_dict["max_auto_retries"] = max_auto_retries if namespace is not UNSET: @@ -232,6 +238,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: helm_repo_config = ServiceHelmRepoConfigRequest.from_dict(_helm_repo_config) + kubernetes_context = d.pop("kubernetes_context", UNSET) + max_auto_retries = d.pop("max_auto_retries", UNSET) namespace = d.pop("namespace", UNSET) @@ -275,6 +283,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: deploy_timeout=deploy_timeout, drift_schedule=drift_schedule, helm_repo_config=helm_repo_config, + kubernetes_context=kubernetes_context, max_auto_retries=max_auto_retries, namespace=namespace, operation_roles=operation_roles, diff --git a/nuon/models/service_create_kubernetes_manifest_component_config_request.py b/nuon/models/service_create_kubernetes_manifest_component_config_request.py index 82a96c40..c456c969 100644 --- a/nuon/models/service_create_kubernetes_manifest_component_config_request.py +++ b/nuon/models/service_create_kubernetes_manifest_component_config_request.py @@ -33,6 +33,7 @@ class ServiceCreateKubernetesManifestComponentConfigRequest: dependencies (list[str] | Unset): deploy_timeout (str | Unset): Duration string for deploy operations (e.g., "30m", "1h") drift_schedule (str | Unset): + kubernetes_context (str | Unset): kustomize (ServiceKustomizeConfigRequest | Unset): manifest (str | Unset): Inline manifest (mutually exclusive with Kustomize) max_auto_retries (int | Unset): @@ -53,6 +54,7 @@ class ServiceCreateKubernetesManifestComponentConfigRequest: dependencies: list[str] | Unset = UNSET deploy_timeout: str | Unset = UNSET drift_schedule: str | Unset = UNSET + kubernetes_context: str | Unset = UNSET kustomize: ServiceKustomizeConfigRequest | Unset = UNSET manifest: str | Unset = UNSET max_auto_retries: int | Unset = UNSET @@ -87,6 +89,8 @@ def to_dict(self) -> dict[str, Any]: drift_schedule = self.drift_schedule + kubernetes_context = self.kubernetes_context + kustomize: dict[str, Any] | Unset = UNSET if not isinstance(self.kustomize, Unset): kustomize = self.kustomize.to_dict() @@ -134,6 +138,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["deploy_timeout"] = deploy_timeout if drift_schedule is not UNSET: field_dict["drift_schedule"] = drift_schedule + if kubernetes_context is not UNSET: + field_dict["kubernetes_context"] = kubernetes_context if kustomize is not UNSET: field_dict["kustomize"] = kustomize if manifest is not UNSET: @@ -188,6 +194,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: drift_schedule = d.pop("drift_schedule", UNSET) + kubernetes_context = d.pop("kubernetes_context", UNSET) + _kustomize = d.pop("kustomize", UNSET) kustomize: ServiceKustomizeConfigRequest | Unset if isinstance(_kustomize, Unset): @@ -233,6 +241,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: dependencies=dependencies, deploy_timeout=deploy_timeout, drift_schedule=drift_schedule, + kubernetes_context=kubernetes_context, kustomize=kustomize, manifest=manifest, max_auto_retries=max_auto_retries, diff --git a/nuon/models/service_create_pulumi_component_config_request.py b/nuon/models/service_create_pulumi_component_config_request.py index f44de4a3..f78e87a0 100644 --- a/nuon/models/service_create_pulumi_component_config_request.py +++ b/nuon/models/service_create_pulumi_component_config_request.py @@ -41,6 +41,7 @@ class ServiceCreatePulumiComponentConfigRequest: dependencies (list[str] | Unset): deploy_timeout (str | Unset): drift_schedule (str | Unset): + kubernetes_context (str | Unset): max_auto_retries (int | Unset): operation_roles (ServiceCreatePulumiComponentConfigRequestOperationRoles | Unset): public_git_vcs_config (ServicePublicGitVCSConfigRequest | Unset): @@ -62,6 +63,7 @@ class ServiceCreatePulumiComponentConfigRequest: dependencies: list[str] | Unset = UNSET deploy_timeout: str | Unset = UNSET drift_schedule: str | Unset = UNSET + kubernetes_context: str | Unset = UNSET max_auto_retries: int | Unset = UNSET operation_roles: ServiceCreatePulumiComponentConfigRequestOperationRoles | Unset = UNSET public_git_vcs_config: ServicePublicGitVCSConfigRequest | Unset = UNSET @@ -100,6 +102,8 @@ def to_dict(self) -> dict[str, Any]: drift_schedule = self.drift_schedule + kubernetes_context = self.kubernetes_context + max_auto_retries = self.max_auto_retries operation_roles: dict[str, Any] | Unset = UNSET @@ -147,6 +151,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["deploy_timeout"] = deploy_timeout if drift_schedule is not UNSET: field_dict["drift_schedule"] = drift_schedule + if kubernetes_context is not UNSET: + field_dict["kubernetes_context"] = kubernetes_context if max_auto_retries is not UNSET: field_dict["max_auto_retries"] = max_auto_retries if operation_roles is not UNSET: @@ -208,6 +214,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: drift_schedule = d.pop("drift_schedule", UNSET) + kubernetes_context = d.pop("kubernetes_context", UNSET) + max_auto_retries = d.pop("max_auto_retries", UNSET) _operation_roles = d.pop("operation_roles", UNSET) @@ -245,6 +253,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: dependencies=dependencies, deploy_timeout=deploy_timeout, drift_schedule=drift_schedule, + kubernetes_context=kubernetes_context, max_auto_retries=max_auto_retries, operation_roles=operation_roles, public_git_vcs_config=public_git_vcs_config, diff --git a/nuon/models/service_create_terraform_module_component_config_request.py b/nuon/models/service_create_terraform_module_component_config_request.py index 2d6e4e74..d829f6b3 100644 --- a/nuon/models/service_create_terraform_module_component_config_request.py +++ b/nuon/models/service_create_terraform_module_component_config_request.py @@ -40,6 +40,7 @@ class ServiceCreateTerraformModuleComponentConfigRequest: dependencies (list[str] | Unset): deploy_timeout (str | Unset): Duration string for deploy operations (e.g., "30m", "1h") drift_schedule (str | Unset): + kubernetes_context (str | Unset): max_auto_retries (int | Unset): operation_roles (ServiceCreateTerraformModuleComponentConfigRequestOperationRoles | Unset): public_git_vcs_config (ServicePublicGitVCSConfigRequest | Unset): @@ -61,6 +62,7 @@ class ServiceCreateTerraformModuleComponentConfigRequest: dependencies: list[str] | Unset = UNSET deploy_timeout: str | Unset = UNSET drift_schedule: str | Unset = UNSET + kubernetes_context: str | Unset = UNSET max_auto_retries: int | Unset = UNSET operation_roles: ServiceCreateTerraformModuleComponentConfigRequestOperationRoles | Unset = UNSET public_git_vcs_config: ServicePublicGitVCSConfigRequest | Unset = UNSET @@ -98,6 +100,8 @@ def to_dict(self) -> dict[str, Any]: drift_schedule = self.drift_schedule + kubernetes_context = self.kubernetes_context + max_auto_retries = self.max_auto_retries operation_roles: dict[str, Any] | Unset = UNSET @@ -148,6 +152,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["deploy_timeout"] = deploy_timeout if drift_schedule is not UNSET: field_dict["drift_schedule"] = drift_schedule + if kubernetes_context is not UNSET: + field_dict["kubernetes_context"] = kubernetes_context if max_auto_retries is not UNSET: field_dict["max_auto_retries"] = max_auto_retries if operation_roles is not UNSET: @@ -209,6 +215,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: drift_schedule = d.pop("drift_schedule", UNSET) + kubernetes_context = d.pop("kubernetes_context", UNSET) + max_auto_retries = d.pop("max_auto_retries", UNSET) _operation_roles = d.pop("operation_roles", UNSET) @@ -249,6 +257,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: dependencies=dependencies, deploy_timeout=deploy_timeout, drift_schedule=drift_schedule, + kubernetes_context=kubernetes_context, max_auto_retries=max_auto_retries, operation_roles=operation_roles, public_git_vcs_config=public_git_vcs_config, diff --git a/pyproject.toml b/pyproject.toml index 8ec15970..77e208ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "nuon" -version = "0.19.1024" +version = "0.19.1025" description = "A client library for accessing Nuon" authors = [] requires-python = ">=3.11" diff --git a/version.txt b/version.txt index 7e0b4046..f6abacb8 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.19.1024 +0.19.1025