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,219 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import (
4
+ Any,
5
+ TypeVar,
6
+ Union,
7
+ )
8
+
9
+ from attrs import define as _attrs_define
10
+ from attrs import field as _attrs_field
11
+ from dateutil.parser import isoparse
12
+
13
+ from ..types import UNSET, Unset
14
+
15
+ T = TypeVar("T", bound="GetUsageDailyResponse200DataItem")
16
+
17
+
18
+ @_attrs_define
19
+ class GetUsageDailyResponse200DataItem:
20
+ """
21
+ Attributes:
22
+ date (datetime.date):
23
+ credits_single (int):
24
+ credits_bulk (int):
25
+ credits_monitor (int):
26
+ credits_search (int): Credits consumed by the search endpoint on this day.
27
+ credits_total (int):
28
+ bytes_total (int): Total bytes consumed on this day.
29
+ bytes_single (int): Bytes from single scrape requests.
30
+ bytes_bulk (int): Bytes from bulk requests.
31
+ bytes_scrape (int): Bytes from scrape requests.
32
+ bytes_monitor (int): Bytes from monitor requests.
33
+ bytes_screenshot (Union[Unset, int]): Bytes from screenshot requests.
34
+ bytes_recording (Union[Unset, int]): Bytes from recording requests.
35
+ bytes_scrape_md (Union[Unset, int]): Bytes from markdown-requested scrape requests.
36
+ bytes_fetch (Union[Unset, int]): Bytes from /v1/fetch requests.
37
+ bytes_fetch_md (Union[Unset, int]): Bytes from markdown-requested /v1/fetch requests.
38
+ bytes_crawl (Union[Unset, int]): Bytes from crawl (fetch) requests.
39
+ bytes_crawl_links (Union[Unset, int]): Bytes from crawl-links requests.
40
+ bytes_sitemap (Union[Unset, int]): Bytes from sitemap requests.
41
+ """
42
+
43
+ date: datetime.date
44
+ credits_single: int
45
+ credits_bulk: int
46
+ credits_monitor: int
47
+ credits_search: int
48
+ credits_total: int
49
+ bytes_total: int
50
+ bytes_single: int
51
+ bytes_bulk: int
52
+ bytes_scrape: int
53
+ bytes_monitor: int
54
+ bytes_screenshot: Union[Unset, int] = UNSET
55
+ bytes_recording: Union[Unset, int] = UNSET
56
+ bytes_scrape_md: Union[Unset, int] = UNSET
57
+ bytes_fetch: Union[Unset, int] = UNSET
58
+ bytes_fetch_md: Union[Unset, int] = UNSET
59
+ bytes_crawl: Union[Unset, int] = UNSET
60
+ bytes_crawl_links: Union[Unset, int] = UNSET
61
+ bytes_sitemap: Union[Unset, int] = UNSET
62
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
63
+
64
+ def to_dict(self) -> dict[str, Any]:
65
+ date = self.date.isoformat()
66
+
67
+ credits_single = self.credits_single
68
+
69
+ credits_bulk = self.credits_bulk
70
+
71
+ credits_monitor = self.credits_monitor
72
+
73
+ credits_search = self.credits_search
74
+
75
+ credits_total = self.credits_total
76
+
77
+ bytes_total = self.bytes_total
78
+
79
+ bytes_single = self.bytes_single
80
+
81
+ bytes_bulk = self.bytes_bulk
82
+
83
+ bytes_scrape = self.bytes_scrape
84
+
85
+ bytes_monitor = self.bytes_monitor
86
+
87
+ bytes_screenshot = self.bytes_screenshot
88
+
89
+ bytes_recording = self.bytes_recording
90
+
91
+ bytes_scrape_md = self.bytes_scrape_md
92
+
93
+ bytes_fetch = self.bytes_fetch
94
+
95
+ bytes_fetch_md = self.bytes_fetch_md
96
+
97
+ bytes_crawl = self.bytes_crawl
98
+
99
+ bytes_crawl_links = self.bytes_crawl_links
100
+
101
+ bytes_sitemap = self.bytes_sitemap
102
+
103
+ field_dict: dict[str, Any] = {}
104
+ field_dict.update(self.additional_properties)
105
+ field_dict.update(
106
+ {
107
+ "date": date,
108
+ "credits_single": credits_single,
109
+ "credits_bulk": credits_bulk,
110
+ "credits_monitor": credits_monitor,
111
+ "credits_search": credits_search,
112
+ "credits_total": credits_total,
113
+ "bytes_total": bytes_total,
114
+ "bytes_single": bytes_single,
115
+ "bytes_bulk": bytes_bulk,
116
+ "bytes_scrape": bytes_scrape,
117
+ "bytes_monitor": bytes_monitor,
118
+ }
119
+ )
120
+ if bytes_screenshot is not UNSET:
121
+ field_dict["bytes_screenshot"] = bytes_screenshot
122
+ if bytes_recording is not UNSET:
123
+ field_dict["bytes_recording"] = bytes_recording
124
+ if bytes_scrape_md is not UNSET:
125
+ field_dict["bytes_scrape_md"] = bytes_scrape_md
126
+ if bytes_fetch is not UNSET:
127
+ field_dict["bytes_fetch"] = bytes_fetch
128
+ if bytes_fetch_md is not UNSET:
129
+ field_dict["bytes_fetch_md"] = bytes_fetch_md
130
+ if bytes_crawl is not UNSET:
131
+ field_dict["bytes_crawl"] = bytes_crawl
132
+ if bytes_crawl_links is not UNSET:
133
+ field_dict["bytes_crawl_links"] = bytes_crawl_links
134
+ if bytes_sitemap is not UNSET:
135
+ field_dict["bytes_sitemap"] = bytes_sitemap
136
+
137
+ return field_dict
138
+
139
+ @classmethod
140
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
141
+ d = dict(src_dict)
142
+ date = isoparse(d.pop("date")).date()
143
+
144
+ credits_single = d.pop("credits_single")
145
+
146
+ credits_bulk = d.pop("credits_bulk")
147
+
148
+ credits_monitor = d.pop("credits_monitor")
149
+
150
+ credits_search = d.pop("credits_search")
151
+
152
+ credits_total = d.pop("credits_total")
153
+
154
+ bytes_total = d.pop("bytes_total")
155
+
156
+ bytes_single = d.pop("bytes_single")
157
+
158
+ bytes_bulk = d.pop("bytes_bulk")
159
+
160
+ bytes_scrape = d.pop("bytes_scrape")
161
+
162
+ bytes_monitor = d.pop("bytes_monitor")
163
+
164
+ bytes_screenshot = d.pop("bytes_screenshot", UNSET)
165
+
166
+ bytes_recording = d.pop("bytes_recording", UNSET)
167
+
168
+ bytes_scrape_md = d.pop("bytes_scrape_md", UNSET)
169
+
170
+ bytes_fetch = d.pop("bytes_fetch", UNSET)
171
+
172
+ bytes_fetch_md = d.pop("bytes_fetch_md", UNSET)
173
+
174
+ bytes_crawl = d.pop("bytes_crawl", UNSET)
175
+
176
+ bytes_crawl_links = d.pop("bytes_crawl_links", UNSET)
177
+
178
+ bytes_sitemap = d.pop("bytes_sitemap", UNSET)
179
+
180
+ get_usage_daily_response_200_data_item = cls(
181
+ date=date,
182
+ credits_single=credits_single,
183
+ credits_bulk=credits_bulk,
184
+ credits_monitor=credits_monitor,
185
+ credits_search=credits_search,
186
+ credits_total=credits_total,
187
+ bytes_total=bytes_total,
188
+ bytes_single=bytes_single,
189
+ bytes_bulk=bytes_bulk,
190
+ bytes_scrape=bytes_scrape,
191
+ bytes_monitor=bytes_monitor,
192
+ bytes_screenshot=bytes_screenshot,
193
+ bytes_recording=bytes_recording,
194
+ bytes_scrape_md=bytes_scrape_md,
195
+ bytes_fetch=bytes_fetch,
196
+ bytes_fetch_md=bytes_fetch_md,
197
+ bytes_crawl=bytes_crawl,
198
+ bytes_crawl_links=bytes_crawl_links,
199
+ bytes_sitemap=bytes_sitemap,
200
+ )
201
+
202
+ get_usage_daily_response_200_data_item.additional_properties = d
203
+ return get_usage_daily_response_200_data_item
204
+
205
+ @property
206
+ def additional_keys(self) -> list[str]:
207
+ return list(self.additional_properties.keys())
208
+
209
+ def __getitem__(self, key: str) -> Any:
210
+ return self.additional_properties[key]
211
+
212
+ def __setitem__(self, key: str, value: Any) -> None:
213
+ self.additional_properties[key] = value
214
+
215
+ def __delitem__(self, key: str) -> None:
216
+ del self.additional_properties[key]
217
+
218
+ def __contains__(self, key: str) -> bool:
219
+ return key in self.additional_properties
@@ -0,0 +1,344 @@
1
+ import datetime
2
+ from collections.abc import Mapping
3
+ from typing import (
4
+ TYPE_CHECKING,
5
+ Any,
6
+ TypeVar,
7
+ Union,
8
+ cast,
9
+ )
10
+
11
+ from attrs import define as _attrs_define
12
+ from attrs import field as _attrs_field
13
+ from dateutil.parser import isoparse
14
+
15
+ from ..models.get_usage_response_200_plan_type import GetUsageResponse200PlanType
16
+ from ..types import UNSET, Unset
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.bandwidth_balance import BandwidthBalance
20
+ from ..models.credit_balance import CreditBalance
21
+
22
+
23
+ T = TypeVar("T", bound="GetUsageResponse200")
24
+
25
+
26
+ @_attrs_define
27
+ class GetUsageResponse200:
28
+ """
29
+ Attributes:
30
+ period_start (datetime.datetime):
31
+ period_end (datetime.datetime):
32
+ credits_used (int):
33
+ credits_single (int):
34
+ credits_bulk (int):
35
+ credits_monitor (int):
36
+ credits_search (int): Credits consumed by the search endpoint this billing period. Reported as a distinct line
37
+ item, not folded into other per-source credit counts.
38
+ credits_limit (int):
39
+ credits_remaining (int):
40
+ has_overage (bool):
41
+ overage_credits (int):
42
+ plan_name (str): Human-readable plan name (e.g. "Starter", "Pro").
43
+ plan_price_cents (int): Plan base price in cents.
44
+ plan_type (GetUsageResponse200PlanType): Derived plan category. "payg" for pay-as-you-go plans, "free" for the
45
+ free tier, "subscription" for all others.
46
+ period_days_elapsed (int): Days elapsed since period_start.
47
+ bytes_used (int): Present in dual/bytes billing mode.
48
+ bytes_single (int):
49
+ bytes_bulk (int):
50
+ bytes_scrape (int):
51
+ bytes_monitor (int):
52
+ bytes_limit (int):
53
+ bytes_remaining (int):
54
+ rollover_bytes (int):
55
+ topup_bytes (int):
56
+ request_count (int): Total API requests in the current billing period.
57
+ request_count_previous_period (Union[None, int]): Total API requests in the previous billing period. Null when
58
+ no prior period exists (first billing period).
59
+ playground_api_key_id (Union[None, str]): The account's playground API key id (ak_-prefixed), or null if none
60
+ exists. Playground traffic (requests issued from the dashboard playground) is billed into the account totals
61
+ under this key, but the key is hidden from the key-management list. The usage dashboard uses this id to offer a
62
+ "Playground" filter so per-key usage reconciles with the overall total.
63
+ bandwidth (BandwidthBalance):
64
+ credits_ (CreditBalance):
65
+ topup_spent_cents (Union[Unset, int]): Total top-up spend in cents for this billing period. Present only in
66
+ dual/bytes billing mode.
67
+ topup_balance_bytes (Union[Unset, int]): Remaining top-up bytes: max(0, topup_bytes − max(0, bytes_used −
68
+ included_bytes − rollover_bytes)). Present only in dual/bytes billing mode.
69
+ """
70
+
71
+ period_start: datetime.datetime
72
+ period_end: datetime.datetime
73
+ credits_used: int
74
+ credits_single: int
75
+ credits_bulk: int
76
+ credits_monitor: int
77
+ credits_search: int
78
+ credits_limit: int
79
+ credits_remaining: int
80
+ has_overage: bool
81
+ overage_credits: int
82
+ plan_name: str
83
+ plan_price_cents: int
84
+ plan_type: GetUsageResponse200PlanType
85
+ period_days_elapsed: int
86
+ bytes_used: int
87
+ bytes_single: int
88
+ bytes_bulk: int
89
+ bytes_scrape: int
90
+ bytes_monitor: int
91
+ bytes_limit: int
92
+ bytes_remaining: int
93
+ rollover_bytes: int
94
+ topup_bytes: int
95
+ request_count: int
96
+ request_count_previous_period: Union[None, int]
97
+ playground_api_key_id: Union[None, str]
98
+ bandwidth: "BandwidthBalance"
99
+ credits_: "CreditBalance"
100
+ topup_spent_cents: Union[Unset, int] = UNSET
101
+ topup_balance_bytes: Union[Unset, int] = UNSET
102
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
103
+
104
+ def to_dict(self) -> dict[str, Any]:
105
+ period_start = self.period_start.isoformat()
106
+
107
+ period_end = self.period_end.isoformat()
108
+
109
+ credits_used = self.credits_used
110
+
111
+ credits_single = self.credits_single
112
+
113
+ credits_bulk = self.credits_bulk
114
+
115
+ credits_monitor = self.credits_monitor
116
+
117
+ credits_search = self.credits_search
118
+
119
+ credits_limit = self.credits_limit
120
+
121
+ credits_remaining = self.credits_remaining
122
+
123
+ has_overage = self.has_overage
124
+
125
+ overage_credits = self.overage_credits
126
+
127
+ plan_name = self.plan_name
128
+
129
+ plan_price_cents = self.plan_price_cents
130
+
131
+ plan_type = self.plan_type.value
132
+
133
+ period_days_elapsed = self.period_days_elapsed
134
+
135
+ bytes_used = self.bytes_used
136
+
137
+ bytes_single = self.bytes_single
138
+
139
+ bytes_bulk = self.bytes_bulk
140
+
141
+ bytes_scrape = self.bytes_scrape
142
+
143
+ bytes_monitor = self.bytes_monitor
144
+
145
+ bytes_limit = self.bytes_limit
146
+
147
+ bytes_remaining = self.bytes_remaining
148
+
149
+ rollover_bytes = self.rollover_bytes
150
+
151
+ topup_bytes = self.topup_bytes
152
+
153
+ request_count = self.request_count
154
+
155
+ request_count_previous_period: Union[None, int]
156
+ request_count_previous_period = self.request_count_previous_period
157
+
158
+ playground_api_key_id: Union[None, str]
159
+ playground_api_key_id = self.playground_api_key_id
160
+
161
+ bandwidth = self.bandwidth.to_dict()
162
+
163
+ credits_ = self.credits_.to_dict()
164
+
165
+ topup_spent_cents = self.topup_spent_cents
166
+
167
+ topup_balance_bytes = self.topup_balance_bytes
168
+
169
+ field_dict: dict[str, Any] = {}
170
+ field_dict.update(self.additional_properties)
171
+ field_dict.update(
172
+ {
173
+ "period_start": period_start,
174
+ "period_end": period_end,
175
+ "credits_used": credits_used,
176
+ "credits_single": credits_single,
177
+ "credits_bulk": credits_bulk,
178
+ "credits_monitor": credits_monitor,
179
+ "credits_search": credits_search,
180
+ "credits_limit": credits_limit,
181
+ "credits_remaining": credits_remaining,
182
+ "has_overage": has_overage,
183
+ "overage_credits": overage_credits,
184
+ "plan_name": plan_name,
185
+ "plan_price_cents": plan_price_cents,
186
+ "plan_type": plan_type,
187
+ "period_days_elapsed": period_days_elapsed,
188
+ "bytes_used": bytes_used,
189
+ "bytes_single": bytes_single,
190
+ "bytes_bulk": bytes_bulk,
191
+ "bytes_scrape": bytes_scrape,
192
+ "bytes_monitor": bytes_monitor,
193
+ "bytes_limit": bytes_limit,
194
+ "bytes_remaining": bytes_remaining,
195
+ "rollover_bytes": rollover_bytes,
196
+ "topup_bytes": topup_bytes,
197
+ "request_count": request_count,
198
+ "request_count_previous_period": request_count_previous_period,
199
+ "playground_api_key_id": playground_api_key_id,
200
+ "bandwidth": bandwidth,
201
+ "credits": credits_,
202
+ }
203
+ )
204
+ if topup_spent_cents is not UNSET:
205
+ field_dict["topup_spent_cents"] = topup_spent_cents
206
+ if topup_balance_bytes is not UNSET:
207
+ field_dict["topup_balance_bytes"] = topup_balance_bytes
208
+
209
+ return field_dict
210
+
211
+ @classmethod
212
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
213
+ from ..models.bandwidth_balance import BandwidthBalance
214
+ from ..models.credit_balance import CreditBalance
215
+
216
+ d = dict(src_dict)
217
+ period_start = isoparse(d.pop("period_start"))
218
+
219
+ period_end = isoparse(d.pop("period_end"))
220
+
221
+ credits_used = d.pop("credits_used")
222
+
223
+ credits_single = d.pop("credits_single")
224
+
225
+ credits_bulk = d.pop("credits_bulk")
226
+
227
+ credits_monitor = d.pop("credits_monitor")
228
+
229
+ credits_search = d.pop("credits_search")
230
+
231
+ credits_limit = d.pop("credits_limit")
232
+
233
+ credits_remaining = d.pop("credits_remaining")
234
+
235
+ has_overage = d.pop("has_overage")
236
+
237
+ overage_credits = d.pop("overage_credits")
238
+
239
+ plan_name = d.pop("plan_name")
240
+
241
+ plan_price_cents = d.pop("plan_price_cents")
242
+
243
+ plan_type = GetUsageResponse200PlanType(d.pop("plan_type"))
244
+
245
+ period_days_elapsed = d.pop("period_days_elapsed")
246
+
247
+ bytes_used = d.pop("bytes_used")
248
+
249
+ bytes_single = d.pop("bytes_single")
250
+
251
+ bytes_bulk = d.pop("bytes_bulk")
252
+
253
+ bytes_scrape = d.pop("bytes_scrape")
254
+
255
+ bytes_monitor = d.pop("bytes_monitor")
256
+
257
+ bytes_limit = d.pop("bytes_limit")
258
+
259
+ bytes_remaining = d.pop("bytes_remaining")
260
+
261
+ rollover_bytes = d.pop("rollover_bytes")
262
+
263
+ topup_bytes = d.pop("topup_bytes")
264
+
265
+ request_count = d.pop("request_count")
266
+
267
+ def _parse_request_count_previous_period(data: object) -> Union[None, int]:
268
+ if data is None:
269
+ return data
270
+ return cast(Union[None, int], data)
271
+
272
+ request_count_previous_period = _parse_request_count_previous_period(
273
+ d.pop("request_count_previous_period")
274
+ )
275
+
276
+ def _parse_playground_api_key_id(data: object) -> Union[None, str]:
277
+ if data is None:
278
+ return data
279
+ return cast(Union[None, str], data)
280
+
281
+ playground_api_key_id = _parse_playground_api_key_id(
282
+ d.pop("playground_api_key_id")
283
+ )
284
+
285
+ bandwidth = BandwidthBalance.from_dict(d.pop("bandwidth"))
286
+
287
+ credits_ = CreditBalance.from_dict(d.pop("credits"))
288
+
289
+ topup_spent_cents = d.pop("topup_spent_cents", UNSET)
290
+
291
+ topup_balance_bytes = d.pop("topup_balance_bytes", UNSET)
292
+
293
+ get_usage_response_200 = cls(
294
+ period_start=period_start,
295
+ period_end=period_end,
296
+ credits_used=credits_used,
297
+ credits_single=credits_single,
298
+ credits_bulk=credits_bulk,
299
+ credits_monitor=credits_monitor,
300
+ credits_search=credits_search,
301
+ credits_limit=credits_limit,
302
+ credits_remaining=credits_remaining,
303
+ has_overage=has_overage,
304
+ overage_credits=overage_credits,
305
+ plan_name=plan_name,
306
+ plan_price_cents=plan_price_cents,
307
+ plan_type=plan_type,
308
+ period_days_elapsed=period_days_elapsed,
309
+ bytes_used=bytes_used,
310
+ bytes_single=bytes_single,
311
+ bytes_bulk=bytes_bulk,
312
+ bytes_scrape=bytes_scrape,
313
+ bytes_monitor=bytes_monitor,
314
+ bytes_limit=bytes_limit,
315
+ bytes_remaining=bytes_remaining,
316
+ rollover_bytes=rollover_bytes,
317
+ topup_bytes=topup_bytes,
318
+ request_count=request_count,
319
+ request_count_previous_period=request_count_previous_period,
320
+ playground_api_key_id=playground_api_key_id,
321
+ bandwidth=bandwidth,
322
+ credits_=credits_,
323
+ topup_spent_cents=topup_spent_cents,
324
+ topup_balance_bytes=topup_balance_bytes,
325
+ )
326
+
327
+ get_usage_response_200.additional_properties = d
328
+ return get_usage_response_200
329
+
330
+ @property
331
+ def additional_keys(self) -> list[str]:
332
+ return list(self.additional_properties.keys())
333
+
334
+ def __getitem__(self, key: str) -> Any:
335
+ return self.additional_properties[key]
336
+
337
+ def __setitem__(self, key: str, value: Any) -> None:
338
+ self.additional_properties[key] = value
339
+
340
+ def __delitem__(self, key: str) -> None:
341
+ del self.additional_properties[key]
342
+
343
+ def __contains__(self, key: str) -> bool:
344
+ return key in self.additional_properties
@@ -0,0 +1,10 @@
1
+ from enum import Enum
2
+
3
+
4
+ class GetUsageResponse200PlanType(str, Enum):
5
+ FREE = "free"
6
+ PAYG = "payg"
7
+ SUBSCRIPTION = "subscription"
8
+
9
+ def __str__(self) -> str:
10
+ return str(self.value)
@@ -0,0 +1,44 @@
1
+ from collections.abc import Mapping
2
+ from typing import Any, TypeVar
3
+
4
+ from attrs import define as _attrs_define
5
+ from attrs import field as _attrs_field
6
+
7
+ T = TypeVar("T", bound="ListBulkScreenshotsResponse200")
8
+
9
+
10
+ @_attrs_define
11
+ class ListBulkScreenshotsResponse200:
12
+ """ """
13
+
14
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
15
+
16
+ def to_dict(self) -> dict[str, Any]:
17
+ field_dict: dict[str, Any] = {}
18
+ field_dict.update(self.additional_properties)
19
+
20
+ return field_dict
21
+
22
+ @classmethod
23
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
24
+ d = dict(src_dict)
25
+ list_bulk_screenshots_response_200 = cls()
26
+
27
+ list_bulk_screenshots_response_200.additional_properties = d
28
+ return list_bulk_screenshots_response_200
29
+
30
+ @property
31
+ def additional_keys(self) -> list[str]:
32
+ return list(self.additional_properties.keys())
33
+
34
+ def __getitem__(self, key: str) -> Any:
35
+ return self.additional_properties[key]
36
+
37
+ def __setitem__(self, key: str, value: Any) -> None:
38
+ self.additional_properties[key] = value
39
+
40
+ def __delitem__(self, key: str) -> None:
41
+ del self.additional_properties[key]
42
+
43
+ def __contains__(self, key: str) -> bool:
44
+ return key in self.additional_properties