Skip to content

Commit 416139a

Browse files
authored
Features providing Policy Set API Specs (#45)
1 parent 0a5bc6e commit 416139a

File tree

10 files changed

+1313
-14
lines changed

10 files changed

+1313
-14
lines changed

examples/policy_set.py

Lines changed: 446 additions & 0 deletions
Large diffs are not rendered by default.

src/pytfe/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from .resources.plan import Plans
1313
from .resources.policy import Policies
1414
from .resources.policy_check import PolicyChecks
15+
from .resources.policy_set import PolicySets
1516
from .resources.projects import Projects
1617
from .resources.query_run import QueryRuns
1718
from .resources.registry_module import RegistryModules
@@ -76,6 +77,7 @@ def __init__(self, config: TFEConfig | None = None):
7677
self.run_events = RunEvents(self._transport)
7778
self.policies = Policies(self._transport)
7879
self.policy_checks = PolicyChecks(self._transport)
80+
self.policy_sets = PolicySets(self._transport)
7981

8082
# SSH Keys
8183
self.ssh_keys = SSHKeys(self._transport)

src/pytfe/errors.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,3 +423,25 @@ class InvalidPolicyCheckIDError(InvalidValues):
423423

424424
def __init__(self, message: str = "invalid value for policy check ID"):
425425
super().__init__(message)
426+
427+
428+
# Policy Set errors
429+
class InvalidPolicySetIDError(InvalidValues):
430+
"""Raised when an invalid policy set ID is provided."""
431+
432+
def __init__(self, message: str = "invalid value for policy set ID"):
433+
super().__init__(message)
434+
435+
436+
class RequiredPoliciesError(RequiredFieldMissing):
437+
"""Raised when a required policies field is missing."""
438+
439+
def __init__(self, message: str = "policies are required"):
440+
super().__init__(message)
441+
442+
443+
class InvalidPoliciesError(InvalidValues):
444+
"""Raised when an invalid policies field is provided."""
445+
446+
def __init__(self, message: str = "must provide at least one policy"):
447+
super().__init__(message)

src/pytfe/models/__init__.py

Lines changed: 184 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@
1919
AgentTokenListOptions,
2020
)
2121

22+
# ──Apply / Plans ──────────────────────────────────────────────────────────────
23+
from .apply import (
24+
Apply,
25+
)
26+
2227
# ── Core models split out of old types.py ─────────────────────────────────────
2328
# Adjust these imports to match where you placed them during the split.
2429
# Common / pagination / enums
@@ -86,6 +91,51 @@
8691
ReadRunQueueOptions,
8792
RunQueue,
8893
)
94+
from .plan import (
95+
Plan,
96+
)
97+
from .policy import (
98+
Policy,
99+
PolicyCreateOptions,
100+
PolicyList,
101+
PolicyListOptions,
102+
PolicyUpdateOptions,
103+
)
104+
105+
# ── Policy ─────────────────────────────────────────────────────────────
106+
from .policy_check import (
107+
PolicyActions,
108+
PolicyCheck,
109+
PolicyCheckIncludeOpt,
110+
PolicyCheckList,
111+
PolicyCheckListOptions,
112+
PolicyPermissions,
113+
PolicyResult,
114+
PolicyScope,
115+
PolicyStatus,
116+
PolicyStatusTimestamps,
117+
)
118+
from .policy_set import (
119+
PolicySet,
120+
PolicySetAddPoliciesOptions,
121+
PolicySetAddProjectsOptions,
122+
PolicySetAddWorkspaceExclusionsOptions,
123+
PolicySetAddWorkspacesOptions,
124+
PolicySetCreateOptions,
125+
PolicySetIncludeOpt,
126+
PolicySetList,
127+
PolicySetListOptions,
128+
PolicySetReadOptions,
129+
PolicySetRemovePoliciesOptions,
130+
PolicySetRemoveProjectsOptions,
131+
PolicySetRemoveWorkspaceExclusionsOptions,
132+
PolicySetRemoveWorkspacesOptions,
133+
PolicySetUpdateOptions,
134+
)
135+
from .policy_types import (
136+
EnforcementLevel,
137+
PolicyKind,
138+
)
89139
from .project import Project
90140

91141
# ── Query Runs ────────────────────────────────────────────────────────────────
@@ -158,8 +208,55 @@
158208

159209
# Runs
160210
from .run import (
211+
OrganizationRunList,
161212
Run,
213+
RunActions,
214+
RunApplyOptions,
215+
RunCancelOptions,
216+
RunCreateOptions,
217+
RunDiscardOptions,
218+
RunForceCancelOptions,
219+
RunIncludeOpt,
220+
RunList,
221+
RunListForOrganizationOptions,
222+
RunListOptions,
223+
RunOperation,
224+
RunPermissions,
225+
RunReadOptions,
226+
RunSource,
162227
RunStatus,
228+
RunStatusTimestamps,
229+
RunVariable,
230+
RunVariableAttr,
231+
)
232+
from .run_event import (
233+
RunEvent,
234+
RunEventIncludeOpt,
235+
RunEventList,
236+
RunEventListOptions,
237+
RunEventReadOptions,
238+
)
239+
from .run_task import (
240+
GlobalRunTask,
241+
GlobalRunTaskOptions,
242+
RunTask,
243+
RunTaskCreateOptions,
244+
RunTaskIncludeOptions,
245+
RunTaskList,
246+
RunTaskListOptions,
247+
RunTaskReadOptions,
248+
RunTaskUpdateOptions,
249+
Stage,
250+
TaskEnforcementLevel,
251+
)
252+
from .run_trigger import (
253+
RunTrigger,
254+
RunTriggerCreateOptions,
255+
RunTriggerFilterOp,
256+
RunTriggerIncludeOp,
257+
RunTriggerList,
258+
RunTriggerListOptions,
259+
SourceableChoice,
163260
)
164261

