docket-client 0.3.2__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 (188) hide show
  1. docket/__init__.py +8 -0
  2. docket/api/__init__.py +1 -0
  3. docket/api/access/__init__.py +1 -0
  4. docket/api/access/add_principal.py +193 -0
  5. docket/api/access/archive_role_assignment.py +182 -0
  6. docket/api/access/create_api_token.py +198 -0
  7. docket/api/access/create_application_principal.py +188 -0
  8. docket/api/access/create_role_assignment.py +194 -0
  9. docket/api/access/list_api_tokens.py +184 -0
  10. docket/api/access/list_principals.py +184 -0
  11. docket/api/access/list_role_assignments.py +200 -0
  12. docket/api/access/revoke_api_token.py +173 -0
  13. docket/api/identity/__init__.py +1 -0
  14. docket/api/identity/create_my_api_token.py +206 -0
  15. docket/api/identity/get_me.py +127 -0
  16. docket/api/identity/list_my_api_tokens.py +151 -0
  17. docket/api/identity/revoke_my_api_token.py +178 -0
  18. docket/api/recurring_acquisitions/__init__.py +1 -0
  19. docket/api/recurring_acquisitions/archive_recurring_acquisition.py +207 -0
  20. docket/api/recurring_acquisitions/create_recurring_acquisition.py +218 -0
  21. docket/api/recurring_acquisitions/get_recurring_acquisition.py +163 -0
  22. docket/api/recurring_acquisitions/list_recurring_acquisitions.py +248 -0
  23. docket/api/recurring_acquisitions/preview_recurring_acquisition.py +187 -0
  24. docket/api/recurring_acquisitions/preview_split_recurring_acquisition.py +232 -0
  25. docket/api/recurring_acquisitions/split_recurring_acquisition.py +258 -0
  26. docket/api/runs/__init__.py +1 -0
  27. docket/api/runs/get_run.py +160 -0
  28. docket/api/runs/list_runs.py +180 -0
  29. docket/api/runs/report_run_outcome.py +206 -0
  30. docket/api/scheduled_acquisitions/__init__.py +1 -0
  31. docket/api/scheduled_acquisitions/archive_scheduled_acquisition.py +203 -0
  32. docket/api/scheduled_acquisitions/create_scheduled_acquisition.py +185 -0
  33. docket/api/scheduled_acquisitions/get_resolved_settings.py +169 -0
  34. docket/api/scheduled_acquisitions/get_scheduled_acquisition.py +159 -0
  35. docket/api/scheduled_acquisitions/list_active_acquisitions.py +297 -0
  36. docket/api/scheduled_acquisitions/list_runs_for_scheduled_acquisition.py +191 -0
  37. docket/api/scheduled_acquisitions/list_scheduled_acquisitions.py +332 -0
  38. docket/api/scheduled_acquisitions/preview_scheduled_acquisition_edit.py +224 -0
  39. docket/api/scheduled_acquisitions/set_planning_status.py +199 -0
  40. docket/api/scheduled_acquisitions/start_run.py +221 -0
  41. docket/api/scheduled_acquisitions/update_scheduled_acquisition.py +226 -0
  42. docket/api/settings/__init__.py +1 -0
  43. docket/api/settings/list_behavior_curriculum_discriminator_values.py +188 -0
  44. docket/api/settings/list_behavior_curriculum_settings.py +199 -0
  45. docket/api/settings/list_fip_discriminator_values.py +184 -0
  46. docket/api/settings/list_fip_settings.py +195 -0
  47. docket/api/settings/list_live_behavior_curriculum_settings.py +233 -0
  48. docket/api/settings/list_live_fip_settings.py +225 -0
  49. docket/api/settings/preview_behavior_curriculum_settings.py +191 -0
  50. docket/api/settings/preview_fip_settings.py +177 -0
  51. docket/api/settings/push_behavior_curriculum_settings.py +222 -0
  52. docket/api/settings/push_fip_settings.py +206 -0
  53. docket/api/templates/__init__.py +1 -0
  54. docket/api/templates/archive_template.py +203 -0
  55. docket/api/templates/create_template.py +206 -0
  56. docket/api/templates/get_template.py +159 -0
  57. docket/api/templates/list_templates.py +174 -0
  58. docket/api/templates/update_template.py +234 -0
  59. docket/api/vocabulary/__init__.py +1 -0
  60. docket/api/vocabulary/list_instruments.py +165 -0
  61. docket/api/vocabulary/list_persons.py +132 -0
  62. docket/api/vocabulary/list_projects.py +132 -0
  63. docket/api/vocabulary/list_subjects.py +132 -0
  64. docket/api/vocabulary/lookup_person.py +166 -0
  65. docket/api/vocabulary/lookup_subject.py +166 -0
  66. docket/api/vocabulary/sync_vocabulary.py +148 -0
  67. docket/client.py +272 -0
  68. docket/errors.py +16 -0
  69. docket/models/__init__.py +221 -0
  70. docket/models/access_role.py +12 -0
  71. docket/models/access_role_nullable_type_1.py +12 -0
  72. docket/models/access_role_nullable_type_2_type_1.py +12 -0
  73. docket/models/access_role_nullable_type_3_type_1.py +12 -0
  74. docket/models/acquisition_variable.py +72 -0
  75. docket/models/acquisition_warning.py +126 -0
  76. docket/models/add_principal_request.py +83 -0
  77. docket/models/api_token_response.py +271 -0
  78. docket/models/api_token_status.py +10 -0
  79. docket/models/archive_recurring_acquisition_request.py +77 -0
  80. docket/models/archive_recurring_acquisition_response.py +83 -0
  81. docket/models/archive_scheduled_acquisition_request.py +78 -0
  82. docket/models/archive_template_request.py +66 -0
  83. docket/models/auth_mode.py +10 -0
  84. docket/models/behavior_curriculum_push_settings_request.py +85 -0
  85. docket/models/behavior_curriculum_settings.py +55 -0
  86. docket/models/behavior_curriculum_settings_preview_response.py +102 -0
  87. docket/models/behavior_curriculum_settings_preview_response_promoted.py +50 -0
  88. docket/models/behavior_curriculum_settings_version_response.py +160 -0
  89. docket/models/behavior_curriculum_settings_version_response_promoted.py +50 -0
  90. docket/models/caller_kind.py +11 -0
  91. docket/models/create_api_token_request.py +97 -0
  92. docket/models/create_application_principal_request.py +65 -0
  93. docket/models/create_personal_api_token_request.py +167 -0
  94. docket/models/create_recurring_acquisition_request.py +269 -0
  95. docket/models/create_role_assignment_request.py +99 -0
  96. docket/models/create_scheduled_acquisition_request.py +265 -0
  97. docket/models/create_template_request.py +323 -0
  98. docket/models/created_api_token_response.py +82 -0
  99. docket/models/effective_status.py +15 -0
  100. docket/models/fip_color.py +13 -0
  101. docket/models/fip_fiber.py +93 -0
  102. docket/models/fip_mode.py +9 -0
  103. docket/models/fip_push_settings_request.py +82 -0
  104. docket/models/fip_settings.py +91 -0
  105. docket/models/fip_settings_preview_response.py +97 -0
  106. docket/models/fip_settings_preview_response_promoted.py +50 -0
  107. docket/models/fip_settings_version_response.py +155 -0
  108. docket/models/fip_settings_version_response_promoted.py +50 -0
  109. docket/models/future_occurrences.py +9 -0
  110. docket/models/get_resolved_settings_response_200.py +65 -0
  111. docket/models/held_role_response.py +116 -0
  112. docket/models/http_validation_problem_details.py +204 -0
  113. docket/models/http_validation_problem_details_errors.py +59 -0
  114. docket/models/instrument_response.py +91 -0
  115. docket/models/kept_occurrence.py +85 -0
  116. docket/models/kept_occurrence_reason.py +10 -0
  117. docket/models/list_active_acquisitions_effective_status_item.py +15 -0
  118. docket/models/list_scheduled_acquisitions_planning_status.py +11 -0
  119. docket/models/me_caller.py +118 -0
  120. docket/models/me_permission.py +98 -0
  121. docket/models/me_response.py +158 -0
  122. docket/models/me_role.py +75 -0
  123. docket/models/occurrence_preview.py +121 -0
  124. docket/models/occurrence_summary.py +126 -0
  125. docket/models/occurrence_warnings.py +91 -0
  126. docket/models/permission_action.py +12 -0
  127. docket/models/person_assignment.py +74 -0
  128. docket/models/person_lookup_response.py +131 -0
  129. docket/models/person_response.py +103 -0
  130. docket/models/person_role.py +9 -0
  131. docket/models/personal_token_limits.py +92 -0
  132. docket/models/planning_status.py +11 -0
  133. docket/models/principal_kind.py +9 -0
  134. docket/models/principal_response.py +216 -0
  135. docket/models/problem_details.py +177 -0
  136. docket/models/project_response.py +75 -0
  137. docket/models/recurrence_exception_kind.py +13 -0
  138. docket/models/recurrence_exception_response.py +103 -0
  139. docket/models/recurrence_frequency.py +9 -0
  140. docket/models/recurrence_preview_response.py +101 -0
  141. docket/models/recurrence_rule.py +207 -0
  142. docket/models/recurring_acquisition_created_response.py +123 -0
  143. docket/models/recurring_acquisition_detail_response.py +105 -0
  144. docket/models/recurring_acquisition_response.py +326 -0
  145. docket/models/report_run_outcome_request.py +89 -0
  146. docket/models/resolution_mode.py +10 -0
  147. docket/models/resolved_settings.py +73 -0
  148. docket/models/role_assignment_response.py +157 -0
  149. docket/models/role_origin.py +10 -0
  150. docket/models/role_source_kind.py +10 -0
  151. docket/models/run_origin.py +9 -0
  152. docket/models/run_outcome.py +9 -0
  153. docket/models/run_response.py +181 -0
  154. docket/models/run_settings_snapshot.py +72 -0
  155. docket/models/run_start_response.py +91 -0
  156. docket/models/run_start_response_settings.py +65 -0
  157. docket/models/run_status.py +11 -0
  158. docket/models/scheduled_acquisition_edit_preview_response.py +150 -0
  159. docket/models/scheduled_acquisition_response.py +366 -0
  160. docket/models/set_planning_status_request.py +90 -0
  161. docket/models/settings_selector.py +138 -0
  162. docket/models/skipped_occurrence.py +85 -0
  163. docket/models/split_preview_response.py +129 -0
  164. docket/models/split_recurring_acquisition_request.py +261 -0
  165. docket/models/split_recurring_acquisition_response.py +159 -0
  166. docket/models/start_run_request.py +73 -0
  167. docket/models/subject_lookup_response.py +149 -0
  168. docket/models/subject_response.py +128 -0
  169. docket/models/sync_counts.py +80 -0
  170. docket/models/sync_response.py +81 -0
  171. docket/models/template_response.py +302 -0
  172. docket/models/update_scheduled_acquisition_request.py +235 -0
  173. docket/models/update_template_request.py +279 -0
  174. docket/models/weekday.py +14 -0
  175. docket/types.py +54 -0
  176. docket_auth/__init__.py +239 -0
  177. docket_client-0.3.2.dist-info/METADATA +233 -0
  178. docket_client-0.3.2.dist-info/RECORD +188 -0
  179. docket_client-0.3.2.dist-info/WHEEL +4 -0
  180. docket_client-0.3.2.dist-info/entry_points.txt +2 -0
  181. docket_mcp/__init__.py +6 -0
  182. docket_mcp/api.py +207 -0
  183. docket_mcp/config.py +57 -0
  184. docket_mcp/server.py +78 -0
  185. docket_mcp/signin.py +155 -0
  186. docket_mcp/slots.py +80 -0
  187. docket_mcp/times.py +160 -0
  188. docket_mcp/tools.py +1202 -0
