render_sdk 0.1.2__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 (156) 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/types.py +2 -1
  8. render_sdk/client/workflows.py +13 -3
  9. render_sdk/experimental/__init__.py +31 -0
  10. render_sdk/experimental/experimental.py +71 -0
  11. render_sdk/experimental/object/__init__.py +30 -0
  12. render_sdk/experimental/object/api.py +260 -0
  13. render_sdk/experimental/object/client.py +475 -0
  14. render_sdk/experimental/object/types.py +87 -0
  15. render_sdk/public_api/api/audit_logs/list_organization_audit_logs.py +303 -0
  16. render_sdk/public_api/api/audit_logs/list_owner_audit_logs.py +303 -0
  17. render_sdk/public_api/api/blob_storage/delete_blob.py +215 -0
  18. render_sdk/public_api/api/blob_storage/get_blob.py +221 -0
  19. render_sdk/public_api/api/{workflows/list_workflow_versions.py → blob_storage/list_blobs.py} +52 -30
  20. render_sdk/public_api/api/blob_storage/put_blob.py +248 -0
  21. render_sdk/public_api/api/blueprints/validate_blueprint.py +212 -0
  22. render_sdk/public_api/api/key_value/resume_key_value.py +203 -0
  23. render_sdk/public_api/api/key_value/suspend_key_value.py +203 -0
  24. render_sdk/public_api/api/metrics/get_bandwidth_sources.py +251 -0
  25. render_sdk/public_api/api/postgres/create_postgres_user.py +229 -0
  26. render_sdk/public_api/api/postgres/delete_postgres_user.py +201 -0
  27. render_sdk/public_api/api/postgres/list_postgres_users.py +195 -0
  28. render_sdk/public_api/api/redis_deprecated/__init__.py +1 -0
  29. render_sdk/public_api/api/{redis → redis_deprecated}/create_redis.py +4 -4
  30. render_sdk/public_api/api/{redis → redis_deprecated}/delete_redis.py +4 -4
  31. render_sdk/public_api/api/{redis → redis_deprecated}/list_redis.py +4 -0
  32. render_sdk/public_api/api/{redis → redis_deprecated}/retrieve_redis.py +4 -4
  33. render_sdk/public_api/api/{redis → redis_deprecated}/retrieve_redis_connection_info.py +4 -0
  34. render_sdk/public_api/api/{redis → redis_deprecated}/update_redis.py +4 -4
  35. render_sdk/public_api/api/services/create_service.py +4 -4
  36. render_sdk/public_api/api/workflow_tasks_ea/__init__.py +1 -0
  37. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/cancel_task_run.py +12 -4
  38. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/create_task.py +12 -4
  39. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/get_task.py +12 -4
  40. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/get_task_run.py +12 -4
  41. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/list_task_runs.py +12 -0
  42. render_sdk/public_api/api/{workflows → workflow_tasks_ea}/list_tasks.py +24 -12
  43. render_sdk/public_api/api/workflows_ea/__init__.py +1 -0
  44. render_sdk/public_api/api/workflows_ea/create_workflow.py +199 -0
  45. render_sdk/public_api/api/{workflows/deploy_workflow.py → workflows_ea/create_workflow_version.py} +31 -14
  46. render_sdk/public_api/api/{workflows → workflows_ea}/delete_workflow.py +12 -4
  47. render_sdk/public_api/api/{workflows → workflows_ea}/get_workflow.py +32 -14
  48. render_sdk/public_api/api/{workflows → workflows_ea}/get_workflow_version.py +12 -4
  49. render_sdk/public_api/api/workflows_ea/list_workflow_versions.py +275 -0
  50. render_sdk/public_api/api/{workflows → workflows_ea}/list_workflows.py +41 -14
  51. render_sdk/public_api/api/workflows_ea/update_workflow.py +212 -0
  52. render_sdk/public_api/api/workspaces/remove_workspace_member.py +206 -0
  53. render_sdk/public_api/api/workspaces/update_workspace_member.py +235 -0
  54. render_sdk/public_api/models/__init__.py +82 -4
  55. render_sdk/public_api/models/audit_log.py +113 -0
  56. render_sdk/public_api/models/audit_log_actor.py +80 -0
  57. render_sdk/public_api/models/audit_log_actor_type.py +10 -0
  58. render_sdk/public_api/models/audit_log_event.py +80 -0
  59. render_sdk/public_api/models/audit_log_metadata.py +49 -0
  60. render_sdk/public_api/models/audit_log_status.py +9 -0
  61. render_sdk/public_api/models/audit_log_with_cursor.py +73 -0
  62. render_sdk/public_api/models/background_worker_details.py +2 -2
  63. render_sdk/public_api/models/background_worker_details_patch.py +1 -1
  64. render_sdk/public_api/models/background_worker_details_post.py +1 -1
  65. render_sdk/public_api/models/blob_metadata.py +85 -0
  66. render_sdk/public_api/models/blob_with_cursor.py +73 -0
  67. render_sdk/public_api/models/cache.py +6 -4
  68. render_sdk/public_api/models/cache_profile.py +10 -0
  69. render_sdk/public_api/models/create_deploy_body.py +23 -0
  70. render_sdk/public_api/models/create_version.py +70 -0
  71. render_sdk/public_api/models/credential_create_input.py +59 -0
  72. render_sdk/public_api/models/cron_job_details.py +2 -2
  73. render_sdk/public_api/models/cron_job_details_patch.py +1 -1
  74. render_sdk/public_api/models/cron_job_details_post.py +1 -1
  75. render_sdk/public_api/models/deploy_mode.py +9 -0
  76. render_sdk/public_api/models/event.py +11 -27
  77. render_sdk/public_api/models/event_type.py +1 -1
  78. render_sdk/public_api/models/get_bandwidth_sources_response_200.py +75 -0
  79. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item.py +101 -0
  80. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_labels.py +78 -0
  81. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_labels_traffic_source.py +12 -0
  82. render_sdk/public_api/models/get_bandwidth_sources_response_200_data_item_values_item.py +68 -0
  83. render_sdk/public_api/models/{server_unhealthy.py → get_bandwidth_sources_response_400.py} +12 -12
  84. render_sdk/public_api/models/get_blob_output.py +71 -0
  85. render_sdk/public_api/models/list_postgres_users_response_200_item.py +86 -0
  86. render_sdk/public_api/models/otel_provider_type.py +2 -0
  87. render_sdk/public_api/models/postgres.py +8 -0
  88. render_sdk/public_api/models/postgres_detail.py +26 -0
  89. render_sdk/public_api/models/postgres_parameter_overrides.py +44 -0
  90. render_sdk/public_api/models/postgres_patch_input.py +27 -0
  91. render_sdk/public_api/models/postgres_post_input.py +27 -0
  92. render_sdk/public_api/models/postgres_version.py +1 -0
  93. render_sdk/public_api/models/preview_input.py +2 -2
  94. render_sdk/public_api/models/private_service_details.py +2 -2
  95. render_sdk/public_api/models/private_service_details_patch.py +1 -1
  96. render_sdk/public_api/models/private_service_details_post.py +1 -1
  97. render_sdk/public_api/models/project_post_environment_input.py +26 -1
  98. render_sdk/public_api/models/put_blob_input.py +59 -0
  99. render_sdk/public_api/models/put_blob_output.py +79 -0
  100. render_sdk/public_api/models/read_replica.py +25 -1
  101. render_sdk/public_api/models/read_replica_input.py +25 -1
  102. render_sdk/public_api/models/run_task.py +35 -7
  103. render_sdk/public_api/models/service_event.py +12 -27
  104. render_sdk/public_api/models/service_event_type.py +0 -1
  105. render_sdk/public_api/models/service_post.py +9 -6
  106. render_sdk/public_api/models/task_attempt.py +88 -0
  107. render_sdk/public_api/models/task_attempt_details.py +108 -0
  108. render_sdk/public_api/models/task_data_type_1.py +44 -0
  109. render_sdk/public_api/models/task_run.py +23 -1
  110. render_sdk/public_api/models/task_run_details.py +50 -5
  111. render_sdk/public_api/models/task_run_status.py +1 -0
  112. render_sdk/public_api/models/task_with_cursor.py +73 -0
  113. render_sdk/public_api/models/team_member.py +5 -4
  114. render_sdk/public_api/models/team_member_role.py +12 -0
  115. render_sdk/public_api/models/update_workspace_member_body.py +61 -0
  116. render_sdk/public_api/models/validate_blueprint_request.py +84 -0
  117. render_sdk/public_api/models/validate_blueprint_response.py +105 -0
  118. render_sdk/public_api/models/validation_error.py +88 -0
  119. render_sdk/public_api/models/validation_plan_summary.py +107 -0
  120. render_sdk/public_api/models/web_service_details.py +2 -2
  121. render_sdk/public_api/models/web_service_details_patch.py +6 -5
  122. render_sdk/public_api/models/web_service_details_post.py +6 -5
  123. render_sdk/public_api/models/workflow.py +144 -0
  124. render_sdk/public_api/models/workflow_create.py +99 -0
  125. render_sdk/public_api/models/workflow_update.py +90 -0
  126. render_sdk/public_api/models/workflow_version.py +10 -14
  127. render_sdk/public_api/models/workflow_version_status.py +13 -0
  128. render_sdk/public_api/models/workflow_version_with_cursor.py +73 -0
  129. render_sdk/public_api/models/workflow_with_cursor.py +73 -0
  130. render_sdk/render.py +65 -0
  131. render_sdk/version.py +27 -0
  132. render_sdk/workflows/__init__.py +5 -1
  133. render_sdk/workflows/app.py +262 -0
  134. render_sdk/workflows/callback_api/models/__init__.py +2 -0
  135. render_sdk/workflows/callback_api/models/task.py +21 -0
  136. render_sdk/workflows/callback_api/models/task_options.py +18 -0
  137. render_sdk/workflows/callback_api/models/task_parameter.py +88 -0
  138. render_sdk/workflows/callback_api/py.typed +1 -1
  139. render_sdk/workflows/cli.py +58 -0
  140. render_sdk/workflows/client.py +8 -9
  141. render_sdk/workflows/executor.py +19 -7
  142. render_sdk/workflows/runner.py +43 -10
  143. render_sdk/workflows/task.py +84 -5
  144. render_sdk/workflows/tests/test_app.py +412 -0
  145. render_sdk/workflows/tests/test_cli.py +134 -0
  146. render_sdk/workflows/tests/test_end_to_end.py +71 -1
  147. render_sdk/workflows/tests/test_registration.py +58 -1
  148. {render_sdk-0.1.2.dist-info → render_sdk-0.2.0.dist-info}/METADATA +4 -3
  149. {render_sdk-0.1.2.dist-info → render_sdk-0.2.0.dist-info}/RECORD +155 -83
  150. {render_sdk-0.1.2.dist-info → render_sdk-0.2.0.dist-info}/WHEEL +1 -1
  151. render_sdk-0.2.0.dist-info/entry_points.txt +3 -0
  152. render_sdk/public_api/models/image_version.py +0 -79
  153. /render_sdk/public_api/api/{redis → audit_logs}/__init__.py +0 -0
  154. /render_sdk/public_api/api/{workflows → blob_storage}/__init__.py +0 -0
  155. /render_sdk/public_api/api/{workflows → workflow_tasks_ea}/stream_task_runs_events.py +0 -0
  156. {render_sdk-0.1.2.dist-info → render_sdk-0.2.0.dist-info/licenses}/LICENSE +0 -0
