render_sdk 0.1.3__py3-none-any.whl → 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. render_sdk/__init__.py +41 -4
  2. render_sdk/client/__init__.py +25 -0
  3. render_sdk/client/client.py +5 -0
  4. render_sdk/client/sse.py +5 -1
  5. render_sdk/client/tests/test_client.py +6 -4
  6. render_sdk/client/tests/test_sse.py +1 -0
  7. render_sdk/client/workflows.py +10 -2
  8. render_sdk/experimental/__init__.py +31 -0
  9. render_sdk/experimental/experimental.py +71 -0
  10. render_sdk/experimental/object/__init__.py +30 -0
  11. render_sdk/experimental/object/api.py +260 -0
  12. render_sdk/experimental/object/client.py +475 -0
  13. render_sdk/experimental/object/types.py +87 -0
  14. render_sdk/public_api/api/audit_logs/list_organization_audit_logs.py +303 -0
  15. render_sdk/public_api/api/audit_logs/list_owner_audit_logs.py +303 -0
  16. render_sdk/public_api/api/blob_storage/delete_blob.py +215 -0
  17. render_sdk/public_api/api/blob_storage/get_blob.py +221 -0
  18. render_sdk/public_api/api/{workflows/list_workflow_versions.py → blob_storage/list_blobs.py} +52 -30
  19. render_sdk/public_api/api/blob_storage/put_blob.py +248 -0
  20. render_sdk/public_api/api/blueprints/validate_blueprint.py +212 -0
  21. render_sdk/public_api/api/key_value/resume_key_value.py +203 -0
  22. render_sdk/public_api/api/key_value/suspend_key_value.py +203 -0
  23. render_sdk/public_api/api/metrics/get_bandwidth_sources.py +251 -0
  24. render_sdk/public_api/api/postgres/create_postgres_user.py +229 -0
  25. render_sdk/public_api/api/postgres/delete_postgres_user.py +201 -0
  26. render_sdk/public_api/api/postgres/list_postgres_users.py +195 -0
  27. render_sdk/public_api/api/redis_deprecated/__init__.py +1 -0
  28. render_sdk/public_api/api/{redis → redis_deprecated}/create_redis.py +4 -4
  29. render_sdk/public_api/api/{redis → redis_deprecated}/delete_redis.py +4 -4
  30. render_sdk/public_api/api/{redis → redis_deprecated}/list_redis.py +4 -0
  31. render_sdk/public_api/api/{redis → redis_deprecated}/retrieve_redis.py +4 -4
  32. render_sdk/public_api/api/{redis → redis_deprecated}/retrieve_redis_connection_info.py +4 -0
  33. render_sdk/public_api/api/{redis → redis_deprecated}/update_redis.py +4 -4
  34. render_sdk/public_api/api/services/create_service.py +4 -4
  35. render_sdk/public_api/api/workflow_tasks_ea/__init__.py +1 -0
  36. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/cancel_task_run.py +12 -4
  37. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/create_task.py +12 -4
  38. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/get_task.py +12 -4
  39. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/get_task_run.py +12 -4
  40. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/list_task_runs.py +12 -0
  41. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/list_tasks.py +24 -12
  42. render_sdk/public_api/api/workflows_ea/__init__.py +1 -0
  43. render_sdk/public_api/api/workflows_ea/create_workflow.py +199 -0
  44. render_sdk/public_api/api/{workflows/deploy_workflow.py → workflows_ea/create_workflow_version.py} +31 -14
  45. render_sdk/public_api/api/{workflows → workflows_ea}/delete_workflow.py +12 -4
  46. render_sdk/public_api/api/{workflows → workflows_ea}/get_workflow.py +32 -14
  47. render_sdk/public_api/api/{workflows → workflows_ea}/get_workflow_version.py +12 -4
  48. render_sdk/public_api/api/workflows_ea/list_workflow_versions.py +275 -0
  49. render_sdk/public_api/api/{workflows → workflows_ea}/list_workflows.py +41 -14
  50. render_sdk/public_api/api/workflows_ea/update_workflow.py +212 -0
  51. render_sdk/public_api/api/workspaces/remove_workspace_member.py +206 -0
  52. render_sdk/public_api/api/workspaces/update_workspace_member.py +235 -0
  53. render_sdk/public_api/models/__init__.py +82 -4
  54. render_sdk/public_api/models/audit_log.py +113 -0
  55. render_sdk/public_api/models/audit_log_actor.py +80 -0
  56. render_sdk/public_api/models/audit_log_actor_type.py +10 -0
  57. render_sdk/public_api/models/audit_log_event.py +80 -0
  58. render_sdk/public_api/models/audit_log_metadata.py +49 -0
  59. render_sdk/public_api/models/audit_log_status.py +9 -0
  60. render_sdk/public_api/models/audit_log_with_cursor.py +73 -0
  61. render_sdk/public_api/models/background_worker_details.py +2 -2
  62. render_sdk/public_api/models/background_worker_details_patch.py +1 -1
  63. render_sdk/public_api/models/background_worker_details_post.py +1 -1
  64. render_sdk/public_api/models/blob_metadata.py +85 -0
  65. render_sdk/public_api/models/blob_with_cursor.py +73 -0
  66. render_sdk/public_api/models/cache.py +6 -4
  67. render_sdk/public_api/models/cache_profile.py +10 -0
  68. render_sdk/public_api/models/create_deploy_body.py +23 -0
  69. render_sdk/public_api/models/create_version.py +70 -0
  70. render_sdk/public_api/models/credential_create_input.py +59 -0
  71. render_sdk/public_api/models/cron_job_details.py +2 -2
  72. render_sdk/public_api/models/cron_job_details_patch.py +1 -1
  73. render_sdk/public_api/models/cron_job_details_post.py +1 -1
  74. render_sdk/public_api/models/deploy_mode.py +9 -0
  75. render_sdk/public_api/models/event.py +11 -27
  76. render_sdk/public_api/models/event_type.py +1 -1
  77. render_sdk/public_api/models/get_bandwidth_sources_response_200.py +75 -0
  78. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item.py +101 -0
  79. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_labels.py +78 -0
  80. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_labels_traffic_source.py +12 -0
  81. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_values_item.py +68 -0
  82. render_sdk/public_api/models/{server_unhealthy.py → get_bandwidth_sources_response_400.py} +12 -12
  83. render_sdk/public_api/models/get_blob_output.py +71 -0
  84. render_sdk/public_api/models/list_postgres_users_response_200_item.py +86 -0
  85. render_sdk/public_api/models/otel_provider_type.py +2 -0
  86. render_sdk/public_api/models/postgres.py +8 -0
  87. render_sdk/public_api/models/postgres_detail.py +26 -0
  88. render_sdk/public_api/models/postgres_parameter_overrides.py +44 -0
  89. render_sdk/public_api/models/postgres_patch_input.py +27 -0
  90. render_sdk/public_api/models/postgres_post_input.py +27 -0
  91. render_sdk/public_api/models/postgres_version.py +1 -0
  92. render_sdk/public_api/models/preview_input.py +2 -2
  93. render_sdk/public_api/models/private_service_details.py +2 -2
  94. render_sdk/public_api/models/private_service_details_patch.py +1 -1
  95. render_sdk/public_api/models/private_service_details_post.py +1 -1
  96. render_sdk/public_api/models/project_post_environment_input.py +26 -1
  97. render_sdk/public_api/models/put_blob_input.py +59 -0
  98. render_sdk/public_api/models/put_blob_output.py +79 -0
  99. render_sdk/public_api/models/read_replica.py +25 -1
  100. render_sdk/public_api/models/read_replica_input.py +25 -1
  101. render_sdk/public_api/models/run_task.py +35 -7
  102. render_sdk/public_api/models/service_event.py +12 -27
  103. render_sdk/public_api/models/service_event_type.py +0 -1
  104. render_sdk/public_api/models/service_post.py +9 -6
  105. render_sdk/public_api/models/task_attempt.py +88 -0
  106. render_sdk/public_api/models/task_attempt_details.py +108 -0
  107. render_sdk/public_api/models/task_data_type_1.py +44 -0
  108. render_sdk/public_api/models/task_run.py +23 -1
  109. render_sdk/public_api/models/task_run_details.py +50 -5
  110. render_sdk/public_api/models/task_run_status.py +1 -0
  111. render_sdk/public_api/models/task_with_cursor.py +73 -0
  112. render_sdk/public_api/models/team_member.py +5 -4
  113. render_sdk/public_api/models/team_member_role.py +12 -0
  114. render_sdk/public_api/models/update_workspace_member_body.py +61 -0
  115. render_sdk/public_api/models/validate_blueprint_request.py +84 -0
  116. render_sdk/public_api/models/validate_blueprint_response.py +105 -0
  117. render_sdk/public_api/models/validation_error.py +88 -0
  118. render_sdk/public_api/models/validation_plan_summary.py +107 -0
  119. render_sdk/public_api/models/web_service_details.py +2 -2
  120. render_sdk/public_api/models/web_service_details_patch.py +6 -5
  121. render_sdk/public_api/models/web_service_details_post.py +6 -5
  122. render_sdk/public_api/models/workflow.py +144 -0
  123. render_sdk/public_api/models/workflow_create.py +99 -0
  124. render_sdk/public_api/models/workflow_update.py +90 -0
  125. render_sdk/public_api/models/workflow_version.py +10 -14
  126. render_sdk/public_api/models/workflow_version_status.py +13 -0
  127. render_sdk/public_api/models/workflow_version_with_cursor.py +73 -0
  128. render_sdk/public_api/models/workflow_with_cursor.py +73 -0
  129. render_sdk/render.py +65 -0
  130. render_sdk/version.py +27 -0
  131. render_sdk/workflows/__init__.py +5 -1
  132. render_sdk/workflows/app.py +262 -0
  133. render_sdk/workflows/callback_api/models/task_options.py +18 -0
  134. render_sdk/workflows/cli.py +58 -0
  135. render_sdk/workflows/client.py +2 -7
  136. render_sdk/workflows/runner.py +12 -7
  137. render_sdk/workflows/task.py +11 -2
  138. render_sdk/workflows/tests/test_app.py +412 -0
  139. render_sdk/workflows/tests/test_cli.py +134 -0
  140. render_sdk/workflows/tests/test_end_to_end.py +69 -1
  141. render_sdk/workflows/tests/test_registration.py +56 -1
  142. {render_sdk-0.1.3.dist-info → render_sdk-0.2.0.dist-info}/METADATA +1 -1
  143. {render_sdk-0.1.3.dist-info → render_sdk-0.2.0.dist-info}/RECORD +149 -78
  144. render_sdk-0.2.0.dist-info/entry_points.txt +3 -0
  145. render_sdk/public_api/models/image_version.py +0 -79
  146. /render_sdk/public_api/api/{redis → audit_logs}/__init__.py +0 -0
  147. /render_sdk/public_api/api/{workflows → blob_storage}/__init__.py +0 -0
  148. /render_sdk/public_api/api/{workflows → workflow_tasks_ea}/stream_task_runs_events.py +0 -0
  149. {render_sdk-0.1.3.dist-info → render_sdk-0.2.0.dist-info}/WHEEL +0 -0
  150. {render_sdk-0.1.3.dist-info → render_sdk-0.2.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,108 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar, Union, cast
4
+
5
+ from attrs import define as _attrs_define
6
+ from attrs import field as _attrs_field
7
+ from dateutil.parser import isoparse
8
+
9
+ from ..models.task_run_status import TaskRunStatus
10
+ from ..types import UNSET, Unset
11
+
12
+ T = TypeVar("T", bound="TaskAttemptDetails")
13
+
14
+
15
+ @_attrs_define
16
+ class TaskAttemptDetails:
17
+ """
18
+ Attributes:
19
+ status (TaskRunStatus):
20
+ started_at (datetime.datetime):
21
+ completed_at (Union[Unset, datetime.datetime]):
22
+ error (Union[Unset, str]): Error message if the task attempt failed.
23
+ results (Union[Unset, list[Any]]):
24
+ """
25
+
26
+ status: TaskRunStatus
27
+ started_at: datetime.datetime
28
+ completed_at: Union[Unset, datetime.datetime] = UNSET
29
+ error: Union[Unset, str] = UNSET
30
+ results: Union[Unset, list[Any]] = UNSET
31
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
32
+
33
+ def to_dict(self) -> dict[str, Any]:
34
+ status = self.status.value
35
+
36
+ started_at = self.started_at.isoformat()
37
+
38
+ completed_at: Union[Unset, str] = UNSET
39
+ if not isinstance(self.completed_at, Unset):
40
+ completed_at = self.completed_at.isoformat()
41
+
42
+ error = self.error
43
+
44
+ results: Union[Unset, list[Any]] = UNSET
45
+ if not isinstance(self.results, Unset):
46
+ results = self.results
47
+
48
+ field_dict: dict[str, Any] = {}
49
+ field_dict.update(self.additional_properties)
50
+ field_dict.update(
51
+ {
52
+ "status": status,
53
+ "startedAt": started_at,
54
+ }
55
+ )
56
+ if completed_at is not UNSET:
57
+ field_dict["completedAt"] = completed_at
58
+ if error is not UNSET:
59
+ field_dict["error"] = error
60
+ if results is not UNSET:
61
+ field_dict["results"] = results
62
+
63
+ return field_dict
64
+
65
+ @classmethod
66
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
67
+ d = dict(src_dict)
68
+ status = TaskRunStatus(d.pop("status"))
69
+
70
+ started_at = isoparse(d.pop("startedAt"))
71
+
72
+ _completed_at = d.pop("completedAt", UNSET)
73
+ completed_at: Union[Unset, datetime.datetime]
74
+ if isinstance(_completed_at, Unset):
75
+ completed_at = UNSET
76
+ else:
77
+ completed_at = isoparse(_completed_at)
78
+
79
+ error = d.pop("error", UNSET)
80
+
81
+ results = cast(list[Any], d.pop("results", UNSET))
82
+
83
+ task_attempt_details = cls(
84
+ status=status,
85
+ started_at=started_at,
86
+ completed_at=completed_at,
87
+ error=error,
88
+ results=results,
89
+ )
90
+
91
+ task_attempt_details.additional_properties = d
92
+ return task_attempt_details
93
+
94
+ @property
95
+ def additional_keys(self) -> list[str]:
96
+ return list(self.additional_properties.keys())
97
+
98
+ def __getitem__(self, key: str) -> Any:
99
+ return self.additional_properties[key]
100
+
101
+ def __setitem__(self, key: str, value: Any) -> None:
102
+ self.additional_properties[key] = value
103
+
104
+ def __delitem__(self, key: str) -> None:
105
+ del self.additional_properties[key]
106
+
107
+ def __contains__(self, key: str) -> bool:
108
+ return key in self.additional_properties
@@ -0,0 +1,44 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ T = TypeVar("T", bound="TaskDataType1")
8
+
9
+
10
+ @_attrs_define
11
+ class TaskDataType1:
12
+ """Named parameters passed to the task function as keyword arguments"""
13
+
14
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
15
+
16
+ def to_dict(self) -> dict[str, Any]:
17
+ field_dict: dict[str, Any] = {}
18
+ field_dict.update(self.additional_properties)
19
+
20
+ return field_dict
21
+
22
+ @classmethod
23
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
24
+ d = dict(src_dict)
25
+ task_data_type_1 = cls()
26
+
27
+ task_data_type_1.additional_properties = d
28
+ return task_data_type_1
29
+
30
+ @property
31
+ def additional_keys(self) -> list[str]:
32
+ return list(self.additional_properties.keys())
33
+
34
+ def __getitem__(self, key: str) -> Any:
35
+ return self.additional_properties[key]
36
+
37
+ def __setitem__(self, key: str, value: Any) -> None:
38
+ self.additional_properties[key] = value
39
+
40
+ def __delitem__(self, key: str) -> None:
41
+ del self.additional_properties[key]
42
+
43
+ def __contains__(self, key: str) -> bool:
44
+ return key in self.additional_properties
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  from collections.abc import Mapping
3
- from typing import Any, TypeVar, Union
3
+ from typing import TYPE_CHECKING, Any, TypeVar, Union
4
4
 
5
5
  from attrs import define as _attrs_define
6
6
  from attrs import field as _attrs_field
@@ -9,6 +9,10 @@ from dateutil.parser import isoparse
9
9
  from ..models.task_run_status import TaskRunStatus
10
10
  from ..types import UNSET, Unset
11
11
 
12
+ if TYPE_CHECKING:
13
+ from ..models.task_attempt import TaskAttempt
14
+
15
+
12
16
  T = TypeVar("T", bound="TaskRun")
13
17
 
14
18
 
@@ -22,6 +26,7 @@ class TaskRun:
22
26
  parent_task_run_id (str):
23
27
  root_task_run_id (str):
24
28
  retries (int):
29
+ attempts (list['TaskAttempt']):
25
30
  started_at (Union[Unset, datetime.datetime]):
26
31
  completed_at (Union[Unset, datetime.datetime]):
27
32
  """
@@ -32,6 +37,7 @@ class TaskRun:
32
37
  parent_task_run_id: str
33
38
  root_task_run_id: str
34
39
  retries: int
40
+ attempts: list["TaskAttempt"]
35
41
  started_at: Union[Unset, datetime.datetime] = UNSET
36
42
  completed_at: Union[Unset, datetime.datetime] = UNSET
37
43
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
@@ -49,6 +55,11 @@ class TaskRun:
49
55
 
50
56
  retries = self.retries
51
57
 
58
+ attempts = []
59
+ for attempts_item_data in self.attempts:
60
+ attempts_item = attempts_item_data.to_dict()
61
+ attempts.append(attempts_item)
62
+
52
63
  started_at: Union[Unset, str] = UNSET
53
64
  if not isinstance(self.started_at, Unset):
54
65
  started_at = self.started_at.isoformat()
@@ -67,6 +78,7 @@ class TaskRun:
67
78
  "parentTaskRunId": parent_task_run_id,
68
79
  "rootTaskRunId": root_task_run_id,
69
80
  "retries": retries,
81
+ "attempts": attempts,
70
82
  }
71
83
  )
72
84
  if started_at is not UNSET:
@@ -78,6 +90,8 @@ class TaskRun:
78
90
 
79
91
  @classmethod
80
92
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
93
+ from ..models.task_attempt import TaskAttempt
94
+
81
95
  d = dict(src_dict)
82
96
  id = d.pop("id")
83
97
 
@@ -91,6 +105,13 @@ class TaskRun:
91
105
 
92
106
  retries = d.pop("retries")
93
107
 
108
+ attempts = []
109
+ _attempts = d.pop("attempts")
110
+ for attempts_item_data in _attempts:
111
+ attempts_item = TaskAttempt.from_dict(attempts_item_data)
112
+
113
+ attempts.append(attempts_item)
114
+
94
115
  _started_at = d.pop("startedAt", UNSET)
95
116
  started_at: Union[Unset, datetime.datetime]
96
117
  if isinstance(_started_at, Unset):
@@ -112,6 +133,7 @@ class TaskRun:
112
133
  parent_task_run_id=parent_task_run_id,
113
134
  root_task_run_id=root_task_run_id,
114
135
  retries=retries,
136
+ attempts=attempts,
115
137
  started_at=started_at,
116
138
  completed_at=completed_at,
117
139
  )
@@ -1,6 +1,6 @@
1
1
  import datetime
2
2
  from collections.abc import Mapping
3
- from typing import Any, TypeVar, Union, cast
3
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
4
4
 
5
5
  from attrs import define as _attrs_define
6
6
  from attrs import field as _attrs_field
@@ -9,6 +9,11 @@ from dateutil.parser import isoparse
9
9
  from ..models.task_run_status import TaskRunStatus
10
10
  from ..types import UNSET, Unset
11
11
 
12
+ if TYPE_CHECKING:
13
+ from ..models.task_attempt_details import TaskAttemptDetails
14
+ from ..models.task_data_type_1 import TaskDataType1
15
+
16
+
12
17
  T = TypeVar("T", bound="TaskRunDetails")
13
18
 
14
19
 
@@ -20,10 +25,12 @@ class TaskRunDetails:
20
25
  task_id (str):
21
26
  status (TaskRunStatus):
22
27
  results (list[Any]):
23
- input_ (list[Any]):
28
+ input_ (Union['TaskDataType1', list[Any]]): Input data for a task. Can be either an array (for positional
29
+ arguments) or an object (for named parameters).
24
30
  parent_task_run_id (str):
25
31
  root_task_run_id (str):
26
32
  retries (int):
33
+ attempts (list['TaskAttemptDetails']):
27
34
  error (Union[Unset, str]): Error message if the task run failed.
28
35
  started_at (Union[Unset, datetime.datetime]):
29
36
  completed_at (Union[Unset, datetime.datetime]):
@@ -33,10 +40,11 @@ class TaskRunDetails:
33
40
  task_id: str
34
41
  status: TaskRunStatus
35
42
  results: list[Any]
36
- input_: list[Any]
43
+ input_: Union["TaskDataType1", list[Any]]
37
44
  parent_task_run_id: str
38
45
  root_task_run_id: str
39
46
  retries: int
47
+ attempts: list["TaskAttemptDetails"]
40
48
  error: Union[Unset, str] = UNSET
41
49
  started_at: Union[Unset, datetime.datetime] = UNSET
42
50
  completed_at: Union[Unset, datetime.datetime] = UNSET
@@ -51,7 +59,12 @@ class TaskRunDetails:
51
59
 
52
60
  results = self.results
53
61
 
54
- input_ = self.input_
62
+ input_: Union[dict[str, Any], list[Any]]
63
+ if isinstance(self.input_, list):
64
+ input_ = self.input_
65
+
66
+ else:
67
+ input_ = self.input_.to_dict()
55
68
 
56
69
  parent_task_run_id = self.parent_task_run_id
57
70
 
@@ -59,6 +72,11 @@ class TaskRunDetails:
59
72
 
60
73
  retries = self.retries
61
74
 
75
+ attempts = []
76
+ for attempts_item_data in self.attempts:
77
+ attempts_item = attempts_item_data.to_dict()
78
+ attempts.append(attempts_item)
79
+
62
80
  error = self.error
63
81
 
64
82
  started_at: Union[Unset, str] = UNSET
@@ -81,6 +99,7 @@ class TaskRunDetails:
81
99
  "parentTaskRunId": parent_task_run_id,
82
100
  "rootTaskRunId": root_task_run_id,
83
101
  "retries": retries,
102
+ "attempts": attempts,
84
103
  }
85
104
  )
86
105
  if error is not UNSET:
@@ -94,6 +113,9 @@ class TaskRunDetails:
94
113
 
95
114
  @classmethod
96
115
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
116
+ from ..models.task_attempt_details import TaskAttemptDetails
117
+ from ..models.task_data_type_1 import TaskDataType1
118
+
97
119
  d = dict(src_dict)
98
120
  id = d.pop("id")
99
121
 
@@ -103,7 +125,22 @@ class TaskRunDetails:
103
125
 
104
126
  results = cast(list[Any], d.pop("results"))
105
127
 
106
- input_ = cast(list[Any], d.pop("input"))
128
+ def _parse_input_(data: object) -> Union["TaskDataType1", list[Any]]:
129
+ try:
130
+ if not isinstance(data, list):
131
+ raise TypeError()
132
+ componentsschemas_task_data_type_0 = cast(list[Any], data)
133
+
134
+ return componentsschemas_task_data_type_0
135
+ except: # noqa: E722
136
+ pass
137
+ if not isinstance(data, dict):
138
+ raise TypeError()
139
+ componentsschemas_task_data_type_1 = TaskDataType1.from_dict(data)
140
+
141
+ return componentsschemas_task_data_type_1
142
+
143
+ input_ = _parse_input_(d.pop("input"))
107
144
 
108
145
  parent_task_run_id = d.pop("parentTaskRunId")
109
146
 
@@ -111,6 +148,13 @@ class TaskRunDetails:
111
148
 
112
149
  retries = d.pop("retries")
113
150
 
151
+ attempts = []
152
+ _attempts = d.pop("attempts")
153
+ for attempts_item_data in _attempts:
154
+ attempts_item = TaskAttemptDetails.from_dict(attempts_item_data)
155
+
156
+ attempts.append(attempts_item)
157
+
114
158
  error = d.pop("error", UNSET)
115
159
 
116
160
  _started_at = d.pop("startedAt", UNSET)
@@ -136,6 +180,7 @@ class TaskRunDetails:
136
180
  parent_task_run_id=parent_task_run_id,
137
181
  root_task_run_id=root_task_run_id,
138
182
  retries=retries,
183
+ attempts=attempts,
139
184
  error=error,
140
185
  started_at=started_at,
141
186
  completed_at=completed_at,
@@ -2,6 +2,7 @@ from enum import Enum
2
2
 
3
3
 
4
4
  class TaskRunStatus(str, Enum):
5
+ CANCELED = "canceled"
5
6
  COMPLETED = "completed"
6
7
  FAILED = "failed"
7
8
  PENDING = "pending"
@@ -0,0 +1,73 @@
1
+ from collections.abc import Mapping
2
+ from typing import TYPE_CHECKING, Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ if TYPE_CHECKING:
8
+ from ..models.task import Task
9
+
10
+
11
+ T = TypeVar("T", bound="TaskWithCursor")
12
+
13
+
14
+ @_attrs_define
15
+ class TaskWithCursor:
16
+ """
17
+ Attributes:
18
+ task (Task):
19
+ cursor (str):
20
+ """
21
+
22
+ task: "Task"
23
+ cursor: str
24
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ task = self.task.to_dict()
28
+
29
+ cursor = self.cursor
30
+
31
+ field_dict: dict[str, Any] = {}
32
+ field_dict.update(self.additional_properties)
33
+ field_dict.update(
34
+ {
35
+ "task": task,
36
+ "cursor": cursor,
37
+ }
38
+ )
39
+
40
+ return field_dict
41
+
42
+ @classmethod
43
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
44
+ from ..models.task import Task
45
+
46
+ d = dict(src_dict)
47
+ task = Task.from_dict(d.pop("task"))
48
+
49
+ cursor = d.pop("cursor")
50
+
51
+ task_with_cursor = cls(
52
+ task=task,
53
+ cursor=cursor,
54
+ )
55
+
56
+ task_with_cursor.additional_properties = d
57
+ return task_with_cursor
58
+
59
+ @property
60
+ def additional_keys(self) -> list[str]:
61
+ return list(self.additional_properties.keys())
62
+
63
+ def __getitem__(self, key: str) -> Any:
64
+ return self.additional_properties[key]
65
+
66
+ def __setitem__(self, key: str, value: Any) -> None:
67
+ self.additional_properties[key] = value
68
+
69
+ def __delitem__(self, key: str) -> None:
70
+ del self.additional_properties[key]
71
+
72
+ def __contains__(self, key: str) -> bool:
73
+ return key in self.additional_properties
@@ -4,6 +4,7 @@ from typing import Any, TypeVar
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
+ from ..models.team_member_role import TeamMemberRole
7
8
  from ..models.team_member_status import TeamMemberStatus
8
9
 
9
10
  T = TypeVar("T", bound="TeamMember")
@@ -17,7 +18,7 @@ class TeamMember:
17
18
  name (str):
18
19
  email (str):
19
20
  status (TeamMemberStatus):
20
- role (str):
21
+ role (TeamMemberRole): The member's workspace role. Values are always returned in uppercase. Example: DEVELOPER.
21
22
  mfa_enabled (bool):
22
23
  """
23
24
 
@@ -25,7 +26,7 @@ class TeamMember:
25
26
  name: str
26
27
  email: str
27
28
  status: TeamMemberStatus
28
- role: str
29
+ role: TeamMemberRole
29
30
  mfa_enabled: bool
30
31
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
31
32
 
@@ -38,7 +39,7 @@ class TeamMember:
38
39
 
39
40
  status = self.status.value
40
41
 
41
- role = self.role
42
+ role = self.role.value
42
43
 
43
44
  mfa_enabled = self.mfa_enabled
44
45
 
@@ -68,7 +69,7 @@ class TeamMember:
68
69
 
69
70
  status = TeamMemberStatus(d.pop("status"))
70
71
 
71
- role = d.pop("role")
72
+ role = TeamMemberRole(d.pop("role"))
72
73
 
73
74
  mfa_enabled = d.pop("mfaEnabled")
74
75
 
@@ -0,0 +1,12 @@
1
+ from enum import Enum
2
+
3
+
4
+ class TeamMemberRole(str, Enum):
5
+ ADMIN = "ADMIN"
6
+ DEVELOPER = "DEVELOPER"
7
+ WORKSPACE_BILLING = "WORKSPACE_BILLING"
8
+ WORKSPACE_CONTRIBUTOR = "WORKSPACE_CONTRIBUTOR"
9
+ WORKSPACE_VIEWER = "WORKSPACE_VIEWER"
10
+
11
+ def __str__(self) -> str:
12
+ return str(self.value)
@@ -0,0 +1,61 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ from ..models.team_member_role import TeamMemberRole
8
+
9
+ T = TypeVar("T", bound="UpdateWorkspaceMemberBody")
10
+
11
+
12
+ @_attrs_define
13
+ class UpdateWorkspaceMemberBody:
14
+ """
15
+ Attributes:
16
+ role (TeamMemberRole): The member's workspace role. Values are always returned in uppercase. Example: DEVELOPER.
17
+ """
18
+
19
+ role: TeamMemberRole
20
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
21
+
22
+ def to_dict(self) -> dict[str, Any]:
23
+ role = self.role.value
24
+
25
+ field_dict: dict[str, Any] = {}
26
+ field_dict.update(self.additional_properties)
27
+ field_dict.update(
28
+ {
29
+ "role": role,
30
+ }
31
+ )
32
+
33
+ return field_dict
34
+
35
+ @classmethod
36
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
37
+ d = dict(src_dict)
38
+ role = TeamMemberRole(d.pop("role"))
39
+
40
+ update_workspace_member_body = cls(
41
+ role=role,
42
+ )
43
+
44
+ update_workspace_member_body.additional_properties = d
45
+ return update_workspace_member_body
46
+
47
+ @property
48
+ def additional_keys(self) -> list[str]:
49
+ return list(self.additional_properties.keys())
50
+
51
+ def __getitem__(self, key: str) -> Any:
52
+ return self.additional_properties[key]
53
+
54
+ def __setitem__(self, key: str, value: Any) -> None:
55
+ self.additional_properties[key] = value
56
+
57
+ def __delitem__(self, key: str) -> None:
58
+ del self.additional_properties[key]
59
+
60
+ def __contains__(self, key: str) -> bool:
61
+ return key in self.additional_properties
@@ -0,0 +1,84 @@
1
+ from collections.abc import Mapping
2
+ from io import BytesIO
3
+ from typing import Any, TypeVar
4
+
5
+ from attrs import define as _attrs_define
6
+ from attrs import field as _attrs_field
7
+
8
+ from .. import types
9
+ from ..types import File
10
+
11
+ T = TypeVar("T", bound="ValidateBlueprintRequest")
12
+
13
+
14
+ @_attrs_define
15
+ class ValidateBlueprintRequest:
16
+ """
17
+ Attributes:
18
+ owner_id (str): The ID of the workspace to validate against. Obtain your workspace ID from its Settings page in
19
+ the Render Dashboard. Example: tea-cjnxpkdhshc73d12t9i0.
20
+ file (File): The render.yaml file to validate, as a binary file.
21
+ """
22
+
23
+ owner_id: str
24
+ file: File
25
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
26
+
27
+ def to_dict(self) -> dict[str, Any]:
28
+ owner_id = self.owner_id
29
+
30
+ file = self.file.to_tuple()
31
+
32
+ field_dict: dict[str, Any] = {}
33
+ field_dict.update(self.additional_properties)
34
+ field_dict.update(
35
+ {
36
+ "ownerId": owner_id,
37
+ "file": file,
38
+ }
39
+ )
40
+
41
+ return field_dict
42
+
43
+ def to_multipart(self) -> types.RequestFiles:
44
+ files: types.RequestFiles = []
45
+
46
+ files.append(("ownerId", (None, str(self.owner_id).encode(), "text/plain")))
47
+
48
+ files.append(("file", self.file.to_tuple()))
49
+
50
+ for prop_name, prop in self.additional_properties.items():
51
+ files.append((prop_name, (None, str(prop).encode(), "text/plain")))
52
+
53
+ return files
54
+
55
+ @classmethod
56
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
57
+ d = dict(src_dict)
58
+ owner_id = d.pop("ownerId")
59
+
60
+ file = File(payload=BytesIO(d.pop("file")))
61
+
62
+ validate_blueprint_request = cls(
63
+ owner_id=owner_id,
64
+ file=file,
65
+ )
66
+
67
+ validate_blueprint_request.additional_properties = d
68
+ return validate_blueprint_request
69
+
70
+ @property
71
+ def additional_keys(self) -> list[str]:
72
+ return list(self.additional_properties.keys())
73
+
74
+ def __getitem__(self, key: str) -> Any:
75
+ return self.additional_properties[key]
76
+
77
+ def __setitem__(self, key: str, value: Any) -> None:
78
+ self.additional_properties[key] = value
79
+
80
+ def __delitem__(self, key: str) -> None:
81
+ del self.additional_properties[key]
82
+
83
+ def __contains__(self, key: str) -> bool:
84
+ return key in self.additional_properties