From 03c94d8b5a101474dc8d6e72540e5708f428f67c Mon Sep 17 00:00:00 2001 From: nuonbot Date: Thu, 12 Feb 2026 13:09:05 +0000 Subject: [PATCH] ci: generate from api 0.19.771 --- nuon/models/__init__.py | 10 + nuon/models/app_app_policy_config.py | 18 + nuon/models/app_component_build.py | 23 ++ nuon/models/app_install_deploy.py | 23 ++ nuon/models/app_install_sandbox_run.py | 23 ++ nuon/models/app_policy_input_ref.py | 79 +++++ nuon/models/app_policy_report.py | 333 ++++++++++++++++++ nuon/models/app_policy_report_owner_type.py | 10 + nuon/models/app_policy_result.py | 115 ++++++ nuon/models/app_policy_violation.py | 97 +++++ nuon/models/app_status.py | 1 + .../app_workflow_step_policy_validation.py | 2 +- nuon/models/service_app_policy_config.py | 18 + pyproject.toml | 4 +- version.txt | 2 +- 15 files changed, 754 insertions(+), 4 deletions(-) create mode 100644 nuon/models/app_policy_input_ref.py create mode 100644 nuon/models/app_policy_report.py create mode 100644 nuon/models/app_policy_report_owner_type.py create mode 100644 nuon/models/app_policy_result.py create mode 100644 nuon/models/app_policy_violation.py diff --git a/nuon/models/__init__.py b/nuon/models/__init__.py index b6958c56..d1b8857f 100644 --- a/nuon/models/__init__.py +++ b/nuon/models/__init__.py @@ -123,8 +123,13 @@ from .app_otel_log_record_resource_attributes import AppOtelLogRecordResourceAttributes from .app_otel_log_record_scope_attributes import AppOtelLogRecordScopeAttributes from .app_policy import AppPolicy +from .app_policy_input_ref import AppPolicyInputRef from .app_policy_name import AppPolicyName from .app_policy_permissions import AppPolicyPermissions +from .app_policy_report import AppPolicyReport +from .app_policy_report_owner_type import AppPolicyReportOwnerType +from .app_policy_result import AppPolicyResult +from .app_policy_violation import AppPolicyViolation from .app_provider_type import AppProviderType from .app_public_git_vcs_config import AppPublicGitVCSConfig from .app_role import AppRole @@ -574,8 +579,13 @@ "AppOtelLogRecordResourceAttributes", "AppOtelLogRecordScopeAttributes", "AppPolicy", + "AppPolicyInputRef", "AppPolicyName", "AppPolicyPermissions", + "AppPolicyReport", + "AppPolicyReportOwnerType", + "AppPolicyResult", + "AppPolicyViolation", "AppProviderType", "AppPublicGitVCSConfig", "AppRole", diff --git a/nuon/models/app_app_policy_config.py b/nuon/models/app_app_policy_config.py index d84a5b93..687a327b 100644 --- a/nuon/models/app_app_policy_config.py +++ b/nuon/models/app_app_policy_config.py @@ -24,8 +24,10 @@ class AppAppPolicyConfig: contents (str | Unset): created_at (str | Unset): created_by_id (str | Unset): + description (str | Unset): engine (ConfigAppPolicyEngine | Unset): id (str | Unset): + name (str | Unset): org_id (str | Unset): type_ (ConfigAppPolicyType | Unset): updated_at (str | Unset): @@ -38,8 +40,10 @@ class AppAppPolicyConfig: contents: str | Unset = UNSET created_at: str | Unset = UNSET created_by_id: str | Unset = UNSET + description: str | Unset = UNSET engine: ConfigAppPolicyEngine | Unset = UNSET id: str | Unset = UNSET + name: str | Unset = UNSET org_id: str | Unset = UNSET type_: ConfigAppPolicyType | Unset = UNSET updated_at: str | Unset = UNSET @@ -62,12 +66,16 @@ def to_dict(self) -> dict[str, Any]: created_by_id = self.created_by_id + description = self.description + engine: str | Unset = UNSET if not isinstance(self.engine, Unset): engine = self.engine.value id = self.id + name = self.name + org_id = self.org_id type_: str | Unset = UNSET @@ -93,10 +101,14 @@ def to_dict(self) -> dict[str, Any]: field_dict["created_at"] = created_at if created_by_id is not UNSET: field_dict["created_by_id"] = created_by_id + if description is not UNSET: + field_dict["description"] = description if engine is not UNSET: field_dict["engine"] = engine 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 type_ is not UNSET: @@ -123,6 +135,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: created_by_id = d.pop("created_by_id", UNSET) + description = d.pop("description", UNSET) + _engine = d.pop("engine", UNSET) engine: ConfigAppPolicyEngine | Unset if isinstance(_engine, Unset): @@ -132,6 +146,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id = d.pop("id", UNSET) + name = d.pop("name", UNSET) + org_id = d.pop("org_id", UNSET) _type_ = d.pop("type", UNSET) @@ -151,8 +167,10 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: contents=contents, created_at=created_at, created_by_id=created_by_id, + description=description, engine=engine, id=id, + name=name, org_id=org_id, type_=type_, updated_at=updated_at, diff --git a/nuon/models/app_component_build.py b/nuon/models/app_component_build.py index 56eefb29..c5dca444 100644 --- a/nuon/models/app_component_build.py +++ b/nuon/models/app_component_build.py @@ -15,6 +15,7 @@ from ..models.app_composite_status import AppCompositeStatus from ..models.app_install_deploy import AppInstallDeploy from ..models.app_log_stream import AppLogStream + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_vcs_connection_commit import AppVCSConnectionCommit @@ -40,6 +41,7 @@ class AppComponentBuild: id (str | Unset): install_deploys (list[AppInstallDeploy] | Unset): log_stream (AppLogStream | Unset): + policy_reports (list[AppPolicyReport] | Unset): releases (list[AppComponentRelease] | Unset): runner_job (AppRunnerJob | Unset): status (str | Unset): @@ -62,6 +64,7 @@ class AppComponentBuild: id: str | Unset = UNSET install_deploys: list[AppInstallDeploy] | Unset = UNSET log_stream: AppLogStream | Unset = UNSET + policy_reports: list[AppPolicyReport] | Unset = UNSET releases: list[AppComponentRelease] | Unset = UNSET runner_job: AppRunnerJob | Unset = UNSET status: str | Unset = UNSET @@ -109,6 +112,13 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.log_stream, Unset): log_stream = self.log_stream.to_dict() + policy_reports: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.policy_reports, Unset): + policy_reports = [] + for policy_reports_item_data in self.policy_reports: + policy_reports_item = policy_reports_item_data.to_dict() + policy_reports.append(policy_reports_item) + releases: list[dict[str, Any]] | Unset = UNSET if not isinstance(self.releases, Unset): releases = [] @@ -163,6 +173,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["install_deploys"] = install_deploys if log_stream is not UNSET: field_dict["log_stream"] = log_stream + if policy_reports is not UNSET: + field_dict["policy_reports"] = policy_reports if releases is not UNSET: field_dict["releases"] = releases if runner_job is not UNSET: @@ -188,6 +200,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.app_composite_status import AppCompositeStatus from ..models.app_install_deploy import AppInstallDeploy from ..models.app_log_stream import AppLogStream + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_vcs_connection_commit import AppVCSConnectionCommit @@ -240,6 +253,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: log_stream = AppLogStream.from_dict(_log_stream) + _policy_reports = d.pop("policy_reports", UNSET) + policy_reports: list[AppPolicyReport] | Unset = UNSET + if _policy_reports is not UNSET: + policy_reports = [] + for policy_reports_item_data in _policy_reports: + policy_reports_item = AppPolicyReport.from_dict(policy_reports_item_data) + + policy_reports.append(policy_reports_item) + _releases = d.pop("releases", UNSET) releases: list[AppComponentRelease] | Unset = UNSET if _releases is not UNSET: @@ -290,6 +312,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: id=id, install_deploys=install_deploys, log_stream=log_stream, + policy_reports=policy_reports, releases=releases, runner_job=runner_job, status=status, diff --git a/nuon/models/app_install_deploy.py b/nuon/models/app_install_deploy.py index 3417b327..8e2669c1 100644 --- a/nuon/models/app_install_deploy.py +++ b/nuon/models/app_install_deploy.py @@ -17,6 +17,7 @@ from ..models.app_install_deploy_outputs import AppInstallDeployOutputs from ..models.app_log_stream import AppLogStream from ..models.app_oci_artifact import AppOCIArtifact + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_workflow import AppWorkflow @@ -46,6 +47,7 @@ class AppInstallDeploy: oci_artifact (AppOCIArtifact | Unset): outputs (AppInstallDeployOutputs | Unset): plan_only (bool | Unset): + policy_reports (list[AppPolicyReport] | Unset): release_id (str | Unset): runner_jobs (list[AppRunnerJob] | Unset): runner details status (str | Unset): @@ -74,6 +76,7 @@ class AppInstallDeploy: oci_artifact: AppOCIArtifact | Unset = UNSET outputs: AppInstallDeployOutputs | Unset = UNSET plan_only: bool | Unset = UNSET + policy_reports: list[AppPolicyReport] | Unset = UNSET release_id: str | Unset = UNSET runner_jobs: list[AppRunnerJob] | Unset = UNSET status: str | Unset = UNSET @@ -138,6 +141,13 @@ def to_dict(self) -> dict[str, Any]: plan_only = self.plan_only + policy_reports: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.policy_reports, Unset): + policy_reports = [] + for policy_reports_item_data in self.policy_reports: + policy_reports_item = policy_reports_item_data.to_dict() + policy_reports.append(policy_reports_item) + release_id = self.release_id runner_jobs: list[dict[str, Any]] | Unset = UNSET @@ -202,6 +212,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["outputs"] = outputs if plan_only is not UNSET: field_dict["plan_only"] = plan_only + if policy_reports is not UNSET: + field_dict["policy_reports"] = policy_reports if release_id is not UNSET: field_dict["release_id"] = release_id if runner_jobs is not UNSET: @@ -230,6 +242,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.app_install_deploy_outputs import AppInstallDeployOutputs from ..models.app_log_stream import AppLogStream from ..models.app_oci_artifact import AppOCIArtifact + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_workflow import AppWorkflow @@ -307,6 +320,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: plan_only = d.pop("plan_only", UNSET) + _policy_reports = d.pop("policy_reports", UNSET) + policy_reports: list[AppPolicyReport] | Unset = UNSET + if _policy_reports is not UNSET: + policy_reports = [] + for policy_reports_item_data in _policy_reports: + policy_reports_item = AppPolicyReport.from_dict(policy_reports_item_data) + + policy_reports.append(policy_reports_item) + release_id = d.pop("release_id", UNSET) _runner_jobs = d.pop("runner_jobs", UNSET) @@ -359,6 +381,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: oci_artifact=oci_artifact, outputs=outputs, plan_only=plan_only, + policy_reports=policy_reports, release_id=release_id, runner_jobs=runner_jobs, status=status, diff --git a/nuon/models/app_install_sandbox_run.py b/nuon/models/app_install_sandbox_run.py index 4abc9451..2325c5e1 100644 --- a/nuon/models/app_install_sandbox_run.py +++ b/nuon/models/app_install_sandbox_run.py @@ -16,6 +16,7 @@ from ..models.app_install_action_workflow_run import AppInstallActionWorkflowRun from ..models.app_install_sandbox_run_outputs import AppInstallSandboxRunOutputs from ..models.app_log_stream import AppLogStream + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_workflow import AppWorkflow @@ -38,6 +39,7 @@ class AppInstallSandboxRun: install_workflow_id (str | Unset): log_stream (AppLogStream | Unset): outputs (AppInstallSandboxRunOutputs | Unset): + policy_reports (list[AppPolicyReport] | Unset): run_type (AppSandboxRunType | Unset): runner_jobs (list[AppRunnerJob] | Unset): runner details status (str | Unset): @@ -59,6 +61,7 @@ class AppInstallSandboxRun: install_workflow_id: str | Unset = UNSET log_stream: AppLogStream | Unset = UNSET outputs: AppInstallSandboxRunOutputs | Unset = UNSET + policy_reports: list[AppPolicyReport] | Unset = UNSET run_type: AppSandboxRunType | Unset = UNSET runner_jobs: list[AppRunnerJob] | Unset = UNSET status: str | Unset = UNSET @@ -105,6 +108,13 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.outputs, Unset): outputs = self.outputs.to_dict() + policy_reports: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.policy_reports, Unset): + policy_reports = [] + for policy_reports_item_data in self.policy_reports: + policy_reports_item = policy_reports_item_data.to_dict() + policy_reports.append(policy_reports_item) + run_type: str | Unset = UNSET if not isinstance(self.run_type, Unset): run_type = self.run_type.value @@ -157,6 +167,8 @@ def to_dict(self) -> dict[str, Any]: field_dict["log_stream"] = log_stream if outputs is not UNSET: field_dict["outputs"] = outputs + if policy_reports is not UNSET: + field_dict["policy_reports"] = policy_reports if run_type is not UNSET: field_dict["run_type"] = run_type if runner_jobs is not UNSET: @@ -184,6 +196,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: from ..models.app_install_action_workflow_run import AppInstallActionWorkflowRun from ..models.app_install_sandbox_run_outputs import AppInstallSandboxRunOutputs from ..models.app_log_stream import AppLogStream + from ..models.app_policy_report import AppPolicyReport from ..models.app_runner_job import AppRunnerJob from ..models.app_workflow import AppWorkflow @@ -237,6 +250,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: outputs = AppInstallSandboxRunOutputs.from_dict(_outputs) + _policy_reports = d.pop("policy_reports", UNSET) + policy_reports: list[AppPolicyReport] | Unset = UNSET + if _policy_reports is not UNSET: + policy_reports = [] + for policy_reports_item_data in _policy_reports: + policy_reports_item = AppPolicyReport.from_dict(policy_reports_item_data) + + policy_reports.append(policy_reports_item) + _run_type = d.pop("run_type", UNSET) run_type: AppSandboxRunType | Unset if isinstance(_run_type, Unset): @@ -287,6 +309,7 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: install_workflow_id=install_workflow_id, log_stream=log_stream, outputs=outputs, + policy_reports=policy_reports, run_type=run_type, runner_jobs=runner_jobs, status=status, diff --git a/nuon/models/app_policy_input_ref.py b/nuon/models/app_policy_input_ref.py new file mode 100644 index 00000000..60dabd5a --- /dev/null +++ b/nuon/models/app_policy_input_ref.py @@ -0,0 +1,79 @@ +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="AppPolicyInputRef") + + +@_attrs_define +class AppPolicyInputRef: + """ + Attributes: + id (str | Unset): + name (str | Unset): + type_ (str | Unset): + """ + + id: str | Unset = UNSET + name: str | Unset = UNSET + type_: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + id = self.id + + name = self.name + + type_ = self.type_ + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if id is not UNSET: + field_dict["id"] = id + if name is not UNSET: + field_dict["name"] = name + if type_ is not UNSET: + field_dict["type"] = type_ + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + id = d.pop("id", UNSET) + + name = d.pop("name", UNSET) + + type_ = d.pop("type", UNSET) + + app_policy_input_ref = cls( + id=id, + name=name, + type_=type_, + ) + + app_policy_input_ref.additional_properties = d + return app_policy_input_ref + + @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_policy_report.py b/nuon/models/app_policy_report.py new file mode 100644 index 00000000..da2fa182 --- /dev/null +++ b/nuon/models/app_policy_report.py @@ -0,0 +1,333 @@ +from __future__ import annotations + +from collections.abc import Mapping +from typing import TYPE_CHECKING, Any, TypeVar, cast + +from attrs import define as _attrs_define +from attrs import field as _attrs_field + +from ..models.app_policy_report_owner_type import AppPolicyReportOwnerType +from ..types import UNSET, Unset + +if TYPE_CHECKING: + from ..models.app_composite_status import AppCompositeStatus + from ..models.app_policy_input_ref import AppPolicyInputRef + from ..models.app_policy_result import AppPolicyResult + from ..models.app_policy_violation import AppPolicyViolation + + +T = TypeVar("T", bound="AppPolicyReport") + + +@_attrs_define +class AppPolicyReport: + """ + Attributes: + app_id (str | Unset): Denormalized context for filtering + app_name (str | Unset): + component_id (str | Unset): + component_name (str | Unset): + created_at (str | Unset): + created_by_id (str | Unset): + deny_count (int | Unset): Summary counts for list views + evaluated_at (str | Unset): Canonical policy evaluation data + id (str | Unset): + inputs (list[AppPolicyInputRef] | Unset): + install_id (str | Unset): + install_name (str | Unset): + org_name (str | Unset): Denormalized display names for human-readable reports + owner_id (str | Unset): Polymorphic relationship to the impacted Nuon resource (indexes defined in Indexes()) + owner_type (AppPolicyReportOwnerType | Unset): + pass_count (int | Unset): + policies (list[AppPolicyResult] | Unset): + policy_ids (list[str] | Unset): + runner_job_id (str | Unset): + status (AppCompositeStatus | Unset): + updated_at (str | Unset): + violations (list[AppPolicyViolation] | Unset): + warn_count (int | Unset): + workflow_step_policy_validation_id (str | Unset): Optional context references (indexes defined in Indexes()) + """ + + app_id: str | Unset = UNSET + app_name: str | Unset = UNSET + component_id: str | Unset = UNSET + component_name: str | Unset = UNSET + created_at: str | Unset = UNSET + created_by_id: str | Unset = UNSET + deny_count: int | Unset = UNSET + evaluated_at: str | Unset = UNSET + id: str | Unset = UNSET + inputs: list[AppPolicyInputRef] | Unset = UNSET + install_id: str | Unset = UNSET + install_name: str | Unset = UNSET + org_name: str | Unset = UNSET + owner_id: str | Unset = UNSET + owner_type: AppPolicyReportOwnerType | Unset = UNSET + pass_count: int | Unset = UNSET + policies: list[AppPolicyResult] | Unset = UNSET + policy_ids: list[str] | Unset = UNSET + runner_job_id: str | Unset = UNSET + status: AppCompositeStatus | Unset = UNSET + updated_at: str | Unset = UNSET + violations: list[AppPolicyViolation] | Unset = UNSET + warn_count: int | Unset = UNSET + workflow_step_policy_validation_id: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + app_id = self.app_id + + app_name = self.app_name + + component_id = self.component_id + + component_name = self.component_name + + created_at = self.created_at + + created_by_id = self.created_by_id + + deny_count = self.deny_count + + evaluated_at = self.evaluated_at + + id = self.id + + inputs: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.inputs, Unset): + inputs = [] + for inputs_item_data in self.inputs: + inputs_item = inputs_item_data.to_dict() + inputs.append(inputs_item) + + install_id = self.install_id + + install_name = self.install_name + + org_name = self.org_name + + owner_id = self.owner_id + + owner_type: str | Unset = UNSET + if not isinstance(self.owner_type, Unset): + owner_type = self.owner_type.value + + pass_count = self.pass_count + + policies: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.policies, Unset): + policies = [] + for policies_item_data in self.policies: + policies_item = policies_item_data.to_dict() + policies.append(policies_item) + + policy_ids: list[str] | Unset = UNSET + if not isinstance(self.policy_ids, Unset): + policy_ids = self.policy_ids + + runner_job_id = self.runner_job_id + + status: dict[str, Any] | Unset = UNSET + if not isinstance(self.status, Unset): + status = self.status.to_dict() + + updated_at = self.updated_at + + violations: list[dict[str, Any]] | Unset = UNSET + if not isinstance(self.violations, Unset): + violations = [] + for violations_item_data in self.violations: + violations_item = violations_item_data.to_dict() + violations.append(violations_item) + + warn_count = self.warn_count + + workflow_step_policy_validation_id = self.workflow_step_policy_validation_id + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if app_id is not UNSET: + field_dict["app_id"] = app_id + if app_name is not UNSET: + field_dict["app_name"] = app_name + if component_id is not UNSET: + field_dict["component_id"] = component_id + if component_name is not UNSET: + field_dict["component_name"] = component_name + 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 deny_count is not UNSET: + field_dict["deny_count"] = deny_count + if evaluated_at is not UNSET: + field_dict["evaluated_at"] = evaluated_at + if id is not UNSET: + field_dict["id"] = id + if inputs is not UNSET: + field_dict["inputs"] = inputs + if install_id is not UNSET: + field_dict["install_id"] = install_id + if install_name is not UNSET: + field_dict["install_name"] = install_name + if org_name is not UNSET: + field_dict["org_name"] = org_name + if owner_id is not UNSET: + field_dict["owner_id"] = owner_id + if owner_type is not UNSET: + field_dict["owner_type"] = owner_type + if pass_count is not UNSET: + field_dict["pass_count"] = pass_count + if policies is not UNSET: + field_dict["policies"] = policies + if policy_ids is not UNSET: + field_dict["policy_ids"] = policy_ids + if runner_job_id is not UNSET: + field_dict["runner_job_id"] = runner_job_id + if status is not UNSET: + field_dict["status"] = status + if updated_at is not UNSET: + field_dict["updated_at"] = updated_at + if violations is not UNSET: + field_dict["violations"] = violations + if warn_count is not UNSET: + field_dict["warn_count"] = warn_count + if workflow_step_policy_validation_id is not UNSET: + field_dict["workflow_step_policy_validation_id"] = workflow_step_policy_validation_id + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + from ..models.app_composite_status import AppCompositeStatus + from ..models.app_policy_input_ref import AppPolicyInputRef + from ..models.app_policy_result import AppPolicyResult + from ..models.app_policy_violation import AppPolicyViolation + + d = dict(src_dict) + app_id = d.pop("app_id", UNSET) + + app_name = d.pop("app_name", UNSET) + + component_id = d.pop("component_id", UNSET) + + component_name = d.pop("component_name", UNSET) + + created_at = d.pop("created_at", UNSET) + + created_by_id = d.pop("created_by_id", UNSET) + + deny_count = d.pop("deny_count", UNSET) + + evaluated_at = d.pop("evaluated_at", UNSET) + + id = d.pop("id", UNSET) + + _inputs = d.pop("inputs", UNSET) + inputs: list[AppPolicyInputRef] | Unset = UNSET + if _inputs is not UNSET: + inputs = [] + for inputs_item_data in _inputs: + inputs_item = AppPolicyInputRef.from_dict(inputs_item_data) + + inputs.append(inputs_item) + + install_id = d.pop("install_id", UNSET) + + install_name = d.pop("install_name", UNSET) + + org_name = d.pop("org_name", UNSET) + + owner_id = d.pop("owner_id", UNSET) + + _owner_type = d.pop("owner_type", UNSET) + owner_type: AppPolicyReportOwnerType | Unset + if isinstance(_owner_type, Unset): + owner_type = UNSET + else: + owner_type = AppPolicyReportOwnerType(_owner_type) + + pass_count = d.pop("pass_count", UNSET) + + _policies = d.pop("policies", UNSET) + policies: list[AppPolicyResult] | Unset = UNSET + if _policies is not UNSET: + policies = [] + for policies_item_data in _policies: + policies_item = AppPolicyResult.from_dict(policies_item_data) + + policies.append(policies_item) + + policy_ids = cast(list[str], d.pop("policy_ids", UNSET)) + + runner_job_id = d.pop("runner_job_id", UNSET) + + _status = d.pop("status", UNSET) + status: AppCompositeStatus | Unset + if isinstance(_status, Unset): + status = UNSET + else: + status = AppCompositeStatus.from_dict(_status) + + updated_at = d.pop("updated_at", UNSET) + + _violations = d.pop("violations", UNSET) + violations: list[AppPolicyViolation] | Unset = UNSET + if _violations is not UNSET: + violations = [] + for violations_item_data in _violations: + violations_item = AppPolicyViolation.from_dict(violations_item_data) + + violations.append(violations_item) + + warn_count = d.pop("warn_count", UNSET) + + workflow_step_policy_validation_id = d.pop("workflow_step_policy_validation_id", UNSET) + + app_policy_report = cls( + app_id=app_id, + app_name=app_name, + component_id=component_id, + component_name=component_name, + created_at=created_at, + created_by_id=created_by_id, + deny_count=deny_count, + evaluated_at=evaluated_at, + id=id, + inputs=inputs, + install_id=install_id, + install_name=install_name, + org_name=org_name, + owner_id=owner_id, + owner_type=owner_type, + pass_count=pass_count, + policies=policies, + policy_ids=policy_ids, + runner_job_id=runner_job_id, + status=status, + updated_at=updated_at, + violations=violations, + warn_count=warn_count, + workflow_step_policy_validation_id=workflow_step_policy_validation_id, + ) + + app_policy_report.additional_properties = d + return app_policy_report + + @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_policy_report_owner_type.py b/nuon/models/app_policy_report_owner_type.py new file mode 100644 index 00000000..1d118ca4 --- /dev/null +++ b/nuon/models/app_policy_report_owner_type.py @@ -0,0 +1,10 @@ +from enum import Enum + + +class AppPolicyReportOwnerType(str, Enum): + COMPONENT_BUILDS = "component_builds" + INSTALL_DEPLOYS = "install_deploys" + INSTALL_SANDBOX_RUNS = "install_sandbox_runs" + + def __str__(self) -> str: + return str(self.value) diff --git a/nuon/models/app_policy_result.py b/nuon/models/app_policy_result.py new file mode 100644 index 00000000..ffa97d68 --- /dev/null +++ b/nuon/models/app_policy_result.py @@ -0,0 +1,115 @@ +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="AppPolicyResult") + + +@_attrs_define +class AppPolicyResult: + """ + Attributes: + deny_count (int | Unset): + input_count (int | Unset): + pass_count (int | Unset): + policy_id (str | Unset): + policy_name (str | Unset): + status (str | Unset): "deny", "warn", or "pass" + warn_count (int | Unset): + """ + + deny_count: int | Unset = UNSET + input_count: int | Unset = UNSET + pass_count: int | Unset = UNSET + policy_id: str | Unset = UNSET + policy_name: str | Unset = UNSET + status: str | Unset = UNSET + warn_count: int | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + deny_count = self.deny_count + + input_count = self.input_count + + pass_count = self.pass_count + + policy_id = self.policy_id + + policy_name = self.policy_name + + status = self.status + + warn_count = self.warn_count + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if deny_count is not UNSET: + field_dict["deny_count"] = deny_count + if input_count is not UNSET: + field_dict["input_count"] = input_count + if pass_count is not UNSET: + field_dict["pass_count"] = pass_count + if policy_id is not UNSET: + field_dict["policy_id"] = policy_id + if policy_name is not UNSET: + field_dict["policy_name"] = policy_name + if status is not UNSET: + field_dict["status"] = status + if warn_count is not UNSET: + field_dict["warn_count"] = warn_count + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + deny_count = d.pop("deny_count", UNSET) + + input_count = d.pop("input_count", UNSET) + + pass_count = d.pop("pass_count", UNSET) + + policy_id = d.pop("policy_id", UNSET) + + policy_name = d.pop("policy_name", UNSET) + + status = d.pop("status", UNSET) + + warn_count = d.pop("warn_count", UNSET) + + app_policy_result = cls( + deny_count=deny_count, + input_count=input_count, + pass_count=pass_count, + policy_id=policy_id, + policy_name=policy_name, + status=status, + warn_count=warn_count, + ) + + app_policy_result.additional_properties = d + return app_policy_result + + @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_policy_violation.py b/nuon/models/app_policy_violation.py new file mode 100644 index 00000000..b04d6205 --- /dev/null +++ b/nuon/models/app_policy_violation.py @@ -0,0 +1,97 @@ +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="AppPolicyViolation") + + +@_attrs_define +class AppPolicyViolation: + """ + Attributes: + input_identity (str | Unset): Human-readable input reference (e.g., "Deployment/default/nginx") + input_index (int | Unset): + message (str | Unset): + policy_id (str | Unset): + severity (str | Unset): "deny" or "warn" + """ + + input_identity: str | Unset = UNSET + input_index: int | Unset = UNSET + message: str | Unset = UNSET + policy_id: str | Unset = UNSET + severity: str | Unset = UNSET + additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) + + def to_dict(self) -> dict[str, Any]: + input_identity = self.input_identity + + input_index = self.input_index + + message = self.message + + policy_id = self.policy_id + + severity = self.severity + + field_dict: dict[str, Any] = {} + field_dict.update(self.additional_properties) + field_dict.update({}) + if input_identity is not UNSET: + field_dict["input_identity"] = input_identity + if input_index is not UNSET: + field_dict["input_index"] = input_index + if message is not UNSET: + field_dict["message"] = message + if policy_id is not UNSET: + field_dict["policy_id"] = policy_id + if severity is not UNSET: + field_dict["severity"] = severity + + return field_dict + + @classmethod + def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: + d = dict(src_dict) + input_identity = d.pop("input_identity", UNSET) + + input_index = d.pop("input_index", UNSET) + + message = d.pop("message", UNSET) + + policy_id = d.pop("policy_id", UNSET) + + severity = d.pop("severity", UNSET) + + app_policy_violation = cls( + input_identity=input_identity, + input_index=input_index, + message=message, + policy_id=policy_id, + severity=severity, + ) + + app_policy_violation.additional_properties = d + return app_policy_violation + + @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_status.py b/nuon/models/app_status.py index c1496f3c..8f997fd4 100644 --- a/nuon/models/app_status.py +++ b/nuon/models/app_status.py @@ -32,6 +32,7 @@ class AppStatus(str, Enum): RETRYING = "retrying" SUCCESS = "success" USER_SKIPPED = "user-skipped" + WARNING = "warning" def __str__(self) -> str: return str(self.value) diff --git a/nuon/models/app_workflow_step_policy_validation.py b/nuon/models/app_workflow_step_policy_validation.py index ba4b0f18..223c2a99 100644 --- a/nuon/models/app_workflow_step_policy_validation.py +++ b/nuon/models/app_workflow_step_policy_validation.py @@ -23,7 +23,7 @@ class AppWorkflowStepPolicyValidation: created_by_id (str | Unset): id (str | Unset): install_workflow_step_id (str | Unset): install workflow step is the install step that this was performed within - response (str | Unset): response is the kyverno response + response (str | Unset): response is the kyverno response (deprecated: use Reports for detailed results) runner_job_id (str | Unset): runnerJobID is the runner job that this was performed within status (AppCompositeStatus | Unset): updated_at (str | Unset): diff --git a/nuon/models/service_app_policy_config.py b/nuon/models/service_app_policy_config.py index b3a88805..4ab8bf31 100644 --- a/nuon/models/service_app_policy_config.py +++ b/nuon/models/service_app_policy_config.py @@ -20,13 +20,17 @@ class ServiceAppPolicyConfig: contents (str): type_ (ConfigAppPolicyType): components (list[str] | Unset): + description (str | Unset): engine (ConfigAppPolicyEngine | Unset): + name (str | Unset): """ contents: str type_: ConfigAppPolicyType components: list[str] | Unset = UNSET + description: str | Unset = UNSET engine: ConfigAppPolicyEngine | Unset = UNSET + name: str | Unset = UNSET additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict) def to_dict(self) -> dict[str, Any]: @@ -38,10 +42,14 @@ def to_dict(self) -> dict[str, Any]: if not isinstance(self.components, Unset): components = self.components + description = self.description + engine: str | Unset = UNSET if not isinstance(self.engine, Unset): engine = self.engine.value + name = self.name + field_dict: dict[str, Any] = {} field_dict.update(self.additional_properties) field_dict.update( @@ -52,8 +60,12 @@ def to_dict(self) -> dict[str, Any]: ) if components is not UNSET: field_dict["components"] = components + if description is not UNSET: + field_dict["description"] = description if engine is not UNSET: field_dict["engine"] = engine + if name is not UNSET: + field_dict["name"] = name return field_dict @@ -66,6 +78,8 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: components = cast(list[str], d.pop("components", UNSET)) + description = d.pop("description", UNSET) + _engine = d.pop("engine", UNSET) engine: ConfigAppPolicyEngine | Unset if isinstance(_engine, Unset): @@ -73,11 +87,15 @@ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T: else: engine = ConfigAppPolicyEngine(_engine) + name = d.pop("name", UNSET) + service_app_policy_config = cls( contents=contents, type_=type_, components=components, + description=description, engine=engine, + name=name, ) service_app_policy_config.additional_properties = d diff --git a/pyproject.toml b/pyproject.toml index 387f83ff..24ca7a76 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "nuon" -version = "0.19.770" +version = "0.19.771" description = "A client library for accessing Nuon" authors = [] requires-python = ">=3.10" @@ -16,7 +16,7 @@ module-name = "nuon" module-root = "" [build-system] -requires = ["uv_build>=0.9.0,<0.10.0"] +requires = ["uv_build>=0.10.0,<0.11.0"] build-backend = "uv_build" [tool.ruff] diff --git a/version.txt b/version.txt index ffaeb338..56b96a87 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -0.19.770 +0.19.771