@@ -0,0 +1,59 @@
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="PutBlobInput")
8
+
9
+
10
+ @_attrs_define
11
+ class PutBlobInput:
12
+ """
13
+ Attributes:
14
+ size_bytes (int): The size of the blob in bytes. Example: 1048576.
15
+ """
16
+
17
+ size_bytes: int
18
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
19
+
20
+ def to_dict(self) -> dict[str, Any]:
21
+ size_bytes = self.size_bytes
22
+
23
+ field_dict: dict[str, Any] = {}
24
+ field_dict.update(self.additional_properties)
25
+ field_dict.update(
26
+ {
27
+ "sizeBytes": size_bytes,
28
+ }
29
+ )
30
+
31
+ return field_dict
32
+
33
+ @classmethod
34
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
35
+ d = dict(src_dict)
36
+ size_bytes = d.pop("sizeBytes")
37
+
38
+ put_blob_input = cls(
39
+ size_bytes=size_bytes,
40
+ )
41
+
42
+ put_blob_input.additional_properties = d
43
+ return put_blob_input
44
+
45
+ @property
46
+ def additional_keys(self) -> list[str]:
47
+ return list(self.additional_properties.keys())
48
+
49
+ def __getitem__(self, key: str) -> Any:
50
+ return self.additional_properties[key]
51
+
52
+ def __setitem__(self, key: str, value: Any) -> None:
53
+ self.additional_properties[key] = value
54
+
55
+ def __delitem__(self, key: str) -> None:
56
+ del self.additional_properties[key]
57
+
58
+ def __contains__(self, key: str) -> bool:
59
+ return key in self.additional_properties
@@ -0,0 +1,79 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar
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
+ T = TypeVar("T", bound="PutBlobOutput")
10
+
11
+
12
+ @_attrs_define
13
+ class PutBlobOutput:
14
+ """
15
+ Attributes:
16
+ url (str): Presigned URL for uploading the blob Example: https://example-bucket.s3.amazonaws.com/presigned-put-
17
+ url.
18
+ expires_at (datetime.datetime): The time at which the presigned URL expires (ISO 8601 format) Example:
19
+ 2024-01-15T12:30:00Z.
20
+ max_size_bytes (int): The maximum size of the blob in bytes Example: 1048576.
21
+ """
22
+
23
+ url: str
24
+ expires_at: datetime.datetime
25
+ max_size_bytes: int
26
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
27
+
28
+ def to_dict(self) -> dict[str, Any]:
29
+ url = self.url
30
+
31
+ expires_at = self.expires_at.isoformat()
32
+
33
+ max_size_bytes = self.max_size_bytes
34
+
35
+ field_dict: dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "url": url,
40
+ "expiresAt": expires_at,
41
+ "maxSizeBytes": max_size_bytes,
42
+ }
43
+ )
44
+
45
+ return field_dict
46
+
47
+ @classmethod
48
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
49
+ d = dict(src_dict)
50
+ url = d.pop("url")
51
+
52
+ expires_at = isoparse(d.pop("expiresAt"))
53
+
54
+ max_size_bytes = d.pop("maxSizeBytes")
55
+
56
+ put_blob_output = cls(
57
+ url=url,
58
+ expires_at=expires_at,
59
+ max_size_bytes=max_size_bytes,
60
+ )
61
+
62
+ put_blob_output.additional_properties = d
63
+ return put_blob_output
64
+
65
+ @property
66
+ def additional_keys(self) -> list[str]:
67
+ return list(self.additional_properties.keys())
68
+
69
+ def __getitem__(self, key: str) -> Any:
70
+ return self.additional_properties[key]
71
+
72
+ def __setitem__(self, key: str, value: Any) -> None:
73
+ self.additional_properties[key] = value
74
+
75
+ def __delitem__(self, key: str) -> None:
76
+ del self.additional_properties[key]
77
+
78
+ def __contains__(self, key: str) -> bool:
79
+ return key in self.additional_properties
@@ -1,9 +1,15 @@
1
1
  from collections.abc import Mapping
