apex-dispatch-api-client 0.7.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 (71) hide show
  1. apex_dispatch_api_client/__about__.py +15 -0
  2. apex_dispatch_api_client/__init__.py +8 -0
  3. apex_dispatch_api_client/api/__init__.py +1 -0
  4. apex_dispatch_api_client/api/default/__init__.py +1 -0
  5. apex_dispatch_api_client/api/default/health_health_get.py +85 -0
  6. apex_dispatch_api_client/api/unit_jobs/__init__.py +1 -0
  7. apex_dispatch_api_client/api/unit_jobs/create_sync_job_sync_jobs_post.py +178 -0
  8. apex_dispatch_api_client/api/unit_jobs/create_unit_job_unit_jobs_post.py +180 -0
  9. apex_dispatch_api_client/api/unit_jobs/delete_job_unit_jobs_job_id_delete.py +170 -0
  10. apex_dispatch_api_client/api/unit_jobs/get_job_params_params_post.py +179 -0
  11. apex_dispatch_api_client/api/unit_jobs/get_job_results_unit_jobs_job_id_results_get.py +186 -0
  12. apex_dispatch_api_client/api/unit_jobs/get_job_unit_jobs_job_id_get.py +172 -0
  13. apex_dispatch_api_client/api/upscale_tasks/__init__.py +1 -0
  14. apex_dispatch_api_client/api/upscale_tasks/create_upscale_task_upscale_tasks_post.py +180 -0
  15. apex_dispatch_api_client/api/upscale_tasks/get_jobs_status_jobs_status_get.py +192 -0
  16. apex_dispatch_api_client/api/upscale_tasks/get_upscale_task_upscale_tasks_task_id_get.py +172 -0
  17. apex_dispatch_api_client/api/upscale_tasks/split_in_tiles_tiles_post.py +184 -0
  18. apex_dispatch_api_client/client.py +282 -0
  19. apex_dispatch_api_client/errors.py +16 -0
  20. apex_dispatch_api_client/models/__init__.py +99 -0
  21. apex_dispatch_api_client/models/asset.py +155 -0
  22. apex_dispatch_api_client/models/base_job_request.py +104 -0
  23. apex_dispatch_api_client/models/base_job_request_parameters.py +47 -0
  24. apex_dispatch_api_client/models/collection.py +332 -0
  25. apex_dispatch_api_client/models/collection_assets_type_0.py +60 -0
  26. apex_dispatch_api_client/models/collection_summaries_type_0.py +109 -0
  27. apex_dispatch_api_client/models/collection_summaries_type_0_additional_property_type_2.py +47 -0
  28. apex_dispatch_api_client/models/error_response.py +138 -0
  29. apex_dispatch_api_client/models/error_response_details_type_0.py +47 -0
  30. apex_dispatch_api_client/models/extent.py +80 -0
  31. apex_dispatch_api_client/models/geometry_collection.py +247 -0
  32. apex_dispatch_api_client/models/grid_type_enum.py +9 -0
  33. apex_dispatch_api_client/models/http_validation_error.py +79 -0
  34. apex_dispatch_api_client/models/jobs_filter.py +9 -0
  35. apex_dispatch_api_client/models/jobs_status_response.py +97 -0
  36. apex_dispatch_api_client/models/line_string.py +163 -0
  37. apex_dispatch_api_client/models/link.py +123 -0
  38. apex_dispatch_api_client/models/mime_types.py +37 -0
  39. apex_dispatch_api_client/models/multi_line_string.py +180 -0
  40. apex_dispatch_api_client/models/multi_point.py +163 -0
  41. apex_dispatch_api_client/models/multi_polygon.py +191 -0
  42. apex_dispatch_api_client/models/output_format_enum.py +11 -0
  43. apex_dispatch_api_client/models/param_request.py +77 -0
  44. apex_dispatch_api_client/models/param_type_enum.py +16 -0
  45. apex_dispatch_api_client/models/parameter.py +108 -0
  46. apex_dispatch_api_client/models/parameter_dimension.py +69 -0
  47. apex_dispatch_api_client/models/point.py +151 -0
  48. apex_dispatch_api_client/models/polygon.py +180 -0
  49. apex_dispatch_api_client/models/process_type_enum.py +9 -0
  50. apex_dispatch_api_client/models/processing_job.py +130 -0
  51. apex_dispatch_api_client/models/processing_job_parameters.py +47 -0
  52. apex_dispatch_api_client/models/processing_job_summary.py +116 -0
  53. apex_dispatch_api_client/models/processing_job_summary_parameters.py +47 -0
  54. apex_dispatch_api_client/models/processing_status_enum.py +14 -0
  55. apex_dispatch_api_client/models/provider.py +135 -0
  56. apex_dispatch_api_client/models/range_.py +79 -0
  57. apex_dispatch_api_client/models/service_details.py +95 -0
  58. apex_dispatch_api_client/models/spatial_extent.py +96 -0
  59. apex_dispatch_api_client/models/tile_request.py +77 -0
  60. apex_dispatch_api_client/models/time_interval.py +99 -0
  61. apex_dispatch_api_client/models/upscaling_task.py +138 -0
  62. apex_dispatch_api_client/models/upscaling_task_request.py +118 -0
  63. apex_dispatch_api_client/models/upscaling_task_request_parameters.py +47 -0
  64. apex_dispatch_api_client/models/upscaling_task_summary.py +88 -0
  65. apex_dispatch_api_client/models/validation_error.py +123 -0
  66. apex_dispatch_api_client/models/validation_error_context.py +47 -0
  67. apex_dispatch_api_client/types.py +54 -0
  68. apex_dispatch_api_client-0.7.2.dist-info/METADATA +167 -0
  69. apex_dispatch_api_client-0.7.2.dist-info/RECORD +71 -0
  70. apex_dispatch_api_client-0.7.2.dist-info/WHEEL +4 -0
  71. apex_dispatch_api_client-0.7.2.dist-info/licenses/LICENSE +202 -0
