bytekit-sdk 0.3.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 (227) hide show
  1. bytekit/__init__.py +8 -0
  2. bytekit/api/__init__.py +1 -0
  3. bytekit/api/account/__init__.py +1 -0
  4. bytekit/api/account/get_account.py +157 -0
  5. bytekit/api/bulk/__init__.py +1 -0
  6. bytekit/api/bulk/create_bulk.py +204 -0
  7. bytekit/api/bulk/delete_bulk.py +177 -0
  8. bytekit/api/bulk/get_bulk.py +157 -0
  9. bytekit/api/bulk/list_bulk_screenshots.py +152 -0
  10. bytekit/api/fetch/__init__.py +1 -0
  11. bytekit/api/fetch/get_fetch.py +254 -0
  12. bytekit/api/fetch/post_fetch.py +178 -0
  13. bytekit/api/fetch_bulk/__init__.py +1 -0
  14. bytekit/api/fetch_bulk/create_fetch_bulk.py +180 -0
  15. bytekit/api/fetch_bulk/get_fetch_bulk.py +157 -0
  16. bytekit/api/monitors/__init__.py +1 -0
  17. bytekit/api/monitors/create_monitor.py +180 -0
  18. bytekit/api/monitors/delete_monitor.py +155 -0
  19. bytekit/api/monitors/get_monitor.py +157 -0
  20. bytekit/api/monitors/list_monitor_captures.py +188 -0
  21. bytekit/api/monitors/list_monitors.py +193 -0
  22. bytekit/api/monitors/update_monitor.py +191 -0
  23. bytekit/api/scrape/__init__.py +1 -0
  24. bytekit/api/scrape/create_scrape.py +197 -0
  25. bytekit/api/scrape/get_scrape.py +231 -0
  26. bytekit/api/scrape_bulk/__init__.py +1 -0
  27. bytekit/api/scrape_bulk/create_scrape_bulk.py +188 -0
  28. bytekit/api/scrape_bulk/get_scrape_bulk.py +157 -0
  29. bytekit/api/screenshots/__init__.py +1 -0
  30. bytekit/api/screenshots/create_screenshot.py +208 -0
  31. bytekit/api/screenshots/get_screenshot.py +177 -0
  32. bytekit/api/search/__init__.py +1 -0
  33. bytekit/api/search/create_search.py +225 -0
  34. bytekit/api/sitemap/__init__.py +1 -0
  35. bytekit/api/sitemap/create_sitemap.py +192 -0
  36. bytekit/api/sitemap/get_sitemap.py +157 -0
  37. bytekit/api/usage/__init__.py +1 -0
  38. bytekit/api/usage/get_usage.py +126 -0
  39. bytekit/api/usage/get_usage_by_endpoint.py +215 -0
  40. bytekit/api/usage/get_usage_daily.py +203 -0
  41. bytekit/api/webhooks/__init__.py +1 -0
  42. bytekit/api/webhooks/list_webhook_deliveries.py +214 -0
  43. bytekit/api/webhooks/retry_webhook_delivery.py +165 -0
  44. bytekit/client.py +418 -0
  45. bytekit/errors.py +18 -0
  46. bytekit/models/__init__.py +401 -0
  47. bytekit/models/account_bearer_response.py +207 -0
  48. bytekit/models/account_bearer_response_api_key.py +134 -0
  49. bytekit/models/account_bearer_response_api_key_environment.py +8 -0
  50. bytekit/models/account_bearer_response_auto_topup.py +83 -0
  51. bytekit/models/account_bearer_response_plan.py +150 -0
  52. bytekit/models/account_bearer_response_subscription.py +85 -0
  53. bytekit/models/account_bearer_response_subscription_plan.py +99 -0
  54. bytekit/models/account_bearer_response_subscription_status.py +10 -0
  55. bytekit/models/account_session_response.py +164 -0
  56. bytekit/models/account_session_response_notifications.py +51 -0
  57. bytekit/models/account_session_response_plan.py +150 -0
  58. bytekit/models/bandwidth_balance.py +91 -0
  59. bytekit/models/capture_response.py +216 -0
  60. bytekit/models/capture_response_outcome.py +10 -0
  61. bytekit/models/clip.py +83 -0
  62. bytekit/models/cookie.py +90 -0
  63. bytekit/models/create_bulk_body.py +155 -0
  64. bytekit/models/create_bulk_body_defaults.py +423 -0
  65. bytekit/models/create_bulk_body_defaults_device.py +9 -0
  66. bytekit/models/create_bulk_body_defaults_device_scale_factor_type_1.py +9 -0
  67. bytekit/models/create_bulk_body_defaults_device_scale_factor_type_2_type_1.py +9 -0
  68. bytekit/models/create_bulk_body_defaults_device_scale_factor_type_3_type_1.py +9 -0
  69. bytekit/models/create_bulk_body_defaults_formats_item.py +12 -0
  70. bytekit/models/create_bulk_body_defaults_type.py +9 -0
  71. bytekit/models/create_bulk_body_defaults_viewport_type_0.py +67 -0
  72. bytekit/models/create_bulk_body_defaults_wait_until.py +10 -0
  73. bytekit/models/create_bulk_body_items_item.py +380 -0
  74. bytekit/models/create_bulk_body_items_item_device.py +9 -0
  75. bytekit/models/create_bulk_body_items_item_formats_item.py +12 -0
  76. bytekit/models/create_bulk_body_items_item_scenario.py +10 -0
  77. bytekit/models/create_bulk_body_items_item_type.py +9 -0
  78. bytekit/models/create_bulk_body_items_item_viewport_type_0.py +67 -0
  79. bytekit/models/create_bulk_body_items_item_wait_until.py +10 -0
  80. bytekit/models/create_bulk_response_202.py +164 -0
  81. bytekit/models/create_bulk_response_202_status.py +10 -0
  82. bytekit/models/create_fetch_bulk_body.py +161 -0
  83. bytekit/models/create_fetch_bulk_body_defaults.py +91 -0
  84. bytekit/models/create_fetch_bulk_body_defaults_format.py +9 -0
  85. bytekit/models/create_fetch_bulk_body_metadata.py +44 -0
  86. bytekit/models/create_fetch_bulk_body_urls_item_type_1.py +102 -0
  87. bytekit/models/create_fetch_bulk_body_urls_item_type_1_format.py +9 -0
  88. bytekit/models/create_fetch_bulk_response_202.py +44 -0
  89. bytekit/models/create_scrape_bulk_body.py +179 -0
  90. bytekit/models/create_scrape_bulk_body_custom.py +52 -0
  91. bytekit/models/create_scrape_bulk_body_defaults.py +167 -0
  92. bytekit/models/create_scrape_bulk_body_defaults_formats_item.py +12 -0
  93. bytekit/models/create_scrape_bulk_body_defaults_headers.py +44 -0
  94. bytekit/models/create_scrape_bulk_body_items_item.py +226 -0
  95. bytekit/models/create_scrape_bulk_body_items_item_custom.py +50 -0
  96. bytekit/models/create_scrape_bulk_body_items_item_formats_item.py +12 -0
  97. bytekit/models/create_scrape_bulk_body_items_item_headers.py +44 -0
  98. bytekit/models/create_scrape_bulk_body_items_item_metadata.py +44 -0
  99. bytekit/models/create_scrape_bulk_response_202.py +166 -0
  100. bytekit/models/create_scrape_bulk_response_202_status.py +10 -0
  101. bytekit/models/create_search_body.py +140 -0
  102. bytekit/models/create_search_body_date_range.py +13 -0
  103. bytekit/models/create_search_body_type.py +10 -0
  104. bytekit/models/create_search_response_200.py +119 -0
  105. bytekit/models/create_search_response_200_results_item.py +161 -0
  106. bytekit/models/create_search_response_200_results_item_image.py +113 -0
  107. bytekit/models/create_search_response_502.py +46 -0
  108. bytekit/models/create_search_response_502_error.py +8 -0
  109. bytekit/models/credit_balance.py +91 -0
  110. bytekit/models/delete_bulk_response_200.py +164 -0
  111. bytekit/models/delete_bulk_response_200_status.py +11 -0
  112. bytekit/models/error.py +83 -0
  113. bytekit/models/error_error.py +100 -0
  114. bytekit/models/error_status.py +8 -0
  115. bytekit/models/fetch_request.py +276 -0
  116. bytekit/models/fetch_request_cache_ttl_type_1.py +8 -0
  117. bytekit/models/fetch_request_custom.py +48 -0
  118. bytekit/models/fetch_request_format.py +9 -0
  119. bytekit/models/fetch_request_markdown_images.py +11 -0
  120. bytekit/models/fetch_request_markdown_links.py +11 -0
  121. bytekit/models/fetch_request_markdown_mode.py +10 -0
  122. bytekit/models/get_bulk_response_200.py +164 -0
  123. bytekit/models/get_bulk_response_200_status.py +11 -0
  124. bytekit/models/get_fetch_bulk_response_200.py +44 -0
  125. bytekit/models/get_fetch_cache_ttl_type_1.py +8 -0
  126. bytekit/models/get_fetch_format.py +9 -0
  127. bytekit/models/get_scrape_bulk_response_200.py +164 -0
  128. bytekit/models/get_scrape_bulk_response_200_status.py +11 -0
  129. bytekit/models/get_usage_by_endpoint_response_200.py +114 -0
  130. bytekit/models/get_usage_by_endpoint_response_200_rows_item.py +90 -0
  131. bytekit/models/get_usage_by_endpoint_response_200_rows_item_endpoint.py +17 -0
  132. bytekit/models/get_usage_by_endpoint_response_200_totals.py +67 -0
  133. bytekit/models/get_usage_daily_response_200.py +97 -0
  134. bytekit/models/get_usage_daily_response_200_data_item.py +219 -0
  135. bytekit/models/get_usage_response_200.py +344 -0
  136. bytekit/models/get_usage_response_200_plan_type.py +10 -0
  137. bytekit/models/list_bulk_screenshots_response_200.py +44 -0
  138. bytekit/models/list_monitor_captures_response_200.py +101 -0
  139. bytekit/models/list_monitors_response_200.py +101 -0
  140. bytekit/models/list_monitors_status.py +12 -0
  141. bytekit/models/list_webhook_deliveries_response_200.py +101 -0
  142. bytekit/models/list_webhook_deliveries_status.py +11 -0
  143. bytekit/models/metadata.py +44 -0
  144. bytekit/models/monitor_create_request.py +219 -0
  145. bytekit/models/monitor_create_request_interval_type.py +11 -0
  146. bytekit/models/monitor_create_request_notify_on.py +9 -0
  147. bytekit/models/monitor_create_request_options.py +44 -0
  148. bytekit/models/monitor_create_request_scrape_options.py +44 -0
  149. bytekit/models/monitor_create_request_type.py +9 -0
  150. bytekit/models/monitor_create_request_webhook_headers.py +44 -0
  151. bytekit/models/monitor_create_response.py +423 -0
  152. bytekit/models/monitor_response.py +411 -0
  153. bytekit/models/monitor_response_interval_type.py +11 -0
  154. bytekit/models/monitor_response_metadata_type_0.py +44 -0
  155. bytekit/models/monitor_response_status.py +12 -0
  156. bytekit/models/monitor_response_type.py +9 -0
  157. bytekit/models/monitor_response_webhook_headers_type_0.py +44 -0
  158. bytekit/models/monitor_update_request.py +223 -0
  159. bytekit/models/monitor_update_request_interval_type.py +11 -0
  160. bytekit/models/monitor_update_request_notify_on.py +9 -0
  161. bytekit/models/monitor_update_request_options.py +44 -0
  162. bytekit/models/monitor_update_request_scrape_options.py +44 -0
  163. bytekit/models/monitor_update_request_status.py +9 -0
  164. bytekit/models/monitor_update_request_webhook_headers.py +44 -0
  165. bytekit/models/scrape_error_envelope.py +113 -0
  166. bytekit/models/scrape_error_envelope_error.py +93 -0
  167. bytekit/models/scrape_error_envelope_error_code.py +18 -0
  168. bytekit/models/scrape_error_envelope_schema_version.py +8 -0
  169. bytekit/models/scrape_error_envelope_status.py +8 -0
  170. bytekit/models/scrape_formats.py +183 -0
  171. bytekit/models/scrape_markdown_tokens.py +75 -0
  172. bytekit/models/scrape_metadata.py +262 -0
  173. bytekit/models/scrape_queued_envelope.py +124 -0
  174. bytekit/models/scrape_queued_envelope_schema_version.py +8 -0
  175. bytekit/models/scrape_queued_envelope_status.py +8 -0
  176. bytekit/models/scrape_request.py +485 -0
  177. bytekit/models/scrape_request_cache_ttl_type_1.py +8 -0
  178. bytekit/models/scrape_request_custom.py +48 -0
  179. bytekit/models/scrape_request_events_item.py +10 -0
  180. bytekit/models/scrape_request_formats_item.py +12 -0
  181. bytekit/models/scrape_request_headers.py +44 -0
  182. bytekit/models/scrape_request_markdown_images.py +11 -0
  183. bytekit/models/scrape_request_markdown_links.py +11 -0
  184. bytekit/models/scrape_request_markdown_mode.py +10 -0
  185. bytekit/models/scrape_request_token_encoding.py +9 -0
  186. bytekit/models/scrape_request_x_internal_scrape_path.py +8 -0
  187. bytekit/models/scrape_scored_image.py +128 -0
  188. bytekit/models/scrape_scored_link.py +94 -0
  189. bytekit/models/scrape_stats.py +75 -0
  190. bytekit/models/scrape_success_envelope.py +345 -0
  191. bytekit/models/scrape_success_envelope_cache.py +10 -0
  192. bytekit/models/scrape_success_envelope_custom.py +48 -0
  193. bytekit/models/scrape_success_envelope_schema_version.py +8 -0
  194. bytekit/models/scrape_success_envelope_status.py +8 -0
  195. bytekit/models/scrape_table.py +96 -0
  196. bytekit/models/scrape_table_kind.py +10 -0
  197. bytekit/models/scrape_warning.py +88 -0
  198. bytekit/models/scrape_warning_code.py +17 -0
  199. bytekit/models/screenshot_request.py +445 -0
  200. bytekit/models/screenshot_request_device.py +9 -0
  201. bytekit/models/screenshot_request_device_scale_factor_type_1.py +9 -0
  202. bytekit/models/screenshot_request_device_scale_factor_type_2_type_1.py +9 -0
  203. bytekit/models/screenshot_request_device_scale_factor_type_3_type_1.py +9 -0
  204. bytekit/models/screenshot_request_format.py +9 -0
  205. bytekit/models/screenshot_request_headers.py +44 -0
  206. bytekit/models/screenshot_request_wait_until.py +10 -0
  207. bytekit/models/screenshot_response.py +264 -0
  208. bytekit/models/screenshot_response_status.py +11 -0
  209. bytekit/models/sitemap_request.py +210 -0
  210. bytekit/models/sitemap_request_process_type_0.py +90 -0
  211. bytekit/models/sitemap_request_process_type_0_options.py +44 -0
  212. bytekit/models/sitemap_request_strategy.py +10 -0
  213. bytekit/models/sitemap_response.py +418 -0
  214. bytekit/models/sitemap_response_cache.py +10 -0
  215. bytekit/models/sitemap_response_metadata_type_0.py +44 -0
  216. bytekit/models/sitemap_response_process_type_0.py +44 -0
  217. bytekit/models/sitemap_response_sources_type_0.py +44 -0
  218. bytekit/models/sitemap_response_status.py +11 -0
  219. bytekit/models/viewport.py +67 -0
  220. bytekit/models/webhook_delivery_response.py +270 -0
  221. bytekit/models/webhook_delivery_response_event_type.py +14 -0
  222. bytekit/models/webhook_delivery_response_status.py +11 -0
  223. bytekit/py.typed +0 -0
  224. bytekit/types.py +54 -0
  225. bytekit_sdk-0.3.0.dist-info/METADATA +141 -0
  226. bytekit_sdk-0.3.0.dist-info/RECORD +227 -0
  227. bytekit_sdk-0.3.0.dist-info/WHEEL +4 -0