2
- from typing import Any, TypeVar
2
+ from typing import TYPE_CHECKING, Any, TypeVar, Union
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
+ from ..types import UNSET, Unset
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.postgres_parameter_overrides import PostgresParameterOverrides
11
+
12
+
7
13
  T = TypeVar("T", bound="ReadReplica")
8
14
 
9
15
 
@@ -13,10 +19,12 @@ class ReadReplica:
13
19
  Attributes:
14
20
  id (str): The replica instance identifier.
15
21
  name (str): The display name of the replica instance.
22
+ parameter_overrides (Union[Unset, PostgresParameterOverrides]):
16
23
  """
17
24
 
18
25
  id: str
19
26
  name: str
27
+ parameter_overrides: Union[Unset, "PostgresParameterOverrides"] = UNSET
20
28
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
21
29
 
22
30
  def to_dict(self) -> dict[str, Any]:
@@ -24,6 +32,10 @@ class ReadReplica:
24
32
 
25
33
  name = self.name
26
34
 
35
+ parameter_overrides: Union[Unset, dict[str, Any]] = UNSET
36
+ if not isinstance(self.parameter_overrides, Unset):
37
+ parameter_overrides = self.parameter_overrides.to_dict()
38
+
27
39
  field_dict: dict[str, Any] = {}
28
40
  field_dict.update(self.additional_properties)
29
41
  field_dict.update(
@@ -32,19 +44,31 @@ class ReadReplica:
32
44
  "name": name,
33
45
  }
34
46
  )
47
+ if parameter_overrides is not UNSET:
48
+ field_dict["parameterOverrides"] = parameter_overrides
35
49
 
36
50
  return field_dict
37
51
 
38
52
  @classmethod
39
53
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
54
+ from ..models.postgres_parameter_overrides import PostgresParameterOverrides
55
+
40
56
  d = dict(src_dict)
41
57
  id = d.pop("id")
42
58
 
43
59
  name = d.pop("name")
44
60
 
61
+ _parameter_overrides = d.pop("parameterOverrides", UNSET)
62
+ parameter_overrides: Union[Unset, PostgresParameterOverrides]
63
+ if isinstance(_parameter_overrides, Unset):
64
+ parameter_overrides = UNSET
65
+ else:
66
+ parameter_overrides = PostgresParameterOverrides.from_dict(_parameter_overrides)
67
+
45
68
  read_replica = cls(
46
69
  id=id,
47
70
  name=name,
71
+ parameter_overrides=parameter_overrides,
48
72
  )
49
73
 
50
74
  read_replica.additional_properties = d
@@ -1,9 +1,15 @@
1
1
  from collections.abc import Mapping
2
- from typing import Any, TypeVar
2
+ from typing import TYPE_CHECKING, Any, TypeVar, Union
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
+ from ..types import UNSET, Unset
8
+
9
+ if TYPE_CHECKING:
10
+ from ..models.postgres_parameter_overrides import PostgresParameterOverrides
11
+
12
+
7
13
  T = TypeVar("T", bound="ReadReplicaInput")
8
14
 
9
15
 
@@ -12,14 +18,20 @@ class ReadReplicaInput:
12
18
  """