@@ -0,0 +1,135 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
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
+ T = TypeVar("T", bound="Provider")
12
+
13
+
14
+ @_attrs_define
15
+ class Provider:
16
+ """https://github.com/radiantearth/stac-spec/blob/v1.0.0/collection-spec/collection-spec.md#provider-object
17
+
18
+ Attributes:
19
+ name (str):
20
+ description (None | str | Unset):
21
+ roles (list[str] | None | Unset):
22
+ url (None | str | Unset):
23
+ """
24
+
25
+ name: str
26
+ description: None | str | Unset = UNSET
27
+ roles: list[str] | None | Unset = UNSET
28
+ url: None | str | Unset = UNSET
29
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
30
+
31
+ def to_dict(self) -> dict[str, Any]:
32
+ name = self.name
33
+
34
+ description: None | str | Unset
35
+ if isinstance(self.description, Unset):
36
+ description = UNSET
37
+ else:
38
+ description = self.description
39
+
40
+ roles: list[str] | None | Unset
41
+ if isinstance(self.roles, Unset):
42
+ roles = UNSET
43
+ elif isinstance(self.roles, list):
44
+ roles = self.roles
45
+
46
+ else:
47
+ roles = self.roles
48
+
49
+ url: None | str | Unset
50
+ if isinstance(self.url, Unset):
51
+ url = UNSET
52
+ else:
53
+ url = self.url
54
+
55
+ field_dict: dict[str, Any] = {}
56
+ field_dict.update(self.additional_properties)
57
+ field_dict.update(
58
+ {
59
+ "name": name,
60
+ }
61
+ )
62
+ if description is not UNSET:
63
+ field_dict["description"] = description
64
+ if roles is not UNSET:
65
+ field_dict["roles"] = roles
66
+ if url is not UNSET:
67
+ field_dict["url"] = url
68
+
69
+ return field_dict
70
+
71
+ @classmethod
72
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
73
+ d = dict(src_dict)
74
+ name = d.pop("name")
75
+
76
+ def _parse_description(data: object) -> None | str | Unset:
77
+ if data is None:
78
+ return data
79
+ if isinstance(data, Unset):
80
+ return data
81
+ return cast(None | str | Unset, data)
82
+
83
+ description = _parse_description(d.pop("description", UNSET))
84
+
85
+ def _parse_roles(data: object) -> list[str] | None | Unset:
86
+ if data is None:
87
+ return data
88
+ if isinstance(data, Unset):
89
+ return data
90
+ try:
91
+ if not isinstance(data, list):
92
+ raise TypeError()
93
+ roles_type_0 = cast(list[str], data)
94
+
95
+ return roles_type_0
96
+ except (TypeError, ValueError, AttributeError, KeyError):
97
+ pass
98
+ return cast(list[str] | None | Unset, data)
99
+
100
+ roles = _parse_roles(d.pop("roles", UNSET))
101
+
102
+ def _parse_url(data: object) -> None | str | Unset:
103
+ if data is None:
104
+ return data
105
+ if isinstance(data, Unset):
106
+ return data
107
+ return cast(None | str | Unset, data)
108
+
109
+ url = _parse_url(d.pop("url", UNSET))
110
+
111
+ provider = cls(
112
+ name=name,
113
+ description=description,
114
+ roles=roles,
115
+ url=url,
116
+ )
117
+
118
+ provider.additional_properties = d
119
+ return provider
120
+
121
+ @property
122
+ def additional_keys(self) -> list[str]:
123
+ return list(self.additional_properties.keys())
124
+
125
+ def __getitem__(self, key: str) -> Any:
126
+ return self.additional_properties[key]
127
+
128
+ def __setitem__(self, key: str, value: Any) -> None:
129
+ self.additional_properties[key] = value
130
+
131
+ def __delitem__(self, key: str) -> None:
132
+ del self.additional_properties[key]
133
+
134
+ def __contains__(self, key: str) -> bool:
135
+ return key in self.additional_properties
@@ -0,0 +1,79 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="Range")
10
+
11
+
12
+ @_attrs_define
13
+ class Range:
14
+ """https://github.com/radiantearth/stac-spec/blob/v1.0.0/collection-spec/collection-spec.md#stats-object
15
+
16
+ Attributes:
17
+ minimum (float | int | str):
18
+ maximum (float | int | str):
19
+ """
20
+
21
+ minimum: float | int | str
22
+ maximum: float | int | str
23
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
24
+
25
+ def to_dict(self) -> dict[str, Any]:
26
+ minimum: float | int | str
27
+ minimum = self.minimum
28
+
29
+ maximum: float | int | str
30
+ maximum = self.maximum
31
+
32
+ field_dict: dict[str, Any] = {}
33
+ field_dict.update(self.additional_properties)
34
+ field_dict.update(
35
+ {
36
+ "minimum": minimum,
37
+ "maximum": maximum,
38
+ }
39
+ )
40
+
41
+ return field_dict
42
+
43
+ @classmethod
44
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
45
+ d = dict(src_dict)
46
+
47
+ def _parse_minimum(data: object) -> float | int | str:
48
+ return cast(float | int | str, data)
49
+
50
+ minimum = _parse_minimum(d.pop("minimum"))
51
+
52
+ def _parse_maximum(data: object) -> float | int | str:
53
+ return cast(float | int | str, data)
54
+
55
+ maximum = _parse_maximum(d.pop("maximum"))
56
+
57
+ range_ = cls(
58
+ minimum=minimum,
59
+ maximum=maximum,
60
+ )
61
+
62
+ range_.additional_properties = d
63
+ return range_
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
@@ -0,0 +1,95 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
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
+ T = TypeVar("T", bound="ServiceDetails")
12
+
13
+
14
+ @_attrs_define
15
+ class ServiceDetails:
16
+ """
17
+ Attributes:
18
+ endpoint (str): URL to the endpoint where the service is hosted. For openEO, this is the openEO backend. For OGC
19
+ API Processes, this field should include the base URL of the platform API
20
+ application (str): Path to the application that needs to be executed. For openEO this is referring to the public
21
+ URL of the UDP (JSON) to execute. For OGC API Processes, this field should include the URL path pointing to the
22
+ hosted service.
23
+ namespace (None | str | Unset): Namespace under the endpoint where the service is hosted.For openEO, this field
24
+ is not set.For OGC API Processes, this field should include the namespace IDrepresenting the service deployment
25
+ """
26
+
27
+ endpoint: str
28
+ application: str
29
+ namespace: None | str | Unset = UNSET
30
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
31
+
32
+ def to_dict(self) -> dict[str, Any]:
33
+ endpoint = self.endpoint
34
+
35
+ application = self.application
36
+
37
+ namespace: None | str | Unset
38
+ if isinstance(self.namespace, Unset):
39
+ namespace = UNSET
40
+ else:
41
+ namespace = self.namespace
42
+
43
+ field_dict: dict[str, Any] = {}
44
+ field_dict.update(self.additional_properties)
45
+ field_dict.update(
46
+ {
47
+ "endpoint": endpoint,
48
+ "application": application,
49
+ }
50
+ )
51
+ if namespace is not UNSET:
52
+ field_dict["namespace"] = namespace
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
+ endpoint = d.pop("endpoint")
60
+
61
+ application = d.pop("application")
62
+
63
+ def _parse_namespace(data: object) -> None | str | Unset:
64
+ if data is None:
65
+ return data
66
+ if isinstance(data, Unset):
67
+ return data
68
+ return cast(None | str | Unset, data)
69
+
70
+ namespace = _parse_namespace(d.pop("namespace", UNSET))
71
+
72
+ service_details = cls(
73
+ endpoint=endpoint,
74
+ application=application,
75
+ namespace=namespace,
76
+ )
77
+
78
+ service_details.additional_properties = d
79
+ return service_details
80
+
81
+ @property
82
+ def additional_keys(self) -> list[str]:
83
+ return list(self.additional_properties.keys())
84
+
85
+ def __getitem__(self, key: str) -> Any:
86
+ return self.additional_properties[key]
87
+
88
+ def __setitem__(self, key: str, value: Any) -> None:
89
+ self.additional_properties[key] = value
90
+
91
+ def __delitem__(self, key: str) -> None:
92
+ del self.additional_properties[key]
93
+
94
+ def __contains__(self, key: str) -> bool:
95
+ return key in self.additional_properties
@@ -0,0 +1,96 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import Any, TypeVar, cast
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ T = TypeVar("T", bound="SpatialExtent")
10
+
11
+
12
+ @_attrs_define
13
+ class SpatialExtent:
14
+ """https://github.com/radiantearth/stac-spec/blob/v1.0.0/collection-spec/collection-spec.md#spatial-extent-object
15
+
16
+ Attributes:
17
+ bbox (list[list[float | int]]):
18
+ """
19
+
20
+ bbox: list[list[float | int]]
21
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
22
+
23
+ def to_dict(self) -> dict[str, Any]:
24
+ bbox = []
25
+ for bbox_item_data in self.bbox:
26
+ bbox_item: list[float | int]
27
+ if isinstance(bbox_item_data, list):
28
+ bbox_item = []
29
+ for bbox_item_type_0_item_data in bbox_item_data:
30
+ bbox_item_type_0_item: float | int
31
+ bbox_item_type_0_item = bbox_item_type_0_item_data
32
+ bbox_item.append(bbox_item_type_0_item)
33
+
34
+ bbox.append(bbox_item)
35
+
36
+ field_dict: dict[str, Any] = {}
37
+ field_dict.update(self.additional_properties)
38
+ field_dict.update(
39
+ {
40
+ "bbox": bbox,
41
+ }
42
+ )
43
+
44
+ return field_dict
45
+
46
+ @classmethod
47
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
48
+ d = dict(src_dict)
49
+ bbox = []
50
+ _bbox = d.pop("bbox")
51
+ for bbox_item_data in _bbox:
52
+
53
+ def _parse_bbox_item(data: object) -> list[float | int]:
54
+ if not isinstance(data, list):
55
+ raise TypeError()
56
+ bbox_item_type_0 = []
57
+ _bbox_item_type_0 = data
58
+ for bbox_item_type_0_item_data in _bbox_item_type_0:
59
+
60
+ def _parse_bbox_item_type_0_item(data: object) -> float | int:
61
+ return cast(float | int, data)
62
+
63
+ bbox_item_type_0_item = _parse_bbox_item_type_0_item(
64
+ bbox_item_type_0_item_data
65
+ )
66
+
67
+ bbox_item_type_0.append(bbox_item_type_0_item)
68
+
69
+ return bbox_item_type_0
70
+
71
+ bbox_item = _parse_bbox_item(bbox_item_data)
72
+
73
+ bbox.append(bbox_item)
74
+
75
+ spatial_extent = cls(
76
+ bbox=bbox,
77
+ )
78
+
79
+ spatial_extent.additional_properties = d
80
+ return spatial_extent
81
+
82
+ @property
83
+ def additional_keys(self) -> list[str]:
84
+ return list(self.additional_properties.keys())
85
+
86
+ def __getitem__(self, key: str) -> Any:
87
+ return self.additional_properties[key]
88
+
89
+ def __setitem__(self, key: str, value: Any) -> None:
90
+ self.additional_properties[key] = value
91
+
92
+ def __delitem__(self, key: str) -> None:
93
+ del self.additional_properties[key]
94
+
95
+ def __contains__(self, key: str) -> bool:
96
+ return key in self.additional_properties
@@ -0,0 +1,77 @@
1
+ from __future__ import annotations
2
+
3
+ from collections.abc import Mapping
4
+ from typing import TYPE_CHECKING, Any, TypeVar
5
+
6
+ from attrs import define as _attrs_define
7
+ from attrs import field as _attrs_field
8
+
9
+ from ..models.grid_type_enum import GridTypeEnum
10
+
11
+ if TYPE_CHECKING:
12
+ from ..models.polygon import Polygon
13
+
14
+
15
+ T = TypeVar("T", bound="TileRequest")
16
+
17
+
18
+ @_attrs_define
19
+ class TileRequest:
20
+ """
21
+ Attributes:
22
+ aoi (Polygon): Polygon Model
23
+ grid (GridTypeEnum):
24
+ """
25
+
26
+ aoi: Polygon
27
+ grid: GridTypeEnum
28
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> dict[str, Any]:
31
+ aoi = self.aoi.to_dict()
32
+
33
+ grid = self.grid.value
34
+
35
+ field_dict: dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "aoi": aoi,
40
+ "grid": grid,
41
+ }
42
+ )
43
+
44
+ return field_dict
45
+
46
+ @classmethod
47
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
48
+ from ..models.polygon import Polygon
49
+
50
+ d = dict(src_dict)
51
+ aoi = Polygon.from_dict(d.pop("aoi"))
52
+
53
+ grid = GridTypeEnum(d.pop("grid"))
54
+
55
+ tile_request = cls(
56
+ aoi=aoi,
57
+ grid=grid,
58
+ )
59
+
60
+ tile_request.additional_properties = d
61
+ return tile_request
62
+
63
+ @property
64
+ def additional_keys(self) -> list[str]:
65
+ return list(self.additional_properties.keys())
66
+
67
+ def __getitem__(self, key: str) -> Any:
68
+ return self.additional_properties[key]
69
+
70
+ def __setitem__(self, key: str, value: Any) -> None:
71
+ self.additional_properties[key] = value
72
+
73
+ def __delitem__(self, key: str) -> None:
74
+ del self.additional_properties[key]
75
+
76
+ def __contains__(self, key: str) -> bool:
77
+ return key in self.additional_properties
@@ -0,0 +1,99 @@
1
+ from __future__ import annotations
2
+
3
+ import datetime
4
+ from collections.abc import Mapping
5
+ from typing import Any, TypeVar, cast
6
+
7
+ from attrs import define as _attrs_define
8
+ from attrs import field as _attrs_field
9
+ from dateutil.parser import isoparse
10
+
11
+ T = TypeVar("T", bound="TimeInterval")
12
+
13
+
14
+ @_attrs_define
15
+ class TimeInterval:
16
+ """https://github.com/radiantearth/stac-spec/blob/v1.0.0/collection-spec/collection-spec.md#temporal-extent-object
17
+
18
+ Attributes:
19
+ interval (list[list[datetime.datetime | None]]):
20
+ """
21
+
22
+ interval: list[list[datetime.datetime | None]]
23
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
24
+
25
+ def to_dict(self) -> dict[str, Any]:
26
+ interval = []
27
+ for interval_item_data in self.interval:
28
+ interval_item = []
29
+ for interval_item_item_data in interval_item_data:
30
+ interval_item_item: None | str
31
+ if isinstance(interval_item_item_data, datetime.datetime):
32
+ interval_item_item = interval_item_item_data.isoformat()
33
+ else:
34
+ interval_item_item = interval_item_item_data
35
+ interval_item.append(interval_item_item)
36
+
37
+ interval.append(interval_item)
38
+
39
+ field_dict: dict[str, Any] = {}
40
+ field_dict.update(self.additional_properties)
41
+ field_dict.update(
42
+ {
43
+ "interval": interval,
44
+ }
45
+ )
46
+
47
+ return field_dict
48
+
49
+ @classmethod
50
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
51
+ d = dict(src_dict)
52
+ interval = []
53
+ _interval = d.pop("interval")
54
+ for interval_item_data in _interval:
55
+ interval_item = []
56
+ _interval_item = interval_item_data
57
+ for interval_item_item_data in _interval_item:
58
+
59
+ def _parse_interval_item_item(data: object) -> datetime.datetime | None:
60
+ if data is None:
61
+ return data
62
+ try:
63
+ if not isinstance(data, str):
64
+ raise TypeError()
65
+ interval_item_item_type_0 = isoparse(data)
66
+
67
+ return interval_item_item_type_0
68
+ except (TypeError, ValueError, AttributeError, KeyError):
69
+ pass
70
+ return cast(datetime.datetime | None, data)
71
+
72
+ interval_item_item = _parse_interval_item_item(interval_item_item_data)
73
+
74
+ interval_item.append(interval_item_item)
75
+
76
+ interval.append(interval_item)
77
+
78
+ time_interval = cls(
79
+ interval=interval,
80
+ )
81
+
82
+ time_interval.additional_properties = d
83
+ return time_interval
84
+
85
+ @property
86
+ def additional_keys(self) -> list[str]:
87
+ return list(self.additional_properties.keys())
88
+
89
+ def __getitem__(self, key: str) -> Any:
90
+ return self.additional_properties[key]
91
+
92
+ def __setitem__(self, key: str, value: Any) -> None:
93
+ self.additional_properties[key] = value
94
+
95
+ def __delitem__(self, key: str) -> None:
96
+ del self.additional_properties[key]
97
+
98
+ def __contains__(self, key: str) -> bool:
99
+ return key in self.additional_properties