diff --git a/src/tfe/types.py b/src/tfe/types.py deleted file mode 100644 index f5581e2b..00000000 --- a/src/tfe/types.py +++ /dev/null @@ -1,224 +0,0 @@ -from __future__ import annotations - -from datetime import datetime -from enum import Enum - -from pydantic import BaseModel, Field - - -class OrganizationUpdateOptions(BaseModel): - name: str | None = None - email: str | None = None - assessments_enforced: bool | None = None - collaborator_auth_policy: str | None = None - cost_estimation_enabled: bool | None = None - default_execution_mode: str | None = None - external_id: str | None = None - is_unified: bool | None = None - owners_team_saml_role_id: str | None = None - permissions: dict | None = None - saml_enabled: bool | None = None - session_remember: int | None = None - session_timeout: int | None = None - two_factor_conformant: bool | None = None - send_passing_statuses_for_untriggered_speculative_plans: bool | None = None - remaining_testable_count: int | None = None - speculative_plan_management_enabled: bool | None = None - aggregated_commit_status_enabled: bool | None = None - allow_force_delete_workspaces: bool | None = None - default_project: dict | None = None - default_agent_pool: dict | None = None - data_retention_policy: dict | None = None - data_retention_policy_choice: dict | None = None - - -class OrganizationCreateOptions(BaseModel): - name: str | None = None - email: str | None = None - assessments_enforced: bool | None = None - collaborator_auth_policy: str | None = None - cost_estimation_enabled: bool | None = None - default_execution_mode: str | None = None - external_id: str | None = None - is_unified: bool | None = None - owners_team_saml_role_id: str | None = None - permissions: dict | None = None - saml_enabled: bool | None = None - session_remember: int | None = None - session_timeout: int | None = None - two_factor_conformant: bool | None = None - send_passing_statuses_for_untriggered_speculative_plans: bool | None = None - remaining_testable_count: int | None = None - speculative_plan_management_enabled: bool | None = None - aggregated_commit_status_enabled: bool | None = None - allow_force_delete_workspaces: bool | None = None - default_project: dict | None = None - default_agent_pool: dict | None = None - data_retention_policy: dict | None = None - data_retention_policy_choice: dict | None = None - - -class ExecutionMode(str, Enum): - REMOTE = "remote" - AGENT = "agent" - LOCAL = "local" - - -class RunStatus(str, Enum): - PLANNING = "planning" - PLANNED = "planned" - APPLIED = "applied" - CANCELED = "canceled" - ERRORED = "errored" - - -class Organization(BaseModel): - name: str | None = None - assessments_enforced: bool | None = None - collaborator_auth_policy: str | None = None - cost_estimation_enabled: bool | None = None - created_at: datetime | None = None - default_execution_mode: str | None = None - email: str | None = None - external_id: str | None = None - id: str | None = None - is_unified: bool | None = None - owners_team_saml_role_id: str | None = None - permissions: dict | None = None - saml_enabled: bool | None = None - session_remember: int | None = None - session_timeout: int | None = None - trial_expires_at: datetime | None = None - two_factor_conformant: bool | None = None - send_passing_statuses_for_untriggered_speculative_plans: bool | None = None - remaining_testable_count: int | None = None - speculative_plan_management_enabled: bool | None = None - aggregated_commit_status_enabled: bool | None = None - allow_force_delete_workspaces: bool | None = None - default_project: dict | None = None - default_agent_pool: dict | None = None - data_retention_policy: dict | None = None - data_retention_policy_choice: dict | None = None - - -class Project(BaseModel): - id: str - name: str - organization: str - - -class Workspace(BaseModel): - id: str - name: str - organization: str - execution_mode: ExecutionMode | None = None - project_id: str | None = None - tags: list[str] = Field(default_factory=list) - - -class Capacity(BaseModel): - organization: str - pending: int - running: int - - -class Entitlements(BaseModel): - id: str - agents: bool | None = None - audit_logging: bool | None = None - cost_estimation: bool | None = None - global_run_tasks: bool | None = None - operations: bool | None = None - private_module_registry: bool | None = None - private_run_tasks: bool | None = None - run_tasks: bool | None = None - sso: bool | None = None - sentinel: bool | None = None - state_storage: bool | None = None - teams: bool | None = None - vcs_integrations: bool | None = None - waypoint_actions: bool | None = None - waypoint_templates_and_addons: bool | None = None - - -class Run(BaseModel): - id: str - status: RunStatus - # Add other Run fields as needed - - -class Pagination(BaseModel): - current_page: int - total_count: int - # Add other pagination fields as needed - - -class RunQueue(BaseModel): - pagination: Pagination | None = None - items: list[Run] = Field(default_factory=list) - - -class ReadRunQueueOptions(BaseModel): - # List options for pagination - page_number: int | None = None - page_size: int | None = None - - -class DataRetentionPolicy(BaseModel): - """Deprecated: Use DataRetentionPolicyDeleteOlder instead.""" - - id: str - delete_older_than_n_days: int - - -class DataRetentionPolicyDeleteOlder(BaseModel): - id: str - delete_older_than_n_days: int - - -class DataRetentionPolicyDontDelete(BaseModel): - id: str - - -class DataRetentionPolicyChoice(BaseModel): - """Polymorphic data retention policy choice.""" - - data_retention_policy: DataRetentionPolicy | None = None - data_retention_policy_delete_older: DataRetentionPolicyDeleteOlder | None = None - data_retention_policy_dont_delete: DataRetentionPolicyDontDelete | None = None - - def is_populated(self) -> bool: - """Returns whether one of the choices is populated.""" - return ( - self.data_retention_policy is not None - or self.data_retention_policy_delete_older is not None - or self.data_retention_policy_dont_delete is not None - ) - - def convert_to_legacy_struct(self) -> DataRetentionPolicy | None: - """Convert the DataRetentionPolicyChoice to the legacy DataRetentionPolicy struct.""" - if not self.is_populated(): - return None - - if self.data_retention_policy is not None: - return self.data_retention_policy - elif self.data_retention_policy_delete_older is not None: - return DataRetentionPolicy( - id=self.data_retention_policy_delete_older.id, - delete_older_than_n_days=self.data_retention_policy_delete_older.delete_older_than_n_days, - ) - return None - - -class DataRetentionPolicySetOptions(BaseModel): - """Deprecated: Use DataRetentionPolicyDeleteOlderSetOptions instead.""" - - delete_older_than_n_days: int - - -class DataRetentionPolicyDeleteOlderSetOptions(BaseModel): - delete_older_than_n_days: int - - -class DataRetentionPolicyDontDeleteSetOptions(BaseModel): - pass # No additional fields needed diff --git a/src/tfe/types/__init__.py b/src/tfe/types/__init__.py new file mode 100644 index 00000000..630a3725 --- /dev/null +++ b/src/tfe/types/__init__.py @@ -0,0 +1,75 @@ +# File generated from migration to individual type files. See types/ folder for details. + +from __future__ import annotations + +from .capacity import Capacity as Capacity +from .data_retention import ( + DataRetentionPolicy as DataRetentionPolicy, +) +from .data_retention import ( + DataRetentionPolicyChoice as DataRetentionPolicyChoice, +) +from .data_retention import ( + DataRetentionPolicyDeleteOlder as DataRetentionPolicyDeleteOlder, +) +from .data_retention import ( + DataRetentionPolicyDeleteOlderSetOptions as DataRetentionPolicyDeleteOlderSetOptions, +) +from .data_retention import ( + DataRetentionPolicyDontDelete as DataRetentionPolicyDontDelete, +) +from .data_retention import ( + DataRetentionPolicyDontDeleteSetOptions as DataRetentionPolicyDontDeleteSetOptions, +) +from .data_retention import ( + DataRetentionPolicySetOptions as DataRetentionPolicySetOptions, +) +from .entitlements import Entitlements as Entitlements +from .execution import ExecutionMode as ExecutionMode +from .organization import ( + Organization as Organization, +) +from .organization import ( + OrganizationCreateOptions as OrganizationCreateOptions, +) +from .organization import ( + OrganizationUpdateOptions as OrganizationUpdateOptions, +) +from .pagination import Pagination as Pagination +from .project import Project as Project +from .run import ( + ReadRunQueueOptions as ReadRunQueueOptions, +) +from .run import ( + Run as Run, +) +from .run import ( + RunQueue as RunQueue, +) +from .run import ( + RunStatus as RunStatus, +) +from .workspace import Workspace as Workspace + +__all__ = [ + "Capacity", + "DataRetentionPolicy", + "DataRetentionPolicyChoice", + "DataRetentionPolicyDeleteOlder", + "DataRetentionPolicyDeleteOlderSetOptions", + "DataRetentionPolicyDontDelete", + "DataRetentionPolicyDontDeleteSetOptions", + "DataRetentionPolicySetOptions", + "Entitlements", + "ExecutionMode", + "Organization", + "OrganizationCreateOptions", + "OrganizationUpdateOptions", + "Pagination", + "Project", + "ReadRunQueueOptions", + "Run", + "RunQueue", + "RunStatus", + "Workspace", +] diff --git a/src/tfe/types/capacity.py b/src/tfe/types/capacity.py new file mode 100644 index 00000000..fad8b8e2 --- /dev/null +++ b/src/tfe/types/capacity.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from pydantic import BaseModel + +__all__ = [ + "Capacity", +] + + +class Capacity(BaseModel): + organization: str + pending: int + running: int diff --git a/src/tfe/types/data_retention.py b/src/tfe/types/data_retention.py new file mode 100644 index 00000000..9fd134a5 --- /dev/null +++ b/src/tfe/types/data_retention.py @@ -0,0 +1,73 @@ +from __future__ import annotations + +from pydantic import BaseModel + +__all__ = [ + "DataRetentionPolicy", + "DataRetentionPolicyDeleteOlder", + "DataRetentionPolicyDontDelete", + "DataRetentionPolicyChoice", + "DataRetentionPolicySetOptions", + "DataRetentionPolicyDeleteOlderSetOptions", + "DataRetentionPolicyDontDeleteSetOptions", +] + + +class DataRetentionPolicy(BaseModel): + """Deprecated: Use DataRetentionPolicyDeleteOlder instead.""" + + id: str + delete_older_than_n_days: int + + +class DataRetentionPolicyDeleteOlder(BaseModel): + id: str + delete_older_than_n_days: int + + +class DataRetentionPolicyDontDelete(BaseModel): + id: str + + +class DataRetentionPolicyChoice(BaseModel): + """Polymorphic data retention policy choice.""" + + data_retention_policy: DataRetentionPolicy | None = None + data_retention_policy_delete_older: DataRetentionPolicyDeleteOlder | None = None + data_retention_policy_dont_delete: DataRetentionPolicyDontDelete | None = None + + def is_populated(self) -> bool: + """Returns whether one of the choices is populated.""" + return ( + self.data_retention_policy is not None + or self.data_retention_policy_delete_older is not None + or self.data_retention_policy_dont_delete is not None + ) + + def convert_to_legacy_struct(self) -> DataRetentionPolicy | None: + """Convert the DataRetentionPolicyChoice to the legacy DataRetentionPolicy struct.""" + if not self.is_populated(): + return None + + if self.data_retention_policy is not None: + return self.data_retention_policy + elif self.data_retention_policy_delete_older is not None: + return DataRetentionPolicy( + id=self.data_retention_policy_delete_older.id, + delete_older_than_n_days=self.data_retention_policy_delete_older.delete_older_than_n_days, + ) + return None + + +class DataRetentionPolicySetOptions(BaseModel): + """Deprecated: Use DataRetentionPolicyDeleteOlderSetOptions instead.""" + + delete_older_than_n_days: int + + +class DataRetentionPolicyDeleteOlderSetOptions(BaseModel): + delete_older_than_n_days: int + + +class DataRetentionPolicyDontDeleteSetOptions(BaseModel): + pass # No additional fields needed diff --git a/src/tfe/types/entitlements.py b/src/tfe/types/entitlements.py new file mode 100644 index 00000000..fce78a32 --- /dev/null +++ b/src/tfe/types/entitlements.py @@ -0,0 +1,26 @@ +from __future__ import annotations + +from pydantic import BaseModel + +__all__ = [ + "Entitlements", +] + + +class Entitlements(BaseModel): + id: str + agents: bool | None = None + audit_logging: bool | None = None + cost_estimation: bool | None = None + global_run_tasks: bool | None = None + operations: bool | None = None + private_module_registry: bool | None = None + private_run_tasks: bool | None = None + run_tasks: bool | None = None + sso: bool | None = None + sentinel: bool | None = None + state_storage: bool | None = None + teams: bool | None = None + vcs_integrations: bool | None = None + waypoint_actions: bool | None = None + waypoint_templates_and_addons: bool | None = None diff --git a/src/tfe/types/execution.py b/src/tfe/types/execution.py new file mode 100644 index 00000000..cf2010af --- /dev/null +++ b/src/tfe/types/execution.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from enum import Enum + +__all__ = [ + "ExecutionMode", +] + + +class ExecutionMode(str, Enum): + REMOTE = "remote" + AGENT = "agent" + LOCAL = "local" diff --git a/src/tfe/types/organization.py b/src/tfe/types/organization.py new file mode 100644 index 00000000..35f86175 --- /dev/null +++ b/src/tfe/types/organization.py @@ -0,0 +1,92 @@ +from __future__ import annotations + +from datetime import datetime + +from pydantic import BaseModel + +__all__ = [ + "OrganizationUpdateOptions", + "OrganizationCreateOptions", + "Organization", +] + + +class OrganizationUpdateOptions(BaseModel): + name: str | None = None + email: str | None = None + assessments_enforced: bool | None = None + collaborator_auth_policy: str | None = None + cost_estimation_enabled: bool | None = None + default_execution_mode: str | None = None + external_id: str | None = None + is_unified: bool | None = None + owners_team_saml_role_id: str | None = None + permissions: dict | None = None + saml_enabled: bool | None = None + session_remember: int | None = None + session_timeout: int | None = None + two_factor_conformant: bool | None = None + send_passing_statuses_for_untriggered_speculative_plans: bool | None = None + remaining_testable_count: int | None = None + speculative_plan_management_enabled: bool | None = None + aggregated_commit_status_enabled: bool | None = None + allow_force_delete_workspaces: bool | None = None + default_project: dict | None = None + default_agent_pool: dict | None = None + data_retention_policy: dict | None = None + data_retention_policy_choice: dict | None = None + + +class OrganizationCreateOptions(BaseModel): + name: str | None = None + email: str | None = None + assessments_enforced: bool | None = None + collaborator_auth_policy: str | None = None + cost_estimation_enabled: bool | None = None + default_execution_mode: str | None = None + external_id: str | None = None + is_unified: bool | None = None + owners_team_saml_role_id: str | None = None + permissions: dict | None = None + saml_enabled: bool | None = None + session_remember: int | None = None + session_timeout: int | None = None + two_factor_conformant: bool | None = None + send_passing_statuses_for_untriggered_speculative_plans: bool | None = None + remaining_testable_count: int | None = None + speculative_plan_management_enabled: bool | None = None + aggregated_commit_status_enabled: bool | None = None + allow_force_delete_workspaces: bool | None = None + default_project: dict | None = None + default_agent_pool: dict | None = None + data_retention_policy: dict | None = None + data_retention_policy_choice: dict | None = None + + +class Organization(BaseModel): + name: str | None = None + assessments_enforced: bool | None = None + collaborator_auth_policy: str | None = None + cost_estimation_enabled: bool | None = None + created_at: datetime | None = None + default_execution_mode: str | None = None + email: str | None = None + external_id: str | None = None + id: str | None = None + is_unified: bool | None = None + owners_team_saml_role_id: str | None = None + permissions: dict | None = None + saml_enabled: bool | None = None + session_remember: int | None = None + session_timeout: int | None = None + trial_expires_at: datetime | None = None + two_factor_conformant: bool | None = None + send_passing_statuses_for_untriggered_speculative_plans: bool | None = None + remaining_testable_count: int | None = None + speculative_plan_management_enabled: bool | None = None + aggregated_commit_status_enabled: bool | None = None + allow_force_delete_workspaces: bool | None = None + default_project: dict | None = None + default_agent_pool: dict | None = None + data_retention_policy: dict | None = None + data_retention_policy_choice: dict | None = None diff --git a/src/tfe/types/pagination.py b/src/tfe/types/pagination.py new file mode 100644 index 00000000..062c1129 --- /dev/null +++ b/src/tfe/types/pagination.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from pydantic import BaseModel + +__all__ = [ + "Pagination", +] + + +class Pagination(BaseModel): + current_page: int + total_count: int + # Add other pagination fields as needed diff --git a/src/tfe/types/project.py b/src/tfe/types/project.py new file mode 100644 index 00000000..0d6a5df7 --- /dev/null +++ b/src/tfe/types/project.py @@ -0,0 +1,13 @@ +from __future__ import annotations + +from pydantic import BaseModel + +__all__ = [ + "Project", +] + + +class Project(BaseModel): + id: str + name: str + organization: str diff --git a/src/tfe/types/run.py b/src/tfe/types/run.py new file mode 100644 index 00000000..a6b7befb --- /dev/null +++ b/src/tfe/types/run.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from enum import Enum +from typing import TYPE_CHECKING + +from pydantic import BaseModel, Field + +if TYPE_CHECKING: + from .pagination import Pagination + +__all__ = [ + "RunStatus", + "Run", + "RunQueue", + "ReadRunQueueOptions", +] + + +class RunStatus(str, Enum): + PLANNING = "planning" + PLANNED = "planned" + APPLIED = "applied" + CANCELED = "canceled" + ERRORED = "errored" + + +class Run(BaseModel): + id: str + status: RunStatus + # Add other Run fields as needed + + +class RunQueue(BaseModel): + pagination: Pagination | None = None + items: list[Run] = Field(default_factory=list) + + +class ReadRunQueueOptions(BaseModel): + # List options for pagination + page_number: int | None = None + page_size: int | None = None diff --git a/src/tfe/types/workspace.py b/src/tfe/types/workspace.py new file mode 100644 index 00000000..e812707e --- /dev/null +++ b/src/tfe/types/workspace.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from pydantic import BaseModel, Field + +if TYPE_CHECKING: + from .execution import ExecutionMode + +__all__ = [ + "Workspace", +] + + +class Workspace(BaseModel): + id: str + name: str + organization: str + execution_mode: ExecutionMode | None = None + project_id: str | None = None + tags: list[str] = Field(default_factory=list)