13
19
  Attributes:
14
20
  name (str): The display name of the replica instance.
21
+ parameter_overrides (Union[Unset, PostgresParameterOverrides]):
15
22
  """
16
23
 
17
24
  name: str
25
+ parameter_overrides: Union[Unset, "PostgresParameterOverrides"] = UNSET
18
26
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
19
27
 
20
28
  def to_dict(self) -> dict[str, Any]:
21
29
  name = self.name
22
30
 
31
+ parameter_overrides: Union[Unset, dict[str, Any]] = UNSET
32
+ if not isinstance(self.parameter_overrides, Unset):
33
+ parameter_overrides = self.parameter_overrides.to_dict()
34
+
23
35
  field_dict: dict[str, Any] = {}
24
36
  field_dict.update(self.additional_properties)
25
37
  field_dict.update(
@@ -27,16 +39,28 @@ class ReadReplicaInput:
27
39
  "name": name,
28
40
  }
29
41
  )
42
+ if parameter_overrides is not UNSET:
43
+ field_dict["parameterOverrides"] = parameter_overrides
30
44
 
31
45
  return field_dict
32
46
 
33
47
  @classmethod
34
48
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
49
+ from ..models.postgres_parameter_overrides import PostgresParameterOverrides
50
+
35
51
  d = dict(src_dict)
36
52
  name = d.pop("name")
37
53
 
54
+ _parameter_overrides = d.pop("parameterOverrides", UNSET)
55
+ parameter_overrides: Union[Unset, PostgresParameterOverrides]
56
+ if isinstance(_parameter_overrides, Unset):
57
+ parameter_overrides = UNSET
58
+ else:
59
+ parameter_overrides = PostgresParameterOverrides.from_dict(_parameter_overrides)
60
+
38
61
  read_replica_input = cls(
39
62
  name=name,
63
+ parameter_overrides=parameter_overrides,
40
64
  )
41
65
 
42
66
  read_replica_input.additional_properties = d
@@ -1,9 +1,13 @@
1
1
  from collections.abc import Mapping
2
- from typing import Any, TypeVar, cast
2
+ from typing import TYPE_CHECKING, Any, TypeVar, Union, cast
3
3
 
4
4
  from attrs import define as _attrs_define
5
5
  from attrs import field as _attrs_field
6
6
 
7
+ if TYPE_CHECKING:
8
+ from ..models.task_data_type_1 import TaskDataType1
9
+
10
+
7
11
  T = TypeVar("T", bound="RunTask")
8
12
 
9
13
 
@@ -11,19 +15,26 @@ T = TypeVar("T", bound="RunTask")
11
15
  class RunTask:
12
16
  """
