-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgroup.py
More file actions
188 lines (164 loc) · 11.6 KB
/
group.py
File metadata and controls
188 lines (164 loc) · 11.6 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# coding: utf-8
"""
Opal API
The Opal API is a RESTful API that allows you to interact with the Opal Security platform programmatically.
The version of the OpenAPI document: 1.0
Contact: hello@opal.dev
Generated by OpenAPI Generator (https://openapi-generator.tech)
Do not edit the class manually.
""" # noqa: E501
from __future__ import annotations
import pprint
import re # noqa: F401
import json
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StrictStr
from typing import Any, ClassVar, Dict, List, Optional
from typing_extensions import Annotated
from uuid import UUID
from opal_security.models.group_remote_info import GroupRemoteInfo
from opal_security.models.group_type_enum import GroupTypeEnum
from opal_security.models.request_configuration import RequestConfiguration
from opal_security.models.risk_sensitivity_enum import RiskSensitivityEnum
from opal_security.models.sync_task import SyncTask
from typing import Optional, Set
from typing_extensions import Self
class Group(BaseModel):
"""
# Group Object ### Description The `Group` object is used to represent a group. ### Usage Example Update from the `UPDATE Groups` endpoint.
""" # noqa: E501
group_id: UUID = Field(description="The ID of the group.")
app_id: Optional[UUID] = Field(default=None, description="The ID of the group's app.")
name: Optional[StrictStr] = Field(default=None, description="The name of the group.")
description: Optional[StrictStr] = Field(default=None, description="A description of the group.")
admin_owner_id: Optional[UUID] = Field(default=None, description="The ID of the owner of the group.")
group_leader_user_ids: Optional[List[UUID]] = Field(default=None, description="A list of User IDs for the group leaders of the group")
remote_id: Optional[StrictStr] = Field(default=None, description="The ID of the remote.")
remote_name: Optional[StrictStr] = Field(default=None, description="The name of the remote.")
group_type: Optional[GroupTypeEnum] = None
max_duration: Optional[StrictInt] = Field(default=None, description="The maximum duration for which the group can be requested (in minutes).")
recommended_duration: Optional[StrictInt] = Field(default=None, description="The recommended duration for which the group should be requested (in minutes). -1 represents an indefinite duration.")
extensions_duration_in_minutes: Optional[StrictInt] = Field(default=None, description="The duration for which access can be extended (in minutes). Set to 0 to disable extensions. When > 0, extensions are enabled for the specified duration.")
require_manager_approval: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not access requests to the group require manager approval.")
require_support_ticket: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not access requests to the group require an access ticket.")
require_mfa_to_approve: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not to require MFA for reviewers to approve requests for this group.")
require_mfa_to_request: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not to require MFA for requesting access to this group.")
auto_approval: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not to automatically approve requests to this group.")
request_template_id: Optional[UUID] = Field(default=None, description="The ID of the associated request template.")
configuration_template_id: Optional[UUID] = Field(default=None, description="The ID of the associated configuration template.")
group_binding_id: Optional[UUID] = Field(default=None, description="The ID of the associated group binding.")
is_requestable: Optional[StrictBool] = Field(default=None, description="A bool representing whether or not to allow access requests to this group.")
request_configurations: Optional[List[RequestConfiguration]] = Field(default=None, description="A list of request configurations for this group.")
request_configuration_list: Optional[List[RequestConfiguration]] = Field(default=None, description="A list of request configurations for this group. Deprecated in favor of `request_configurations`.")
metadata: Optional[StrictStr] = Field(default=None, description="JSON metadata about the remote group. Only set for items linked to remote systems. See [this guide](https://docs.opal.dev/reference/end-system-objects) for details.")
remote_info: Optional[GroupRemoteInfo] = None
custom_request_notification: Optional[Annotated[str, Field(strict=True, max_length=800)]] = Field(default=None, description="Custom request notification sent to the requester when the request is approved.")
risk_sensitivity: Optional[RiskSensitivityEnum] = Field(default=None, description="The risk sensitivity level for the group. When an override is set, this field will match that.")
risk_sensitivity_override: Optional[RiskSensitivityEnum] = None
last_successful_sync: Optional[SyncTask] = Field(default=None, description="Information about the last successful sync of this group.")
additional_properties: Dict[str, Any] = {}
__properties: ClassVar[List[str]] = ["group_id", "app_id", "name", "description", "admin_owner_id", "group_leader_user_ids", "remote_id", "remote_name", "group_type", "max_duration", "recommended_duration", "extensions_duration_in_minutes", "require_manager_approval", "require_support_ticket", "require_mfa_to_approve", "require_mfa_to_request", "auto_approval", "request_template_id", "configuration_template_id", "group_binding_id", "is_requestable", "request_configurations", "request_configuration_list", "metadata", "remote_info", "custom_request_notification", "risk_sensitivity", "risk_sensitivity_override", "last_successful_sync"]
model_config = ConfigDict(
populate_by_name=True,
validate_assignment=True,
protected_namespaces=(),
)
def to_str(self) -> str:
"""Returns the string representation of the model using alias"""
return pprint.pformat(self.model_dump(by_alias=True))
def to_json(self) -> str:
"""Returns the JSON representation of the model using alias"""
# TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
return json.dumps(self.to_dict())
@classmethod
def from_json(cls, json_str: str) -> Optional[Self]:
"""Create an instance of Group from a JSON string"""
return cls.from_dict(json.loads(json_str))
def to_dict(self) -> Dict[str, Any]:
"""Return the dictionary representation of the model using alias.
This has the following differences from calling pydantic's
`self.model_dump(by_alias=True)`:
* `None` is only added to the output dict for nullable fields that
were set at model initialization. Other fields with value `None`
are ignored.
* OpenAPI `readOnly` fields are excluded.
* OpenAPI `readOnly` fields are excluded.
* Fields in `self.additional_properties` are added to the output dict.
"""
excluded_fields: Set[str] = set([
"risk_sensitivity",
"last_successful_sync",
"additional_properties",
])
_dict = self.model_dump(
by_alias=True,
exclude=excluded_fields,
exclude_none=True,
)
# override the default output from pydantic by calling `to_dict()` of each item in request_configurations (list)
_items = []
if self.request_configurations:
for _item_request_configurations in self.request_configurations:
if _item_request_configurations:
_items.append(_item_request_configurations.to_dict())
_dict['request_configurations'] = _items
# override the default output from pydantic by calling `to_dict()` of each item in request_configuration_list (list)
_items = []
if self.request_configuration_list:
for _item_request_configuration_list in self.request_configuration_list:
if _item_request_configuration_list:
_items.append(_item_request_configuration_list.to_dict())
_dict['request_configuration_list'] = _items
# override the default output from pydantic by calling `to_dict()` of remote_info
if self.remote_info:
_dict['remote_info'] = self.remote_info.to_dict()
# override the default output from pydantic by calling `to_dict()` of last_successful_sync
if self.last_successful_sync:
_dict['last_successful_sync'] = self.last_successful_sync.to_dict()
# puts key-value pairs in additional_properties in the top level
if self.additional_properties is not None:
for _key, _value in self.additional_properties.items():
_dict[_key] = _value
return _dict
@classmethod
def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
"""Create an instance of Group from a dict"""
if obj is None:
return None
if not isinstance(obj, dict):
return cls.model_validate(obj)
_obj = cls.model_validate({
"group_id": obj.get("group_id"),
"app_id": obj.get("app_id"),
"name": obj.get("name"),
"description": obj.get("description"),
"admin_owner_id": obj.get("admin_owner_id"),
"group_leader_user_ids": obj.get("group_leader_user_ids"),
"remote_id": obj.get("remote_id"),
"remote_name": obj.get("remote_name"),
"group_type": obj.get("group_type"),
"max_duration": obj.get("max_duration"),
"recommended_duration": obj.get("recommended_duration"),
"extensions_duration_in_minutes": obj.get("extensions_duration_in_minutes"),
"require_manager_approval": obj.get("require_manager_approval"),
"require_support_ticket": obj.get("require_support_ticket"),
"require_mfa_to_approve": obj.get("require_mfa_to_approve"),
"require_mfa_to_request": obj.get("require_mfa_to_request"),
"auto_approval": obj.get("auto_approval"),
"request_template_id": obj.get("request_template_id"),
"configuration_template_id": obj.get("configuration_template_id"),
"group_binding_id": obj.get("group_binding_id"),
"is_requestable": obj.get("is_requestable"),
"request_configurations": [RequestConfiguration.from_dict(_item) for _item in obj["request_configurations"]] if obj.get("request_configurations") is not None else None,
"request_configuration_list": [RequestConfiguration.from_dict(_item) for _item in obj["request_configuration_list"]] if obj.get("request_configuration_list") is not None else None,
"metadata": obj.get("metadata"),
"remote_info": GroupRemoteInfo.from_dict(obj["remote_info"]) if obj.get("remote_info") is not None else None,
"custom_request_notification": obj.get("custom_request_notification"),
"risk_sensitivity": obj.get("risk_sensitivity"),
"risk_sensitivity_override": obj.get("risk_sensitivity_override"),
"last_successful_sync": SyncTask.from_dict(obj["last_successful_sync"]) if obj.get("last_successful_sync") is not None else None
})
# store additional fields in additional_properties
for _key in obj.keys():
if _key not in cls.__properties:
_obj.additional_properties[_key] = obj.get(_key)
return _obj