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,223 @@
1
+ from collections.abc import Mapping
2
+ from typing import (
3
+ TYPE_CHECKING,
4
+ Any,
5
+ TypeVar,
6
+ Union,
7
+ )
8
+
9
+ from attrs import define as _attrs_define
10
+
11
+ from ..models.monitor_update_request_interval_type import (
12
+ MonitorUpdateRequestIntervalType,
13
+ )
14
+ from ..models.monitor_update_request_notify_on import MonitorUpdateRequestNotifyOn
15
+ from ..models.monitor_update_request_status import MonitorUpdateRequestStatus
16
+ from ..types import UNSET, Unset
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.metadata import Metadata
20
+ from ..models.monitor_update_request_options import MonitorUpdateRequestOptions
21
+ from ..models.monitor_update_request_scrape_options import (
22
+ MonitorUpdateRequestScrapeOptions,
23
+ )
24
+ from ..models.monitor_update_request_webhook_headers import (
25
+ MonitorUpdateRequestWebhookHeaders,
26
+ )
27
+
28
+
29
+ T = TypeVar("T", bound="MonitorUpdateRequest")
30
+
31
+
32
+ @_attrs_define
33
+ class MonitorUpdateRequest:
34
+ """
35
+ Attributes:
36
+ url (Union[Unset, str]):
37
+ interval_type (Union[Unset, MonitorUpdateRequestIntervalType]):
38
+ cron_expression (Union[Unset, str]):
39
+ change_threshold (Union[Unset, float]):
40
+ notify_on (Union[Unset, MonitorUpdateRequestNotifyOn]):
41
+ webhook_url (Union[Unset, str]): Webhook endpoint URL (HTTPS only; http:// rejected with 400 invalid_url, reason
42
+ scheme_unsupported)
43
+ webhook_secret (Union[Unset, str]):
44
+ webhook_headers (Union[Unset, MonitorUpdateRequestWebhookHeaders]):
45
+ status (Union[Unset, MonitorUpdateRequestStatus]):
46
+ options (Union[Unset, MonitorUpdateRequestOptions]):
47
+ scrape_options (Union[Unset, MonitorUpdateRequestScrapeOptions]):
48
+ metadata (Union[Unset, Metadata]): Arbitrary key-value metadata. Max 4096 bytes when JSON-serialized.
49
+ """
50
+
51
+ url: Union[Unset, str] = UNSET
52
+ interval_type: Union[Unset, MonitorUpdateRequestIntervalType] = UNSET
53
+ cron_expression: Union[Unset, str] = UNSET
54
+ change_threshold: Union[Unset, float] = UNSET
55
+ notify_on: Union[Unset, MonitorUpdateRequestNotifyOn] = UNSET
56
+ webhook_url: Union[Unset, str] = UNSET
57
+ webhook_secret: Union[Unset, str] = UNSET
58
+ webhook_headers: Union[Unset, "MonitorUpdateRequestWebhookHeaders"] = UNSET
59
+ status: Union[Unset, MonitorUpdateRequestStatus] = UNSET
60
+ options: Union[Unset, "MonitorUpdateRequestOptions"] = UNSET
61
+ scrape_options: Union[Unset, "MonitorUpdateRequestScrapeOptions"] = UNSET
62
+ metadata: Union[Unset, "Metadata"] = UNSET
63
+
64
+ def to_dict(self) -> dict[str, Any]:
65
+ url = self.url
66
+
67
+ interval_type: Union[Unset, str] = UNSET
68
+ if not isinstance(self.interval_type, Unset):
69
+ interval_type = self.interval_type.value
70
+
71
+ cron_expression = self.cron_expression
72
+
73
+ change_threshold = self.change_threshold
74
+
75
+ notify_on: Union[Unset, str] = UNSET
76
+ if not isinstance(self.notify_on, Unset):
77
+ notify_on = self.notify_on.value
78
+
79
+ webhook_url = self.webhook_url
80
+
81
+ webhook_secret = self.webhook_secret
82
+
83
+ webhook_headers: Union[Unset, dict[str, Any]] = UNSET
84
+ if not isinstance(self.webhook_headers, Unset):
85
+ webhook_headers = self.webhook_headers.to_dict()
86
+
87
+ status: Union[Unset, str] = UNSET
88
+ if not isinstance(self.status, Unset):
89
+ status = self.status.value
90
+
91
+ options: Union[Unset, dict[str, Any]] = UNSET
92
+ if not isinstance(self.options, Unset):
93
+ options = self.options.to_dict()
94
+
95
+ scrape_options: Union[Unset, dict[str, Any]] = UNSET
96
+ if not isinstance(self.scrape_options, Unset):
97
+ scrape_options = self.scrape_options.to_dict()
98
+
99
+ metadata: Union[Unset, dict[str, Any]] = UNSET
100
+ if not isinstance(self.metadata, Unset):
101
+ metadata = self.metadata.to_dict()
102
+
103
+ field_dict: dict[str, Any] = {}
104
+
105
+ field_dict.update({})
106
+ if url is not UNSET:
107
+ field_dict["url"] = url
108
+ if interval_type is not UNSET:
109
+ field_dict["interval_type"] = interval_type
110
+ if cron_expression is not UNSET:
111
+ field_dict["cron_expression"] = cron_expression
112
+ if change_threshold is not UNSET:
113
+ field_dict["change_threshold"] = change_threshold
114
+ if notify_on is not UNSET:
115
+ field_dict["notify_on"] = notify_on
116
+ if webhook_url is not UNSET:
117
+ field_dict["webhook_url"] = webhook_url
118
+ if webhook_secret is not UNSET:
119
+ field_dict["webhook_secret"] = webhook_secret
120
+ if webhook_headers is not UNSET:
121
+ field_dict["webhook_headers"] = webhook_headers
122
+ if status is not UNSET:
123
+ field_dict["status"] = status
124
+ if options is not UNSET:
125
+ field_dict["options"] = options
126
+ if scrape_options is not UNSET:
127
+ field_dict["scrape_options"] = scrape_options
128
+ if metadata is not UNSET:
129
+ field_dict["metadata"] = metadata
130
+
131
+ return field_dict
132
+
133
+ @classmethod
134
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
135
+ from ..models.metadata import Metadata
136
+ from ..models.monitor_update_request_options import MonitorUpdateRequestOptions
137
+ from ..models.monitor_update_request_scrape_options import (
138
+ MonitorUpdateRequestScrapeOptions,
139
+ )
140
+ from ..models.monitor_update_request_webhook_headers import (
141
+ MonitorUpdateRequestWebhookHeaders,
142
+ )
143
+
144
+ d = dict(src_dict)
145
+ url = d.pop("url", UNSET)
146
+
147
+ _interval_type = d.pop("interval_type", UNSET)
148
+ interval_type: Union[Unset, MonitorUpdateRequestIntervalType]
149
+ if isinstance(_interval_type, Unset):
150
+ interval_type = UNSET
151
+ else:
152
+ interval_type = MonitorUpdateRequestIntervalType(_interval_type)
153
+
154
+ cron_expression = d.pop("cron_expression", UNSET)
155
+
156
+ change_threshold = d.pop("change_threshold", UNSET)
157
+
158
+ _notify_on = d.pop("notify_on", UNSET)
159
+ notify_on: Union[Unset, MonitorUpdateRequestNotifyOn]
160
+ if isinstance(_notify_on, Unset):
161
+ notify_on = UNSET
162
+ else:
163
+ notify_on = MonitorUpdateRequestNotifyOn(_notify_on)
164
+
165
+ webhook_url = d.pop("webhook_url", UNSET)
166
+
167
+ webhook_secret = d.pop("webhook_secret", UNSET)
168
+
169
+ _webhook_headers = d.pop("webhook_headers", UNSET)
170
+ webhook_headers: Union[Unset, MonitorUpdateRequestWebhookHeaders]
171
+ if isinstance(_webhook_headers, Unset):
172
+ webhook_headers = UNSET
173
+ else:
174
+ webhook_headers = MonitorUpdateRequestWebhookHeaders.from_dict(
175
+ _webhook_headers
176
+ )
177
+
178
+ _status = d.pop("status", UNSET)
179
+ status: Union[Unset, MonitorUpdateRequestStatus]
180
+ if isinstance(_status, Unset):
181
+ status = UNSET
182
+ else:
183
+ status = MonitorUpdateRequestStatus(_status)
184
+
185
+ _options = d.pop("options", UNSET)
186
+ options: Union[Unset, MonitorUpdateRequestOptions]
187
+ if isinstance(_options, Unset):
188
+ options = UNSET
189
+ else:
190
+ options = MonitorUpdateRequestOptions.from_dict(_options)
191
+
192
+ _scrape_options = d.pop("scrape_options", UNSET)
193
+ scrape_options: Union[Unset, MonitorUpdateRequestScrapeOptions]
194
+ if isinstance(_scrape_options, Unset):
195
+ scrape_options = UNSET
196
+ else:
197
+ scrape_options = MonitorUpdateRequestScrapeOptions.from_dict(
198
+ _scrape_options
199
+ )
200
+
201
+ _metadata = d.pop("metadata", UNSET)
202
+ metadata: Union[Unset, Metadata]
203
+ if isinstance(_metadata, Unset):
204
+ metadata = UNSET
205
+ else:
206
+ metadata = Metadata.from_dict(_metadata)
207
+
208
+ monitor_update_request = cls(
209
+ url=url,
210
+ interval_type=interval_type,
211
+ cron_expression=cron_expression,
212
+ change_threshold=change_threshold,
213
+ notify_on=notify_on,
214
+ webhook_url=webhook_url,
215
+ webhook_secret=webhook_secret,
216
+ webhook_headers=webhook_headers,
217
+ status=status,
218
+ options=options,
219
+ scrape_options=scrape_options,
220
+ metadata=metadata,
221
+ )
222
+
223
+ return monitor_update_request
@@ -0,0 +1,11 @@
1
+ from enum import Enum
2
+
3
+
4
+ class MonitorUpdateRequestIntervalType(str, Enum):
5
+ CRON = "cron"
6
+ DAILY = "daily"
7
+ HOURLY = "hourly"
8
+ WEEKLY = "weekly"
9
+
10
+ def __str__(self) -> str:
11
+ return str(self.value)
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class MonitorUpdateRequestNotifyOn(str, Enum):
5
+ CHANGE = "change"
6
+ EVERY = "every"
7
+
8
+ def __str__(self) -> str:
9
+ 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="MonitorUpdateRequestOptions")
8
+
9
+
10
+ @_attrs_define
11
+ class MonitorUpdateRequestOptions:
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
+ monitor_update_request_options = cls()
26
+
27
+ monitor_update_request_options.additional_properties = d
28
+ return monitor_update_request_options
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
@@ -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="MonitorUpdateRequestScrapeOptions")
8
+
9
+
10
+ @_attrs_define
11
+ class MonitorUpdateRequestScrapeOptions:
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
+ monitor_update_request_scrape_options = cls()
26
+
27
+ monitor_update_request_scrape_options.additional_properties = d
28
+ return monitor_update_request_scrape_options
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
@@ -0,0 +1,9 @@
1
+ from enum import Enum
2
+
3
+
4
+ class MonitorUpdateRequestStatus(str, Enum):
5
+ ACTIVE = "active"
6
+ PAUSED = "paused"
7
+
8
+ def __str__(self) -> str:
9
+ 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="MonitorUpdateRequestWebhookHeaders")
8
+
9
+
10
+ @_attrs_define
11
+ class MonitorUpdateRequestWebhookHeaders:
12
+ """ """
13
+
14
+ additional_properties: dict[str, str] = _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
+ monitor_update_request_webhook_headers = cls()
26
+
27
+ monitor_update_request_webhook_headers.additional_properties = d
28
+ return monitor_update_request_webhook_headers
29
+
30
+ @property
31
+ def additional_keys(self) -> list[str]:
32
+ return list(self.additional_properties.keys())
33
+
34
+ def __getitem__(self, key: str) -> str:
35
+ return self.additional_properties[key]
36
+
37
+ def __setitem__(self, key: str, value: str) -> 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
@@ -0,0 +1,113 @@
1
+ from collections.abc import Mapping
2
+ from typing import (
3
+ TYPE_CHECKING,
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
+
13
+ from ..models.scrape_error_envelope_schema_version import (
14
+ ScrapeErrorEnvelopeSchemaVersion,
15
+ )
16
+ from ..models.scrape_error_envelope_status import ScrapeErrorEnvelopeStatus
17
+
18
+ if TYPE_CHECKING:
19
+ from ..models.scrape_error_envelope_error import ScrapeErrorEnvelopeError
20
+
21
+
22
+ T = TypeVar("T", bound="ScrapeErrorEnvelope")
23
+
24
+
25
+ @_attrs_define
26
+ class ScrapeErrorEnvelope:
27
+ """
28
+ Example:
29
+ {'schema_version': 1, 'status': 'failed', 'id': 'sc_01j9abc123', 'error': {'code': 'blocked', 'message':
30
+ 'Request blocked by the upstream site', 'http_status': 403, 'failed_at': datetime.datetime(2025, 1, 15, 12, 0,
31
+ tzinfo=datetime.timezone(datetime.timedelta(0), 'Z'))}}
32
+
33
+ Attributes:
34
+ schema_version (ScrapeErrorEnvelopeSchemaVersion): Envelope contract version emitted by current producers.
35
+ Consumers reading persisted envelopes must tolerate its absence as legacy v0 during rolling deploys.
36
+ status (ScrapeErrorEnvelopeStatus):
37
+ id (Union[None, str]): Stable job identifier (sc_… prefixed) when available; null when the job was never queued
38
+ (e.g. validation failure).
39
+ error (ScrapeErrorEnvelopeError):
40
+ """
41
+
42
+ schema_version: ScrapeErrorEnvelopeSchemaVersion
43
+ status: ScrapeErrorEnvelopeStatus
44
+ id: Union[None, str]
45
+ error: "ScrapeErrorEnvelopeError"
46
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
47
+
48
+ def to_dict(self) -> dict[str, Any]:
49
+ schema_version = self.schema_version.value
50
+
51
+ status = self.status.value
52
+
53
+ id: Union[None, str]
54
+ id = self.id
55
+
56
+ error = self.error.to_dict()
57
+
58
+ field_dict: dict[str, Any] = {}
59
+ field_dict.update(self.additional_properties)
60
+ field_dict.update(
61
+ {
62
+ "schema_version": schema_version,
63
+ "status": status,
64
+ "id": id,
65
+ "error": error,
66
+ }
67
+ )
68
+
69
+ return field_dict
70
+
71
+ @classmethod
72
+ def from_dict(cls: type[T], src_dict: Mapping[str, Any]) -> T:
73
+ from ..models.scrape_error_envelope_error import ScrapeErrorEnvelopeError
74
+
75
+ d = dict(src_dict)
76
+ schema_version = ScrapeErrorEnvelopeSchemaVersion(d.pop("schema_version"))
77
+
78
+ status = ScrapeErrorEnvelopeStatus(d.pop("status"))
79
+
80
+ def _parse_id(data: object) -> Union[None, str]:
81
+ if data is None:
82
+ return data
83
+ return cast(Union[None, str], data)
84
+
85
+ id = _parse_id(d.pop("id"))
86
+
87
+ error = ScrapeErrorEnvelopeError.from_dict(d.pop("error"))
88
+
89
+ scrape_error_envelope = cls(
90
+ schema_version=schema_version,
91
+ status=status,
92
+ id=id,
93
+ error=error,
94
+ )
95
+
96
+ scrape_error_envelope.additional_properties = d
97
+ return scrape_error_envelope
98
+
99
+ @property
100
+ def additional_keys(self) -> list[str]:
101
+ return list(self.additional_properties.keys())
102
+
103
+ def __getitem__(self, key: str) -> Any:
104
+ return self.additional_properties[key]
105
+
106
+ def __setitem__(self, key: str, value: Any) -> None:
107
+ self.additional_properties[key] = value
108
+
109
+ def __delitem__(self, key: str) -> None:
110
+ del self.additional_properties[key]
111
+
112
+ def __contains__(self, key: str) -> bool:
113
+ return key in self.additional_properties
@@ -0,0 +1,93 @@
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 ..models.scrape_error_envelope_error_code import ScrapeErrorEnvelopeErrorCode
14
+ from ..types import UNSET, Unset
15
+
16
+ T = TypeVar("T", bound="ScrapeErrorEnvelopeError")
17
+
18
+
19
+ @_attrs_define
20
+ class ScrapeErrorEnvelopeError:
21
+ """
22
+ Attributes:
23
+ code (ScrapeErrorEnvelopeErrorCode):
24
+ message (str):
25
+ failed_at (datetime.datetime):
26
+ http_status (Union[Unset, int]):
27
+ """
28
+
29
+ code: ScrapeErrorEnvelopeErrorCode
30
+ message: str
31
+ failed_at: datetime.datetime
32
+ http_status: Union[Unset, int] = UNSET
33
+ additional_properties: dict[str, Any] = _attrs_field(init=False, factory=dict)
34
+
35
+ def to_dict(self) -> dict[str, Any]:
36
+ code = self.code.value
37
+
38
+ message = self.message
39
+
40
+ failed_at = self.failed_at.isoformat()
41
+
42
+ http_status = self.http_status
43
+
44
+ field_dict: dict[str, Any] = {}
45
+ field_dict.update(self.additional_properties)
46
+ field_dict.update(
47
+ {
48
+ "code": code,
49
+ "message": message,
50
+ "failed_at": failed_at,
51
+ }
52
+ )
53
+ if http_status is not UNSET:
54
+ field_dict["http_status"] = http_status
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
+ code = ScrapeErrorEnvelopeErrorCode(d.pop("code"))
62
+
63
+ message = d.pop("message")
64
+
65
+ failed_at = isoparse(d.pop("failed_at"))
66
+
67
+ http_status = d.pop("http_status", UNSET)
68
+
69
+ scrape_error_envelope_error = cls(
70
+ code=code,
71
+ message=message,
72
+ failed_at=failed_at,
73
+ http_status=http_status,
74
+ )
75
+
76
+ scrape_error_envelope_error.additional_properties = d
77
+ return scrape_error_envelope_error
78
+
79
+ @property
80
+ def additional_keys(self) -> list[str]:
81
+ return list(self.additional_properties.keys())
82
+
83
+ def __getitem__(self, key: str) -> Any:
84
+ return self.additional_properties[key]
85
+
86
+ def __setitem__(self, key: str, value: Any) -> None:
87
+ self.additional_properties[key] = value
88
+
89
+ def __delitem__(self, key: str) -> None:
90
+ del self.additional_properties[key]
91
+
92
+ def __contains__(self, key: str) -> bool:
93
+ return key in self.additional_properties
@@ -0,0 +1,18 @@
1
+ from enum import Enum
2
+
3
+
4
+ class ScrapeErrorEnvelopeErrorCode(str, Enum):
5
+ BLOCKED = "blocked"
6
+ INTERNAL_ERROR = "internal_error"
7
+ INVALID_URL = "invalid_url"
8
+ PAYLOAD_TOO_LARGE = "payload_too_large"
9
+ QUOTA_EXHAUSTED = "quota_exhausted"
10
+ RATE_LIMITED = "rate_limited"
11
+ REQUEST_TOO_LARGE = "request_too_large"
12
+ TIMEOUT = "timeout"
13
+ UNSUPPORTED_CONTENT_TYPE = "unsupported_content_type"
14
+ UPSTREAM_ERROR = "upstream_error"
15
+ VALIDATION_ERROR = "validation_error"
16
+
17
+ def __str__(self) -> str:
18
+ return str(self.value)
@@ -0,0 +1,8 @@
1
+ from enum import IntEnum
2
+
3
+
4
+ class ScrapeErrorEnvelopeSchemaVersion(IntEnum):
5
+ VALUE_1 = 1
6
+
7
+ def __str__(self) -> str:
8
+ return str(self.value)
@@ -0,0 +1,8 @@
1
+ from enum import Enum
2
+
3
+
4
+ class ScrapeErrorEnvelopeStatus(str, Enum):
5
+ FAILED = "failed"
6
+
7
+ def __str__(self) -> str:
8
+ return str(self.value)