13
17
  Attributes:
14
- task (str): Either a task ID or a workflow slug with task name and optional version. If a version is not
15
- provided, the latest version of the task will be used.
16
- input_ (list[Any]):
18
+ task (str): Either a task ID or a workflow slug with task name and optional version name. If a version is not
19
+ provided, the latest version of the task will be used. Example: tsk-1234, my-workflow-slug/my-task, my-workflow-
20
+ slug/my-task:SHA123.
21
+ input_ (Union['TaskDataType1', list[Any]]): Input data for a task. Can be either an array (for positional
22
+ arguments) or an object (for named parameters).
17
23
  """
18
24
 
19
25
  task: str
20
- input_: list[Any]
26
+ input_: Union["TaskDataType1", list[Any]]
21
27
  additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
22
28
 
23
29
  def to_dict(self) -> dict[str, Any]:
24
30
  task = self.task
25
31
 
26
- input_ = self.input_
32
+ input_: Union[dict[str, Any], list[Any]]
33
+ if isinstance(self.input_, list):
34
+ input_ = self.input_
35
+
36
+ else:
37
+ input_ = self.input_.to_dict()
27
38
 
28
39
  field_dict: dict[str, Any] = {}
29
40
  field_dict.update(self.additional_properties)
@@ -38,10 +49,27 @@ class RunTask:
38
49
 
39
50
  @classmethod
40
51
  def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
52
+ from ..models.task_data_type_1 import TaskDataType1
53
+
41
54
  d = dict(src_dict)
42
55
  task = d.pop("task")
43
56
 
44
- input_ = cast(list[Any], d.pop("input"))
57
+ def _parse_input_(data: object) -> Union["TaskDataType1", list[Any]]:
58
+ try:
59
+ if not isinstance(data, list):
60
+ raise TypeError()
61
+ componentsschemas_task_data_type_0 = cast(list[Any], data)
62
+
63
+ return componentsschemas_task_data_type_0
64
+ except: # noqa: E722
65
+ pass
66
+ if not isinstance(data, dict):
67
+ raise TypeError()
68
+ componentsschemas_task_data_type_1 = TaskDataType1.from_dict(data)
69
+
70
+ return componentsschemas_task_data_type_1
71
+
72
+ input_ = _parse_input_(d.pop("input"))
45
73
 
46
74
  run_task = cls(
47
75
  task=task,
@@ -43,7 +43,6 @@ if TYPE_CHECKING:
43
43
  from ..models.server_failed import ServerFailed
44
44
  from ..models.server_hardware_failure import ServerHardwareFailure
45
45
  from ..models.server_restarted import ServerRestarted
46
- from ..models.server_unhealthy import ServerUnhealthy
47
46
  from ..models.service_resumed import ServiceResumed
48
47
  from ..models.service_suspended import ServiceSuspended
49
48
  from ..models.suspender_added import SuspenderAdded
@@ -70,8 +69,8 @@ class ServiceEvent:
70
69
  'InstanceCountChanged', 'InstanceTypeChanged', 'JobRunEnded', 'MaintenanceEnded', 'MaintenanceModeEnabled',
71
70
  'MaintenanceModeURIUpdated', 'MaintenanceStarted', 'PipelineMinutesExhausted', 'PreDeployEnded',
72
71
  'PreDeployStarted', 'ServerAvailable', 'ServerFailed', 'ServerHardwareFailure', 'ServerRestarted',
73
- 'ServerUnhealthy', 'ServiceResumed', 'ServiceSuspended', 'SuspenderAdded', 'SuspenderRemoved',
74
- 'ZeroDowntimeRedeployEnded', 'ZeroDowntimeRedeployStarted']):
72
+ 'ServiceResumed', 'ServiceSuspended', 'SuspenderAdded', 'SuspenderRemoved', 'ZeroDowntimeRedeployEnded',
73
+ 'ZeroDowntimeRedeployStarted']):
75
74
  """