@@ -0,0 +1,65 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from typing import cast
12
+
13
+ if TYPE_CHECKING:
14
+ from ..models.resolved_settings import ResolvedSettings
15
+
16
+
17
+ T = TypeVar("T", bound="GetResolvedSettingsResponse200")
18
+
19
+
20
+ @_attrs_define
21
+ class GetResolvedSettingsResponse200:
22
+ """ """
23
+
24
+ additional_properties: dict[str, ResolvedSettings] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ from ..models.resolved_settings import ResolvedSettings
28
+
29
+ field_dict: dict[str, Any] = {}
30
+ for prop_name, prop in self.additional_properties.items():
31
+ field_dict[prop_name] = prop.to_dict()
32
+
33
+ return field_dict
34
+
35
+ @classmethod
36
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
37
+ from ..models.resolved_settings import ResolvedSettings
38
+
39
+ d = dict(src_dict)
40
+ get_resolved_settings_response_200 = cls()
41
+
42
+ additional_properties = {}
43
+ for prop_name, prop_dict in d.items():
44
+ additional_property = ResolvedSettings.from_dict(prop_dict)
45
+
46
+ additional_properties[prop_name] = additional_property
47
+
48
+ get_resolved_settings_response_200.additional_properties = additional_properties
49
+ return get_resolved_settings_response_200
50
+
51
+ @property
52
+ def additional_keys(self) -> list[str]:
53
+ return list(self.additional_properties.keys())
54
+
55
+ def __getitem__(self, key: str) -> ResolvedSettings:
56
+ return self.additional_properties[key]
57
+
58
+ def __setitem__(self, key: str, value: ResolvedSettings) -> None:
59
+ self.additional_properties[key] = value
60
+
61
+ def __delitem__(self, key: str) -> None:
62
+ del self.additional_properties[key]
63
+
64
+ def __contains__(self, key: str) -> bool:
65
+ return key in self.additional_properties
@@ -0,0 +1,116 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from ..models.access_role import AccessRole
12
+ from ..models.role_origin import RoleOrigin
13
+ from typing import cast
14
+
15
+
16
+ T = TypeVar("T", bound="HeldRoleResponse")
17
+
18
+
19
+ @_attrs_define
20
+ class HeldRoleResponse:
21
+ """A role a principal holds.
22
+
23
+ Attributes:
24
+ assignment_id (int | None): The assignment to archive to remove it; null for bootstrap.
25
+ role (AccessRole): A role Docket grants. Roles live in Docket's database; Entra only proves
26
+ who the caller is, and the token's own `roles` claim is ignored.
27
+ scope (None | str): Acquisition-type key for an acquisition settings maintainer; null means all acquisition
28
+ types (or not applicable).
29
+ origin (RoleOrigin): Where a held role comes from.
30
+ bootstrap (bool): True when it comes from server configuration and cannot be removed here.
31
+ """
32
+
33
+ assignment_id: int | None
34
+ role: AccessRole
35
+ scope: None | str
36
+ origin: RoleOrigin
37
+ bootstrap: bool
38
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
39
+
40
+ def to_dict(self) -> dict[str, Any]:
41
+ assignment_id: int | None
42
+ assignment_id = self.assignment_id
43
+
44
+ role = self.role.value
45
+
46
+ scope: None | str
47
+ scope = self.scope
48
+
49
+ origin = self.origin.value
50
+
51
+ bootstrap = self.bootstrap
52
+
53
+ field_dict: dict[str, Any] = {}
54
+ field_dict.update(self.additional_properties)
55
+ field_dict.update(
56
+ {
57
+ "assignment_id": assignment_id,
58
+ "role": role,
59
+ "scope": scope,
60
+ "origin": origin,
61
+ "bootstrap": bootstrap,
62
+ }
63
+ )
64
+
65
+ return field_dict
66
+
67
+ @classmethod
68
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
69
+ d = dict(src_dict)
70
+
71
+ def _parse_assignment_id(data: object) -> int | None:
72
+ if data is None:
73
+ return data
74
+ return cast(int | None, data)
75
+
76
+ assignment_id = _parse_assignment_id(d.pop("assignment_id"))
77
+
78
+ role = AccessRole(d.pop("role"))
79
+
80
+ def _parse_scope(data: object) -> None | str:
81
+ if data is None:
82
+ return data
83
+ return cast(None | str, data)
84
+
85
+ scope = _parse_scope(d.pop("scope"))
86
+
87
+ origin = RoleOrigin(d.pop("origin"))
88
+
89
+ bootstrap = d.pop("bootstrap")
90
+
91
+ held_role_response = cls(
92
+ assignment_id=assignment_id,
93
+ role=role,
94
+ scope=scope,
95
+ origin=origin,
96
+ bootstrap=bootstrap,
97
+ )
98
+
99
+ held_role_response.additional_properties = d
100
+ return held_role_response
101
+
102
+ @property
103
+ def additional_keys(self) -> list[str]:
104
+ return list(self.additional_properties.keys())
105
+
106
+ def __getitem__(self, key: str) -> Any:
107
+ return self.additional_properties[key]
108
+
109
+ def __setitem__(self, key: str, value: Any) -> None:
110
+ self.additional_properties[key] = value
111
+
112
+ def __delitem__(self, key: str) -> None:
113
+ del self.additional_properties[key]
114
+
115
+ def __contains__(self, key: str) -> bool:
116
+ return key in self.additional_properties
@@ -0,0 +1,204 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from ..types import UNSET, Unset
12
+ from typing import cast
13
+
14
+ if TYPE_CHECKING:
15
+ from ..models.http_validation_problem_details_errors import HttpValidationProblemDetailsErrors
16
+
17
+
18
+ T = TypeVar("T", bound="HttpValidationProblemDetails")
19
+
20
+
21
+ @_attrs_define
22
+ class HttpValidationProblemDetails:
23
+ """
24
+ Attributes:
25
+ code (str): Stable machine-readable error code, e.g. not_found, validation_failed, version_conflict,
26
+ settings_not_available.
27
+ request_id (str): Correlation id of the request (the X-Request-Id response header); quote it when reporting a
28
+ problem.
29
+ type_ (None | str | Unset):
30
+ title (None | str | Unset):
31
+ status (int | None | Unset):
32
+ detail (None | str | Unset):
33
+ instance (None | str | Unset):
34
+ errors (HttpValidationProblemDetailsErrors | Unset):
35
+ """
36
+
37
+ code: str
38
+ request_id: str
39
+ type_: None | str | Unset = UNSET
40
+ title: None | str | Unset = UNSET
41
+ status: int | None | Unset = UNSET
42
+ detail: None | str | Unset = UNSET
43
+ instance: None | str | Unset = UNSET
44
+ errors: HttpValidationProblemDetailsErrors | Unset = UNSET
45
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
46
+
47
+ def to_dict(self) -> dict[str, Any]:
48
+ from ..models.http_validation_problem_details_errors import (
49
+ HttpValidationProblemDetailsErrors,
50
+ )
51
+
52
+ code = self.code
53
+
54
+ request_id = self.request_id
55
+
56
+ type_: None | str | Unset
57
+ if isinstance(self.type_, Unset):
58
+ type_ = UNSET
59
+ else:
60
+ type_ = self.type_
61
+
62
+ title: None | str | Unset
63
+ if isinstance(self.title, Unset):
64
+ title = UNSET
65
+ else:
66
+ title = self.title
67
+
68
+ status: int | None | Unset
69
+ if isinstance(self.status, Unset):
70
+ status = UNSET
71
+ else:
72
+ status = self.status
73
+
74
+ detail: None | str | Unset
75
+ if isinstance(self.detail, Unset):
76
+ detail = UNSET
77
+ else:
78
+ detail = self.detail
79
+
80
+ instance: None | str | Unset
81
+ if isinstance(self.instance, Unset):
82
+ instance = UNSET
83
+ else:
84
+ instance = self.instance
85
+
86
+ errors: dict[str, Any] | Unset = UNSET
87
+ if not isinstance(self.errors, Unset):
88
+ errors = self.errors.to_dict()
89
+
90
+ field_dict: dict[str, Any] = {}
91
+ field_dict.update(self.additional_properties)
92
+ field_dict.update(
93
+ {
94
+ "code": code,
95
+ "request_id": request_id,
96
+ }
97
+ )
98
+ if type_ is not UNSET:
99
+ field_dict["type"] = type_
100
+ if title is not UNSET:
101
+ field_dict["title"] = title
102
+ if status is not UNSET:
103
+ field_dict["status"] = status
104
+ if detail is not UNSET:
105
+ field_dict["detail"] = detail
106
+ if instance is not UNSET:
107
+ field_dict["instance"] = instance
108
+ if errors is not UNSET:
109
+ field_dict["errors"] = errors
110
+
111
+ return field_dict
112
+
113
+ @classmethod
114
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
115
+ from ..models.http_validation_problem_details_errors import (
116
+ HttpValidationProblemDetailsErrors,
117
+ )
118
+
119
+ d = dict(src_dict)
120
+ code = d.pop("code")
121
+
122
+ request_id = d.pop("request_id")
123
+
124
+ def _parse_type_(data: object) -> None | str | Unset:
125
+ if data is None:
126
+ return data
127
+ if isinstance(data, Unset):
128
+ return data
129
+ return cast(None | str | Unset, data)
130
+
131
+ type_ = _parse_type_(d.pop("type", UNSET))
132
+
133
+ def _parse_title(data: object) -> None | str | Unset:
134
+ if data is None:
135
+ return data
136
+ if isinstance(data, Unset):
137
+ return data
138
+ return cast(None | str | Unset, data)
139
+
140
+ title = _parse_title(d.pop("title", UNSET))
141
+
142
+ def _parse_status(data: object) -> int | None | Unset:
143
+ if data is None:
144
+ return data
145
+ if isinstance(data, Unset):
146
+ return data
147
+ return cast(int | None | Unset, data)
148
+
149
+ status = _parse_status(d.pop("status", UNSET))
150
+
151
+ def _parse_detail(data: object) -> None | str | Unset:
152
+ if data is None:
153
+ return data
154
+ if isinstance(data, Unset):
155
+ return data
156
+ return cast(None | str | Unset, data)
157
+
158
+ detail = _parse_detail(d.pop("detail", UNSET))
159
+
160
+ def _parse_instance(data: object) -> None | str | Unset:
161
+ if data is None:
162
+ return data
163
+ if isinstance(data, Unset):
164
+ return data
165
+ return cast(None | str | Unset, data)
166
+
167
+ instance = _parse_instance(d.pop("instance", UNSET))
168
+
169
+ _errors = d.pop("errors", UNSET)
170
+ errors: HttpValidationProblemDetailsErrors | Unset
171
+ if isinstance(_errors, Unset):
172
+ errors = UNSET
173
+ else:
174
+ errors = HttpValidationProblemDetailsErrors.from_dict(_errors)
175
+
176
+ http_validation_problem_details = cls(
177
+ code=code,
178
+ request_id=request_id,
179
+ type_=type_,
180
+ title=title,
181
+ status=status,
182
+ detail=detail,
183
+ instance=instance,
184
+ errors=errors,
185
+ )
186
+
187
+ http_validation_problem_details.additional_properties = d
188
+ return http_validation_problem_details
189
+
190
+ @property
191
+ def additional_keys(self) -> list[str]:
192
+ return list(self.additional_properties.keys())
193
+
194
+ def __getitem__(self, key: str) -> Any:
195
+ return self.additional_properties[key]
196
+
197
+ def __setitem__(self, key: str, value: Any) -> None:
198
+ self.additional_properties[key] = value
199
+
200
+ def __delitem__(self, key: str) -> None:
201
+ del self.additional_properties[key]
202
+
203
+ def __contains__(self, key: str) -> bool:
204
+ return key in self.additional_properties
@@ -0,0 +1,59 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from typing import cast
12
+
13
+
14
+ T = TypeVar("T", bound="HttpValidationProblemDetailsErrors")
15
+
16
+
17
+ @_attrs_define
18
+ class HttpValidationProblemDetailsErrors:
19
+ """ """
20
+
21
+ additional_properties: dict[str, list[str]] = _attrs_field(init=False, factory=dict)
22
+
23
+ def to_dict(self) -> dict[str, Any]:
24
+
25
+ field_dict: dict[str, Any] = {}
26
+ for prop_name, prop in self.additional_properties.items():
27
+ field_dict[prop_name] = prop
28
+
29
+ return field_dict
30
+
31
+ @classmethod
32
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
33
+ d = dict(src_dict)
34
+ http_validation_problem_details_errors = cls()
35
+
36
+ additional_properties = {}
37
+ for prop_name, prop_dict in d.items():
38
+ additional_property = cast(list[str], prop_dict)
39
+
40
+ additional_properties[prop_name] = additional_property
41
+
42
+ http_validation_problem_details_errors.additional_properties = additional_properties
43
+ return http_validation_problem_details_errors
44
+
45
+ @property
46
+ def additional_keys(self) -> list[str]:
47
+ return list(self.additional_properties.keys())
48
+
49
+ def __getitem__(self, key: str) -> list[str]:
50
+ return self.additional_properties[key]
51
+
52
+ def __setitem__(self, key: str, value: list[str]) -> 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,91 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from typing import cast
12
+ import datetime
13
+
14
+
15
+ T = TypeVar("T", bound="InstrumentResponse")
16
+
17
+
18
+ @_attrs_define
19
+ class InstrumentResponse:
20
+ """
21
+ Attributes:
22
+ id (str):
23
+ hostname (str):
24
+ rig_id (str):
25
+ synced_at (datetime.datetime): UTC instant, ISO 8601 with offset, e.g. 2026-10-15T16:00:00Z.
26
+ """
27
+
28
+ id: str
29
+ hostname: str
30
+ rig_id: str
31
+ synced_at: datetime.datetime
32
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
+
34
+ def to_dict(self) -> dict[str, Any]:
35
+ id = self.id
36
+
37
+ hostname = self.hostname
38
+
39
+ rig_id = self.rig_id
40
+
41
+ synced_at = self.synced_at.isoformat()
42
+
43
+ field_dict: dict[str, Any] = {}
44
+ field_dict.update(self.additional_properties)
45
+ field_dict.update(
46
+ {
47
+ "id": id,
48
+ "hostname": hostname,
49
+ "rig_id": rig_id,
50
+ "synced_at": synced_at,
51
+ }
52
+ )
53
+
54
+ return field_dict
55
+
56
+ @classmethod
57
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
58
+ d = dict(src_dict)
59
+ id = d.pop("id")
60
+
61
+ hostname = d.pop("hostname")
62
+
63
+ rig_id = d.pop("rig_id")
64
+
65
+ synced_at = datetime.datetime.fromisoformat(d.pop("synced_at"))
66
+
67
+ instrument_response = cls(
68
+ id=id,
69
+ hostname=hostname,
70
+ rig_id=rig_id,
71
+ synced_at=synced_at,
72
+ )
73
+
74
+ instrument_response.additional_properties = d
75
+ return instrument_response
76
+
77
+ @property
78
+ def additional_keys(self) -> list[str]:
79
+ return list(self.additional_properties.keys())
80
+
81
+ def __getitem__(self, key: str) -> Any:
82
+ return self.additional_properties[key]
83
+
84
+ def __setitem__(self, key: str, value: Any) -> None:
85
+ self.additional_properties[key] = value
86
+
87
+ def __delitem__(self, key: str) -> None:
88
+ del self.additional_properties[key]
89
+
90
+ def __contains__(self, key: str) -> bool:
91
+ return key in self.additional_properties
@@ -0,0 +1,85 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, BinaryIO, TextIO, TYPE_CHECKING, Generator
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..types import UNSET, Unset
10
+
11
+ from ..models.kept_occurrence_reason import KeptOccurrenceReason
12
+ from typing import cast
13
+ import datetime
14
+
15
+
16
+ T = TypeVar("T", bound="KeptOccurrence")
17
+
18
+
19
+ @_attrs_define
20
+ class KeptOccurrence:
21
+ """An occurrence of the old series, on or after the split date, that the split leaves alone.
22
+
23
+ Attributes:
24
+ scheduled_acquisition_id (int): The occurrence.
25
+ occurrence_local_date (datetime.date): Calendar date, e.g. 2026-10-15.
26
+ reason (KeptOccurrenceReason): Why an occurrence of the previous series survives a split.
27
+ """
28
+
29
+ scheduled_acquisition_id: int
30
+ occurrence_local_date: datetime.date
31
+ reason: KeptOccurrenceReason
32
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
33
+
34
+ def to_dict(self) -> dict[str, Any]:
35
+ scheduled_acquisition_id = self.scheduled_acquisition_id
36
+
37
+ occurrence_local_date = self.occurrence_local_date.isoformat()
38
+
39
+ reason = self.reason.value
40
+
41
+ field_dict: dict[str, Any] = {}
42
+ field_dict.update(self.additional_properties)
43
+ field_dict.update(
44
+ {
45
+ "scheduled_acquisition_id": scheduled_acquisition_id,
46
+ "occurrence_local_date": occurrence_local_date,
47
+ "reason": reason,
48
+ }
49
+ )
50
+
51
+ return field_dict
52
+
53
+ @classmethod
54
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
55
+ d = dict(src_dict)
56
+ scheduled_acquisition_id = d.pop("scheduled_acquisition_id")
57
+
58
+ occurrence_local_date = datetime.date.fromisoformat(d.pop("occurrence_local_date"))
59
+
60
+ reason = KeptOccurrenceReason(d.pop("reason"))
61
+
62
+ kept_occurrence = cls(
63
+ scheduled_acquisition_id=scheduled_acquisition_id,
64
+ occurrence_local_date=occurrence_local_date,
65
+ reason=reason,
66
+ )
67
+
68
+ kept_occurrence.additional_properties = d
69
+ return kept_occurrence
70
+
71
+ @property
72
+ def additional_keys(self) -> list[str]:
73
+ return list(self.additional_properties.keys())
74
+
75
+ def __getitem__(self, key: str) -> Any:
76
+ return self.additional_properties[key]
77
+
78
+ def __setitem__(self, key: str, value: Any) -> None:
79
+ self.additional_properties[key] = value
80
+
81
+ def __delitem__(self, key: str) -> None:
82
+ del self.additional_properties[key]
83
+
84
+ def __contains__(self, key: str) -> bool:
85
+ return key in self.additional_properties
@@ -0,0 +1,10 @@
1
+ from enum import Enum
2
+
3
+
4
+ class KeptOccurrenceReason(str, Enum):
5
+ EDITED = "edited"
6
+ HAS_RUN = "has_run"
7
+ STARTED = "started"
8
+
9
+ def __str__(self) -> str:
10
+ return str(self.value)
@@ -0,0 +1,15 @@
1
+ from enum import Enum
2
+
3
+
4
+ class ListActiveAcquisitionsEffectiveStatusItem(str, Enum):
5
+ CANCELLED = "cancelled"
6
+ COMPLETED = "completed"
7
+ ERRORED = "errored"
8
+ FAILED = "failed"
9
+ ONGOING = "ongoing"
10
+ SCHEDULED = "scheduled"
11
+ SUCCEEDED = "succeeded"
12
+ TIMED_OUT = "timed_out"
13
+
14
+ def __str__(self) -> str:
15
+ return str(self.value)
@@ -0,0 +1,11 @@
1
+ from enum import Enum
2
+
3
+
4
+ class ListScheduledAcquisitionsPlanningStatus(str, Enum):
5
+ CANCELLED = "cancelled"
6
+ FAILED = "failed"
7
+ SCHEDULED = "scheduled"
8
+ SUCCEEDED = "succeeded"
9
+
10
+ def __str__(self) -> str:
11
+ return str(self.value)