@@ -0,0 +1,134 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import (
4
+ Any,
5
+ TypeVar,
6
+ Union,
7
+ cast,
8
+ )
9
+
10
+ from attrs import define as _attrs_define
11
+ from attrs import field as _attrs_field
12
+ from dateutil.parser import isoparse
13
+
14
+ from ..models.account_bearer_response_api_key_environment import (
15
+ AccountBearerResponseApiKeyEnvironment,
16
+ )
17
+
18
+ T = TypeVar("T", bound="AccountBearerResponseApiKey")
19
+
20
+
21
+ @_attrs_define
22
+ class AccountBearerResponseApiKey:
23
+ """
24
+ Attributes:
25
+ id (str):
26
+ prefix (str):
27
+ label (Union[None, str]):
28
+ environment (AccountBearerResponseApiKeyEnvironment): Billing/key environment. Currently always `live` — the
29
+ only value the backend emits.
30
+ last_used_at (Union[None, datetime.datetime]):
31
+ created_at (datetime.datetime):
32
+ """
33
+
34
+ id: str
35
+ prefix: str
36
+ label: Union[None, str]
37
+ environment: AccountBearerResponseApiKeyEnvironment
38
+ last_used_at: Union[None, datetime.datetime]
39
+ created_at: datetime.datetime
40
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
41
+
42
+ def to_dict(self) -> dict[str, Any]:
43
+ id = self.id
44
+
45
+ prefix = self.prefix
46
+
47
+ label: Union[None, str]
48
+ label = self.label
49
+
50
+ environment = self.environment.value
51
+
52
+ last_used_at: Union[None, str]
53
+ if isinstance(self.last_used_at, datetime.datetime):
54
+ last_used_at = self.last_used_at.isoformat()
55
+ else:
56
+ last_used_at = self.last_used_at
57
+
58
+ created_at = self.created_at.isoformat()
59
+
60
+ field_dict: dict[str, Any] = {}
61
+ field_dict.update(self.additional_properties)
62
+ field_dict.update(
63
+ {
64
+ "id": id,
65
+ "prefix": prefix,
66
+ "label": label,
67
+ "environment": environment,
68
+ "last_used_at": last_used_at,
69
+ "created_at": created_at,
70
+ }
71
+ )
72
+
73
+ return field_dict
74
+
75
+ @classmethod
76
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
77
+ d = dict(src_dict)
78
+ id = d.pop("id")
79
+
80
+ prefix = d.pop("prefix")
81
+
82
+ def _parse_label(data: object) -> Union[None, str]:
83
+ if data is None:
84
+ return data
85
+ return cast(Union[None, str], data)
86
+
87
+ label = _parse_label(d.pop("label"))
88
+
89
+ environment = AccountBearerResponseApiKeyEnvironment(d.pop("environment"))
90
+
91
+ def _parse_last_used_at(data: object) -> Union[None, datetime.datetime]:
92
+ if data is None:
93
+ return data
94
+ try:
95
+ if not isinstance(data, str):
96
+ raise TypeError()
97
+ last_used_at_type_0 = isoparse(data)
98
+
99
+ return last_used_at_type_0
100
+ except: # noqa: E722
101
+ pass
102
+ return cast(Union[None, datetime.datetime], data)
103
+
104
+ last_used_at = _parse_last_used_at(d.pop("last_used_at"))
105
+
106
+ created_at = isoparse(d.pop("created_at"))
107
+
108
+ account_bearer_response_api_key = cls(
109
+ id=id,
110
+ prefix=prefix,
111
+ label=label,
112
+ environment=environment,
113
+ last_used_at=last_used_at,
114
+ created_at=created_at,
115
+ )
116
+
117
+ account_bearer_response_api_key.additional_properties = d
118
+ return account_bearer_response_api_key
119
+
120
+ @property
121
+ def additional_keys(self) -> list[str]:
122
+ return list(self.additional_properties.keys())
123
+
124
+ def __getitem__(self, key: str) -> Any:
125
+ return self.additional_properties[key]
126
+
127
+ def __setitem__(self, key: str, value: Any) -> None:
128
+ self.additional_properties[key] = value
129
+
130
+ def __delitem__(self, key: str) -> None:
131
+ del self.additional_properties[key]
132
+
133
+ def __contains__(self, key: str) -> bool:
134
+ return key in self.additional_properties
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+
4
+ class AccountBearerResponseApiKeyEnvironment(str, Enum):
5
+ LIVE = "live"
6
+
7
+ def __str__(self) -> str:
8
+ return str(self.value)
@@ -0,0 +1,83 @@
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="AccountBearerResponseAutoTopup")
8
+
9
+
10
+ @_attrs_define
11
+ class AccountBearerResponseAutoTopup:
12
+ """
13
+ Attributes:
14
+ enabled (bool):
15
+ threshold_bytes (int):
16
+ amount_bytes (int):
17
+ monthly_cap_cents (int):
18
+ """
19
+
20
+ enabled: bool
21
+ threshold_bytes: int
22
+ amount_bytes: int
23
+ monthly_cap_cents: int
24
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
25
+
26
+ def to_dict(self) -> dict[str, Any]:
27
+ enabled = self.enabled
28
+
29
+ threshold_bytes = self.threshold_bytes
30
+
31
+ amount_bytes = self.amount_bytes
32
+
33
+ monthly_cap_cents = self.monthly_cap_cents
34
+
35
+ field_dict: dict[str, Any] = {}
36
+ field_dict.update(self.additional_properties)
37
+ field_dict.update(
38
+ {
39
+ "enabled": enabled,
40
+ "threshold_bytes": threshold_bytes,
41
+ "amount_bytes": amount_bytes,
42
+ "monthly_cap_cents": monthly_cap_cents,
43
+ }
44
+ )
45
+
46
+ return field_dict
47
+
48
+ @classmethod
49
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
50
+ d = dict(src_dict)
51
+ enabled = d.pop("enabled")
52
+
53
+ threshold_bytes = d.pop("threshold_bytes")
54
+
55
+ amount_bytes = d.pop("amount_bytes")
56
+
57
+ monthly_cap_cents = d.pop("monthly_cap_cents")
58
+
59
+ account_bearer_response_auto_topup = cls(
60
+ enabled=enabled,
61
+ threshold_bytes=threshold_bytes,
62
+ amount_bytes=amount_bytes,
63
+ monthly_cap_cents=monthly_cap_cents,
64
+ )
65
+
66
+ account_bearer_response_auto_topup.additional_properties = d
67
+ return account_bearer_response_auto_topup
68
+
69
+ @property
70
+ def additional_keys(self) -> list[str]:
71
+ return list(self.additional_properties.keys())
72
+
73
+ def __getitem__(self, key: str) -> Any:
74
+ return self.additional_properties[key]
75
+
76
+ def __setitem__(self, key: str, value: Any) -> None:
77
+ self.additional_properties[key] = value
78
+
79
+ def __delitem__(self, key: str) -> None:
80
+ del self.additional_properties[key]
81
+
82
+ def __contains__(self, key: str) -> bool:
83
+ return key in self.additional_properties
@@ -0,0 +1,150 @@
1
+ from collections.abc import Mapping
2
+ from typing import (
3
+ Any,
4
+ TypeVar,
5
+ Union,
6
+ cast,
7
+ )
8
+
9
+ from attrs import define as _attrs_define
10
+ from attrs import field as _attrs_field
11
+
12
+ T = TypeVar("T", bound="AccountBearerResponsePlan")
13
+
14
+
15
+ @_attrs_define
16
+ class AccountBearerResponsePlan:
17
+ """
18
+ Attributes:
19
+ id (str):
20
+ slug (str):
21
+ name (str):
22
+ included_screenshots (int):
23
+ has_overage (bool):
24
+ overage_price_cents (Union[None, int]):
25
+ max_concurrency (int):
26
+ rate_limit_per_sec (int):
27
+ max_bulk_size (int):
28
+ max_monitors (int):
29
+ retention_days (int):
30
+ """
31
+
32
+ id: str
33
+ slug: str
34
+ name: str
35
+ included_screenshots: int
36
+ has_overage: bool
37
+ overage_price_cents: Union[None, int]
38
+ max_concurrency: int
39
+ rate_limit_per_sec: int
40
+ max_bulk_size: int
41
+ max_monitors: int
42
+ retention_days: int
43
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
44
+
45
+ def to_dict(self) -> dict[str, Any]:
46
+ id = self.id
47
+
48
+ slug = self.slug
49
+
50
+ name = self.name
51
+
52
+ included_screenshots = self.included_screenshots
53
+
54
+ has_overage = self.has_overage
55
+
56
+ overage_price_cents: Union[None, int]
57
+ overage_price_cents = self.overage_price_cents
58
+
59
+ max_concurrency = self.max_concurrency
60
+
61
+ rate_limit_per_sec = self.rate_limit_per_sec
62
+
63
+ max_bulk_size = self.max_bulk_size
64
+
65
+ max_monitors = self.max_monitors
66
+
67
+ retention_days = self.retention_days
68
+
69
+ field_dict: dict[str, Any] = {}
70
+ field_dict.update(self.additional_properties)
71
+ field_dict.update(
72
+ {
73
+ "id": id,
74
+ "slug": slug,
75
+ "name": name,
76
+ "included_screenshots": included_screenshots,
77
+ "has_overage": has_overage,
78
+ "overage_price_cents": overage_price_cents,
79
+ "max_concurrency": max_concurrency,
80
+ "rate_limit_per_sec": rate_limit_per_sec,
81
+ "max_bulk_size": max_bulk_size,
82
+ "max_monitors": max_monitors,
83
+ "retention_days": retention_days,
84
+ }
85
+ )
86
+
87
+ return field_dict
88
+
89
+ @classmethod
90
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
91
+ d = dict(src_dict)
92
+ id = d.pop("id")
93
+
94
+ slug = d.pop("slug")
95
+
96
+ name = d.pop("name")
97
+
98
+ included_screenshots = d.pop("included_screenshots")
99
+
100
+ has_overage = d.pop("has_overage")
101
+
102
+ def _parse_overage_price_cents(data: object) -> Union[None, int]:
103
+ if data is None:
104
+ return data
105
+ return cast(Union[None, int], data)
106
+
107
+ overage_price_cents = _parse_overage_price_cents(d.pop("overage_price_cents"))
108
+
109
+ max_concurrency = d.pop("max_concurrency")
110
+
111
+ rate_limit_per_sec = d.pop("rate_limit_per_sec")
112
+
113
+ max_bulk_size = d.pop("max_bulk_size")
114
+
115
+ max_monitors = d.pop("max_monitors")
116
+
117
+ retention_days = d.pop("retention_days")
118
+
119
+ account_bearer_response_plan = cls(
120
+ id=id,
121
+ slug=slug,
122
+ name=name,
123
+ included_screenshots=included_screenshots,
124
+ has_overage=has_overage,
125
+ overage_price_cents=overage_price_cents,
126
+ max_concurrency=max_concurrency,
127
+ rate_limit_per_sec=rate_limit_per_sec,
128
+ max_bulk_size=max_bulk_size,
129
+ max_monitors=max_monitors,
130
+ retention_days=retention_days,
131
+ )
132
+
133
+ account_bearer_response_plan.additional_properties = d
134
+ return account_bearer_response_plan
135
+
136
+ @property
137
+ def additional_keys(self) -> list[str]:
138
+ return list(self.additional_properties.keys())
139
+
140
+ def __getitem__(self, key: str) -> Any:
141
+ return self.additional_properties[key]
142
+
143
+ def __setitem__(self, key: str, value: Any) -> None:
144
+ self.additional_properties[key] = value
145
+
146
+ def __delitem__(self, key: str) -> None:
147
+ del self.additional_properties[key]
148
+
149
+ def __contains__(self, key: str) -> bool:
150
+ return key in self.additional_properties
@@ -0,0 +1,85 @@
1
+ from collections.abc import Mapping
2
+ from typing import (
3
+ TYPE_CHECKING,
4
+ Any,
5
+ TypeVar,
6
+ )
7
+
8
+ from attrs import define as _attrs_define
9
+ from attrs import field as _attrs_field
10
+
11
+ from ..models.account_bearer_response_subscription_status import (
12
+ AccountBearerResponseSubscriptionStatus,
13
+ )
14
+
15
+ if TYPE_CHECKING:
16
+ from ..models.account_bearer_response_subscription_plan import (
17
+ AccountBearerResponseSubscriptionPlan,
18
+ )
19
+
20
+
21
+ T = TypeVar("T", bound="AccountBearerResponseSubscription")
22
+
23
+
24
+ @_attrs_define
25
+ class AccountBearerResponseSubscription:
26
+ """
27
+ Attributes:
28
+ status (AccountBearerResponseSubscriptionStatus):
29
+ plan (AccountBearerResponseSubscriptionPlan):
30
+ """
31
+
32
+ status: AccountBearerResponseSubscriptionStatus
33
+ plan: "AccountBearerResponseSubscriptionPlan"
34
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
35
+
36
+ def to_dict(self) -> dict[str, Any]:
37
+ status = self.status.value
38
+
39
+ plan = self.plan.to_dict()
40
+
41
+ field_dict: dict[str, Any] = {}
42
+ field_dict.update(self.additional_properties)
43
+ field_dict.update(
44
+ {
45
+ "status": status,
46
+ "plan": plan,
47
+ }
48
+ )
49
+
50
+ return field_dict
51
+
52
+ @classmethod
53
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
54
+ from ..models.account_bearer_response_subscription_plan import (
55
+ AccountBearerResponseSubscriptionPlan,
56
+ )
57
+
58
+ d = dict(src_dict)
59
+ status = AccountBearerResponseSubscriptionStatus(d.pop("status"))
60
+
61
+ plan = AccountBearerResponseSubscriptionPlan.from_dict(d.pop("plan"))
62
+
63
+ account_bearer_response_subscription = cls(
64
+ status=status,
65
+ plan=plan,
66
+ )
67
+
68
+ account_bearer_response_subscription.additional_properties = d
69
+ return account_bearer_response_subscription
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,99 @@
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="AccountBearerResponseSubscriptionPlan")
8
+
9
+
10
+ @_attrs_define
11
+ class AccountBearerResponseSubscriptionPlan:
12
+ """
13
+ Attributes:
14
+ slug (str):
15
+ name (str):
16
+ included_bytes (int):
17
+ included_credits (int):
18
+ topup_price_per_mb_cents (float):
19
+ credit_topup_price_per_k_cents (float):
20
+ """
21
+
22
+ slug: str
23
+ name: str
24
+ included_bytes: int
25
+ included_credits: int
26
+ topup_price_per_mb_cents: float
27
+ credit_topup_price_per_k_cents: float
28
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
29
+
30
+ def to_dict(self) -> dict[str, Any]:
31
+ slug = self.slug
32
+
33
+ name = self.name
34
+
35
+ included_bytes = self.included_bytes
36
+
37
+ included_credits = self.included_credits
38
+
39
+ topup_price_per_mb_cents = self.topup_price_per_mb_cents
40
+
41
+ credit_topup_price_per_k_cents = self.credit_topup_price_per_k_cents
42
+
43
+ field_dict: dict[str, Any] = {}
44
+ field_dict.update(self.additional_properties)
45
+ field_dict.update(
46
+ {
47
+ "slug": slug,
48
+ "name": name,
49
+ "included_bytes": included_bytes,
50
+ "included_credits": included_credits,
51
+ "topup_price_per_mb_cents": topup_price_per_mb_cents,
52
+ "credit_topup_price_per_k_cents": credit_topup_price_per_k_cents,
53
+ }
54
+ )
55
+
56
+ return field_dict
57
+
58
+ @classmethod
59
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
60
+ d = dict(src_dict)
61
+ slug = d.pop("slug")
62
+
63
+ name = d.pop("name")
64
+
65
+ included_bytes = d.pop("included_bytes")
66
+
67
+ included_credits = d.pop("included_credits")
68
+
69
+ topup_price_per_mb_cents = d.pop("topup_price_per_mb_cents")
70
+
71
+ credit_topup_price_per_k_cents = d.pop("credit_topup_price_per_k_cents")
72
+
73
+ account_bearer_response_subscription_plan = cls(
74
+ slug=slug,
75
+ name=name,
76
+ included_bytes=included_bytes,
77
+ included_credits=included_credits,
78
+ topup_price_per_mb_cents=topup_price_per_mb_cents,
79
+ credit_topup_price_per_k_cents=credit_topup_price_per_k_cents,
80
+ )
81
+
82
+ account_bearer_response_subscription_plan.additional_properties = d
83
+ return account_bearer_response_subscription_plan
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
@@ -0,0 +1,10 @@
1
+ from enum import Enum
2
+
3
+
4
+ class AccountBearerResponseSubscriptionStatus(str, Enum):
5
+ ACTIVE = "active"
6
+ CANCELLING = "cancelling"
7
+ NONE = "none"
8
+
9
+ def __str__(self) -> str:
10
+ return str(self.value)