76
75
 
77
76
  id: str
@@ -113,7 +112,6 @@ class ServiceEvent:
113
112
  "ServerFailed",
114
113
  "ServerHardwareFailure",
115
114
  "ServerRestarted",
116
- "ServerUnhealthy",
117
115
  "ServiceResumed",
118
116
  "ServiceSuspended",
119
117
  "SuspenderAdded",
@@ -157,7 +155,6 @@ class ServiceEvent:
157
155
  from ..models.server_failed import ServerFailed
158
156
  from ..models.server_hardware_failure import ServerHardwareFailure
159
157
  from ..models.server_restarted import ServerRestarted
160
- from ..models.server_unhealthy import ServerUnhealthy
161
158
  from ..models.service_resumed import ServiceResumed
162
159
  from ..models.service_suspended import ServiceSuspended
163
160
  from ..models.suspender_added import SuspenderAdded
@@ -236,8 +233,6 @@ class ServiceEvent:
236
233
  details = self.details.to_dict()
237
234
  elif isinstance(self.details, ServerRestarted):
238
235
  details = self.details.to_dict()
239
- elif isinstance(self.details, ServerUnhealthy):
240
- details = self.details.to_dict()
241
236
  elif isinstance(self.details, ServiceResumed):
242
237
  details = self.details.to_dict()
243
238
  elif isinstance(self.details, ServiceSuspended):
@@ -307,7 +302,6 @@ class ServiceEvent:
307
302
  from ..models.server_failed import ServerFailed
308
303
  from ..models.server_hardware_failure import ServerHardwareFailure
309
304
  from ..models.server_restarted import ServerRestarted
310
- from ..models.server_unhealthy import ServerUnhealthy
311
305
  from ..models.service_resumed import ServiceResumed
312
306
  from ..models.service_suspended import ServiceSuspended
313
307
  from ..models.suspender_added import SuspenderAdded
@@ -361,7 +355,6 @@ class ServiceEvent:
361
355
  "ServerFailed",
362
356
  "ServerHardwareFailure",
363
357
  "ServerRestarted",
364
- "ServerUnhealthy",
365
358
  "ServiceResumed",
366
359
  "ServiceSuspended",
367
360
  "SuspenderAdded",
@@ -620,7 +613,7 @@ class ServiceEvent:
620
613
  try:
621
614
  if not isinstance(data, dict):
622
615
  raise TypeError()
623
- componentsschemasservice_event_details_type_31 = ServerUnhealthy.from_dict(data)
616
+ componentsschemasservice_event_details_type_31 = ServiceResumed.from_dict(data)
624
617
 
625
618
  return componentsschemasservice_event_details_type_31
626
619
  except: # noqa: E722
@@ -628,7 +621,7 @@ class ServiceEvent:
628
621
  try:
629
622
  if not isinstance(data, dict):