165262
# ── SSH Keys ──────────────────────────────────────────────────────────────────
@@ -183,6 +280,7 @@
183280
from .workspace import (
184281
LockedByChoice,
185282
VCSRepo,
283+
VCSRepoOptions,
186284
Workspace,
187285
WorkspaceActions,
188286
WorkspaceAddRemoteStateConsumersOptions,
@@ -341,6 +439,7 @@
341439
"VariableUpdateOptions",
342440
"LockedByChoice",
343441
"VCSRepo",
442+
"VCSRepoOptions",
344443
"Workspace",
345444
"WorkspaceActions",
346445
"WorkspaceAddRemoteStateConsumersOptions",
@@ -364,8 +463,91 @@
364463
"WorkspaceTagListOptions",
365464
"WorkspaceUpdateOptions",
366465
"WorkspaceUpdateRemoteStateConsumersOptions",
367-
"Run",
368466
"RunQueue",
369-
"RunStatus",
370467
"ReadRunQueueOptions",
468+
# Apply & Plans
469+
"Apply",
470+
"Plan",
471+
# Runs
472+
"Run",
473+
"RunStatus",
474+
"RunSource",
475+
"RunIncludeOpt",
476+
"RunOperation",
477+
"RunActions",
478+
"RunPermissions",
479+
"RunStatusTimestamps",
480+
"RunVariable",
481+
"RunVariableAttr",
482+
"RunList",
483+
"RunListOptions",
484+
"OrganizationRunList",
485+
"RunListForOrganizationOptions",
486+
"RunCreateOptions",
487+
"RunReadOptions",
488+
"RunApplyOptions",
489+
"RunCancelOptions",
490+
"RunForceCancelOptions",
491+
"RunDiscardOptions",
492+
# Run events
493+
"RunEvent",
494+
"RunEventIncludeOpt",
495+
"RunEventList",
496+
"RunEventListOptions",
497+
"RunEventReadOptions",
498+
# Run tasks
499+
"RunTask",
500+
"RunTaskIncludeOptions",
501+
"GlobalRunTask",
502+
"GlobalRunTaskOptions",
503+
"Stage",
504+
"TaskEnforcementLevel",
505+
"RunTaskList",
506+
"RunTaskListOptions",
507+
"RunTaskCreateOptions",
508+
"RunTaskUpdateOptions",
509+
"RunTaskReadOptions",
510+
# Run triggers
511+
"RunTrigger",
512+
"RunTriggerCreateOptions",
513+
"RunTriggerList",
514+
"RunTriggerListOptions",
515+
"SourceableChoice",
516+
"RunTriggerFilterOp",
517+
"RunTriggerIncludeOp",
518+
# Policy Checks
519+
"PolicyCheck",
520+
"PolicyCheckIncludeOpt",
521+
"PolicyScope",
522+
"PolicyStatus",
523+
"PolicyActions",
524+
"PolicyPermissions",
525+
"PolicyResult",
526+
"PolicyStatusTimestamps",
527+
"PolicyCheckListOptions",
528+
"PolicyCheckList",
529+
# Policy
530+
"Policy",
531+
"PolicyCreateOptions",
532+
"PolicyList",
533+
"PolicyListOptions",
534+
"PolicyUpdateOptions",
535+
# Policy Sets
536+
"PolicySet",
537+
"PolicySetIncludeOpt",
538+
"PolicySetList",
539+
"PolicySetAddPoliciesOptions",
540+
"PolicySetAddProjectsOptions",
541+
"PolicySetAddWorkspacesOptions",
542+
"PolicySetAddWorkspaceExclusionsOptions",
543+
"PolicySetCreateOptions",
544+
"PolicySetListOptions",
545+
"PolicySetReadOptions",
546+
"PolicySetRemovePoliciesOptions",
547+
"PolicySetRemoveWorkspacesOptions",
548+
"PolicySetRemoveWorkspaceExclusionsOptions",
549+
"PolicySetRemoveProjectsOptions",
550+
"PolicySetUpdateOptions",
551+
"PolicyKind",
552+
"EnforcementLevel",
371553
]

src/pytfe/models/policy.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,11 @@
11
from __future__ import annotations
22

33
from datetime import datetime
4-
from enum import Enum
54

65
from pydantic import BaseModel, ConfigDict, Field
76

87
from .organization import Organization
9-
from .policy_set import PolicyKind
10-
11-
12-
class EnforcementLevel(str, Enum):
13-
ENFORCEMENT_ADVISORY = "advisory"
14-
ENFORCEMENT_MANDATORY = "mandatory"
15-
ENFORCEMENT_HARD = "hard-mandatory"
16-
ENFORCEMENT_SOFT = "soft-mandatory"
8+
from .policy_types import EnforcementLevel, PolicyKind
179

1810

1911
class Policy(BaseModel):

0 commit comments

Comments
 (0)