-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathorganization_membership.py
More file actions
100 lines (65 loc) · 2.61 KB
/
organization_membership.py
File metadata and controls
100 lines (65 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Copyright IBM Corp. 2025, 2026
# SPDX-License-Identifier: MPL-2.0
from __future__ import annotations
from enum import Enum
from typing import TYPE_CHECKING
from pydantic import BaseModel, ConfigDict, Field
if TYPE_CHECKING:
from .organization import Organization
from .team import Team
from .user import User
class OrganizationMembershipStatus(str, Enum):
"""Organization membership status enum."""
ACTIVE = "active"
INVITED = "invited"
class OrgMembershipIncludeOpt(str, Enum):
"""Include options for organization membership queries."""
USER = "user"
TEAMS = "teams"
class OrganizationMembership(BaseModel):
"""Represents a Terraform Enterprise organization membership."""
model_config = ConfigDict(populate_by_name=True)
id: str
status: OrganizationMembershipStatus
email: str
# Relations
organization: Organization | None = None
user: User | None = None
teams: list[Team] | None = None
class OrganizationMembershipListOptions(BaseModel):
"""Options for listing organization memberships."""
model_config = ConfigDict(populate_by_name=True)
# Pagination
page_number: int | None = Field(None, alias="page[number]")
page_size: int | None = Field(None, alias="page[size]")
# Include related resources
include: list[OrgMembershipIncludeOpt] | None = None
# Filters
emails: list[str] | None = Field(None, alias="filter[email]")
status: OrganizationMembershipStatus | None = Field(None, alias="filter[status]")
query: str | None = Field(None, alias="q")
class OrganizationMembershipReadOptions(BaseModel):
"""Options for reading an organization membership."""
model_config = ConfigDict(populate_by_name=True)
# Include related resources
include: list[OrgMembershipIncludeOpt] | None = None
class OrganizationMembershipCreateOptions(BaseModel):
"""Options for creating an organization membership."""
model_config = ConfigDict(populate_by_name=True)
# Required
email: str
# Optional: A list of teams to add the user to
teams: list[Team] | None = None
# Rebuild models after all definitions to resolve forward references
def _rebuild_models() -> None:
"""Rebuild models to resolve forward references."""
try:
from .organization import Organization # noqa: F401
from .team import Team # noqa: F401
from .user import User # noqa: F401
OrganizationMembership.model_rebuild()
OrganizationMembershipCreateOptions.model_rebuild()
except Exception:
# If rebuild fails, models will still work at runtime
pass
_rebuild_models()