630
623
  raise TypeError()
631
- componentsschemasservice_event_details_type_32 = ServiceResumed.from_dict(data)
624
+ componentsschemasservice_event_details_type_32 = ServiceSuspended.from_dict(data)
632
625
 
633
626
  return componentsschemasservice_event_details_type_32
634
627
  except: # noqa: E722
@@ -636,7 +629,7 @@ class ServiceEvent:
636
629
  try:
637
630
  if not isinstance(data, dict):
638
631
  raise TypeError()
639
- componentsschemasservice_event_details_type_33 = ServiceSuspended.from_dict(data)
632
+ componentsschemasservice_event_details_type_33 = SuspenderAdded.from_dict(data)
640
633
 
641
634
  return componentsschemasservice_event_details_type_33
642
635
  except: # noqa: E722
@@ -644,7 +637,7 @@ class ServiceEvent:
644
637
  try:
645
638
  if not isinstance(data, dict):
646
639
  raise TypeError()
647
- componentsschemasservice_event_details_type_34 = SuspenderAdded.from_dict(data)
640
+ componentsschemasservice_event_details_type_34 = SuspenderRemoved.from_dict(data)
648
641
 
649
642
  return componentsschemasservice_event_details_type_34
650
643
  except: # noqa: E722
@@ -652,7 +645,7 @@ class ServiceEvent:
652
645
  try:
653
646
  if not isinstance(data, dict):
654
647
  raise TypeError()
655
- componentsschemasservice_event_details_type_35 = SuspenderRemoved.from_dict(data)
648
+ componentsschemasservice_event_details_type_35 = ZeroDowntimeRedeployEnded.from_dict(data)
656
649
 
657
650
  return componentsschemasservice_event_details_type_35
658
651
  except: # noqa: E722
@@ -660,7 +653,7 @@ class ServiceEvent:
660
653
  try:
661
654
  if not isinstance(data, dict):
662
655
  raise TypeError()
663
- componentsschemasservice_event_details_type_36 = ZeroDowntimeRedeployEnded.from_dict(data)
656
+ componentsschemasservice_event_details_type_36 = ZeroDowntimeRedeployStarted.from_dict(data)
664
657
 
665
658
  return componentsschemasservice_event_details_type_36
666
659
  except: # noqa: E722
@@ -668,7 +661,7 @@ class ServiceEvent:
668
661
  try:
669
662
  if not isinstance(data, dict):
670
663
  raise TypeError()
671
- componentsschemasservice_event_details_type_37 = ZeroDowntimeRedeployStarted.from_dict(data)
664
+ componentsschemasservice_event_details_type_37 = EdgeCacheDisabled.from_dict(data)
672
665
 
673
666
  return componentsschemasservice_event_details_type_37
674
667
  except: # noqa: E722
@@ -676,24 +669,16 @@ class ServiceEvent:
676
669
  try:
677
670
  if not isinstance(data, dict):
678
671
  raise TypeError()
679
- componentsschemasservice_event_details_type_38 = EdgeCacheDisabled.from_dict(data)
672
+ componentsschemasservice_event_details_type_38 = EdgeCacheEnabled.from_dict(data)
680
673
 
681
674
  return componentsschemasservice_event_details_type_38
682
675
  except: # noqa: E722
683
676
  pass
684
- try:
685
- if not isinstance(data, dict):
686
- raise TypeError()
687
- componentsschemasservice_event_details_type_39 = EdgeCacheEnabled.from_dict(data)
688
-
689
- return componentsschemasservice_event_details_type_39
690
- except: # noqa: E722
691
- pass
692
677
  if not isinstance(data, dict):
693
678
  raise TypeError()
694
- componentsschemasservice_event_details_type_40 = EdgeCachePurged.from_dict(data)
679
+ componentsschemasservice_event_details_type_39 = EdgeCachePurged.from_dict(data)
695
680
 
696
- return componentsschemasservice_event_details_type_40
681
+ return componentsschemasservice_event_details_type_39
697
682
 
698
683
  details = _parse_details(d.pop("details"))
699
684
 
@@ -33,7 +33,6 @@ class ServiceEventType(str, Enum):
33
33
  SERVER_FAILED = "server_failed"
34
34
  SERVER_HARDWARE_FAILURE = "server_hardware_failure"
35
35
  SERVER_RESTARTED = "server_restarted"
36
- SERVER_UNHEALTHY = "server_unhealthy"
37
36
  SERVICE_RESUMED = "service_resumed"
38
37
  SERVICE_SUSPENDED = "service_suspended"
39
38
  SUSPENDER_ADDED = "suspender_added"
