Skip to content

Commit d448e30

Browse files
committed
fix few api path
1 parent 1634e64 commit d448e30

8 files changed

Lines changed: 347 additions & 8 deletions

File tree

src/pytfe/models/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
TerraformVersion,
4949
TerraformVersionCreateOptions,
5050
TerraformVersionUpdateOptions,
51+
ToolVersionArchitecture,
5152
)
5253

5354
# ── TFE admin workspaces ──────────────────────────────────────────────────────
@@ -606,6 +607,7 @@
606607
# ── Public surface ────────────────────────────────────────────────────────────
607608
__all__ = [
608609
# TFE admin versions
610+
"ToolVersionArchitecture",
609611
"TerraformVersion",
610612
"TerraformVersionCreateOptions",
611613
"TerraformVersionUpdateOptions",

src/pytfe/models/admin_run.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ class AdminRun(BaseModel):
2020
model_config = ConfigDict(populate_by_name=True, validate_by_name=True)
2121
id: str | None = None
2222
status: RunStatus | None = None
23+
has_changes: bool | None = Field(default=None, alias="has-changes")
2324
plan_only: bool | None = Field(default=None, alias="plan-only")
24-
organization_name: str | None = None
25-
workspace_name: str | None = None
25+
# Populated from the `workspace` relationship (always present).
2626
workspace_id: str | None = None
27+
# Populated only when `?include=workspace.organization` is passed.
28+
organization_name: str | None = None

src/pytfe/models/admin_version.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@
66
from pydantic import BaseModel, ConfigDict, Field
77

88

9+
class ToolVersionArchitecture(BaseModel):
10+
model_config = ConfigDict(populate_by_name=True, validate_by_name=True)
11+
url: str | None = None
12+
sha: str | None = None
13+
os: str | None = None
14+
arch: str | None = None
15+
16+
917
class TerraformVersion(BaseModel):
1018
model_config = ConfigDict(populate_by_name=True, validate_by_name=True)
1119
id: str | None = None
@@ -19,6 +27,7 @@ class TerraformVersion(BaseModel):
1927
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
2028
usage: int | None = None
2129
created_at: str | None = Field(default=None, alias="created-at")
30+
archs: list[ToolVersionArchitecture] | None = None
2231

2332

2433
class TerraformVersionCreateOptions(BaseModel):
@@ -31,6 +40,7 @@ class TerraformVersionCreateOptions(BaseModel):
3140
beta: bool | None = None
3241
deprecated: bool | None = None
3342
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
43+
archs: list[ToolVersionArchitecture] | None = None
3444

3545

3646
class TerraformVersionUpdateOptions(BaseModel):
@@ -43,6 +53,7 @@ class TerraformVersionUpdateOptions(BaseModel):
4353
beta: bool | None = None
4454
deprecated: bool | None = None
4555
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
56+
archs: list[ToolVersionArchitecture] | None = None
4657

4758

4859
class OpaVersion(BaseModel):
@@ -58,6 +69,7 @@ class OpaVersion(BaseModel):
5869
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
5970
usage: int | None = None
6071
created_at: str | None = Field(default=None, alias="created-at")
72+
archs: list[ToolVersionArchitecture] | None = None
6173

6274

6375
class OpaVersionCreateOptions(BaseModel):
@@ -70,6 +82,7 @@ class OpaVersionCreateOptions(BaseModel):
7082
beta: bool | None = None
7183
deprecated: bool | None = None
7284
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
85+
archs: list[ToolVersionArchitecture] | None = None
7386

7487

7588
class OpaVersionUpdateOptions(BaseModel):
@@ -82,6 +95,7 @@ class OpaVersionUpdateOptions(BaseModel):
8295
beta: bool | None = None
8396
deprecated: bool | None = None
8497
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
98+
archs: list[ToolVersionArchitecture] | None = None
8599

86100

87101
class SentinelVersion(BaseModel):
@@ -97,6 +111,7 @@ class SentinelVersion(BaseModel):
97111
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
98112
usage: int | None = None
99113
created_at: str | None = Field(default=None, alias="created-at")
114+
archs: list[ToolVersionArchitecture] | None = None
100115

101116

102117
class SentinelVersionCreateOptions(BaseModel):
@@ -109,6 +124,7 @@ class SentinelVersionCreateOptions(BaseModel):
109124
beta: bool | None = None
110125
deprecated: bool | None = None
111126
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
127+
archs: list[ToolVersionArchitecture] | None = None
112128

113129

114130
class SentinelVersionUpdateOptions(BaseModel):
@@ -121,3 +137,4 @@ class SentinelVersionUpdateOptions(BaseModel):
121137
beta: bool | None = None
122138
deprecated: bool | None = None
123139
deprecated_reason: str | None = Field(default=None, alias="deprecated-reason")
140+
archs: list[ToolVersionArchitecture] | None = None

src/pytfe/models/admin_workspace.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ class AdminWorkspace(BaseModel):
1818
id: str | None = None
1919
name: str | None = None
2020
locked: bool | None = None
21-
execution_mode: str | None = Field(default=None, alias="execution-mode")
21+
# vcs-repo is an attribute object; only the identifier is surfaced here.
22+
vcs_repo_identifier: str | None = None
23+
# Lifted from the `organization` relationship at parse time.
2224
organization_name: str | None = None
25+
# Lifted from the `current-run` relationship at parse time.
2326
current_run_id: str | None = None

src/pytfe/resources/admin/_runs.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,13 @@
1515
def _parse_admin_run(data: dict[str, Any]) -> AdminRun:
1616
attrs = data.get("attributes") or {}
1717
rels = data.get("relationships") or {}
18-
org_data = (rels.get("organization") or {}).get("data") or {}
1918
ws_data = (rels.get("workspace") or {}).get("data") or {}
19+
# organization is a compound include (workspace.organization) — only
20+
# present when the caller passes ?include=workspace.organization.
21+
# We don't surface that parameter yet, so organization_name stays None.
2022
return AdminRun.model_validate(
2123
{
2224
"id": data.get("id"),
23-
"organization_name": org_data.get("id"),
2425
"workspace_id": ws_data.get("id"),
2526
**attrs,
2627
}

src/pytfe/resources/admin/_users.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,21 +60,21 @@ def unsuspend(self, user_id: str) -> AdminUser:
6060
def grant_admin(self, user_id: str) -> AdminUser:
6161
if not valid_string_id(user_id):
6262
raise ValueError(ERR_INVALID_NAME)
63-
r = self.t.request("POST", f"/api/v2/admin/users/{user_id}/actions/grant-admin")
63+
r = self.t.request("POST", f"/api/v2/admin/users/{user_id}/actions/grant_admin")
6464
return _parse_admin_user(r.json()["data"])
6565

6666
def revoke_admin(self, user_id: str) -> AdminUser:
6767
if not valid_string_id(user_id):
6868
raise ValueError(ERR_INVALID_NAME)
6969
r = self.t.request(
70-
"POST", f"/api/v2/admin/users/{user_id}/actions/revoke-admin"
70+
"POST", f"/api/v2/admin/users/{user_id}/actions/revoke_admin"
7171
)
7272
return _parse_admin_user(r.json()["data"])
7373

7474
def disable_two_factor(self, user_id: str) -> AdminUser:
7575
if not valid_string_id(user_id):
7676
raise ValueError(ERR_INVALID_NAME)
7777
r = self.t.request(
78-
"POST", f"/api/v2/admin/users/{user_id}/actions/disable-two-factor"
78+
"POST", f"/api/v2/admin/users/{user_id}/actions/disable_two_factor"
7979
)
8080
return _parse_admin_user(r.json()["data"])

src/pytfe/resources/admin/_workspaces.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ def _parse_admin_workspace(data: dict[str, Any]) -> AdminWorkspace:
1717
rels = data.get("relationships") or {}
1818
org_data = (rels.get("organization") or {}).get("data") or {}
1919
run_data = (rels.get("current-run") or {}).get("data") or {}
20+
vcs_repo = attrs.pop("vcs-repo", None) or {}
2021
return AdminWorkspace.model_validate(
2122
{
2223
"id": data.get("id"),
2324
"organization_name": org_data.get("id"),
2425
"current_run_id": run_data.get("id"),
26+
"vcs_repo_identifier": vcs_repo.get("identifier") if vcs_repo else None,
2527
**attrs,
2628
}
2729
)

0 commit comments

Comments
 (0)