@@ -30,20 +30,23 @@ class ServicePOST:
30
30
  """
31
31
  Attributes:
32
32
  type_ (ServiceType):
33
- name (str):
34
- owner_id (str):
35
- repo (Union[Unset, str]): Do not include the branch in the repo string. You can instead supply a 'branch'
36
- parameter. Example: https://github.com/render-examples/flask-hello-world.
33
+ name (str): The service's name. Must be unique within the workspace.
34
+ owner_id (str): The ID of the workspace the service belongs to. Obtain your workspace's ID from its Settings
35
+ page in the Render Dashboard.
36
+ repo (Union[Unset, str]): The service's repository URL. Do not specify a branch in this string (use the `branch`
37
+ parameter instead). Example: https://github.com/render-examples/flask-hello-world.
37
38
  auto_deploy (Union[Unset, AutoDeploy]):
38
39
  auto_deploy_trigger (Union[Unset, AutoDeployTrigger]): Controls autodeploy behavior. commit deploys when a
39
40
  commit is pushed to a branch. checksPass waits for the branch to be green.
40
- branch (Union[Unset, str]): If left empty, this will fall back to the default branch of the repository
41
+ branch (Union[Unset, str]): The repo branch to pull, build, and deploy. If omitted, uses the repository's
42
+ default branch.
41
43
  image (Union[Unset, Image]):
42
44
  build_filter (Union[Unset, BuildFilter]):
43
45
  root_dir (Union[Unset, str]):
44
46
  env_vars (Union[Unset, list[Union['EnvVarKeyGenerateValue', 'EnvVarKeyValue']]]):
45
47
  secret_files (Union[Unset, list['SecretFileInput']]):
46
- environment_id (Union[Unset, str]): The ID of the environment the service is associated with
48
+ environment_id (Union[Unset, str]): The ID of the environment the service belongs to, if any. Obtain an
49
+ environment's ID from its Settings page in the Render Dashboard.
47
50
  service_details (Union['BackgroundWorkerDetailsPOST', 'CronJobDetailsPOST', 'PrivateServiceDetailsPOST',
48
51
  'StaticSiteDetailsPOST', 'WebServiceDetailsPOST', Unset]):
49
52
  """
@@ -0,0 +1,88 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import Any, TypeVar, Union
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="TaskAttempt")
13
+
14
+
15
+ @_attrs_define
16
+ class TaskAttempt:
17
+ """
18
+ Attributes:
19
+ status (TaskRunStatus):
20
+ started_at (datetime.datetime):
21
+ completed_at (Union[Unset, datetime.datetime]):
22
+ """
23
+
24
+ status: TaskRunStatus
25
+ started_at: datetime.datetime
26
+ completed_at: Union[Unset, datetime.datetime] = UNSET
27
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
28
+
29
+ def to_dict(self) -> dict[str, Any]:
30
+ status = self.status.value
31
+
32
+ started_at = self.started_at.isoformat()
33
+
34
+ completed_at: Union[Unset, str] = UNSET
35
+ if not isinstance(self.completed_at, Unset):
36
+ completed_at = self.completed_at.isoformat()
37
+
38
+ field_dict: dict[str, Any] = {}
39
+ field_dict.update(self.additional_properties)
40
+ field_dict.update(
41
+ {
42
+ "status": status,
43
+ "startedAt": started_at,
44
+ }
45
+ )
46
+ if completed_at is not UNSET:
47
+ field_dict["completedAt"] = completed_at
48
+
49
+ return field_dict
50
+
51
+ @classmethod
52
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
53
+ d = dict(src_dict)
54
+ status = TaskRunStatus(d.pop("status"))
55
+
56
+ started_at = isoparse(d.pop("startedAt"))
57
+
58
+ _completed_at = d.pop("completedAt", UNSET)
59
+ completed_at: Union[Unset, datetime.datetime]
60
+ if isinstance(_completed_at, Unset):
61
+ completed_at = UNSET
62
+ else:
63
+ completed_at = isoparse(_completed_at)
64
+
65
+ task_attempt = cls(
66
+ status=status,
67
+ started_at=started_at,
68
+ completed_at=completed_at,
69
+ )
70
+
71
+ task_attempt.additional_properties = d
72
+ return task_attempt
73
+
74
+ @property
75
+ def additional_keys(self) -> list[str]:
76
+ return list(self.additional_properties.keys())
77
+
78
+ def __getitem__(self, key: str) -> Any:
79
+ return self.additional_properties[key]
80
+
81
+ def __setitem__(self, key: str, value: Any) -> None:
82
+ self.additional_properties[key] = value
83
+
84
+ def __delitem__(self, key: str) -> None:
85
+ del self.additional_properties[key]
86
+
87
+ def __contains__(self, key: str) -> bool:
88
+ return key in self.additional_properties