honeycomb-api 0.1.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 (453) hide show
  1. honeycomb/__init__.py +217 -0
  2. honeycomb/_generated/__init__.py +8 -0
  3. honeycomb/_generated/api/__init__.py +1 -0
  4. honeycomb/_generated/api/auth/__init__.py +0 -0
  5. honeycomb/_generated/api/auth/get_auth.py +172 -0
  6. honeycomb/_generated/api/auth/get_v2_auth.py +168 -0
  7. honeycomb/_generated/api/boards/__init__.py +0 -0
  8. honeycomb/_generated/api/boards/create_board.py +217 -0
  9. honeycomb/_generated/api/boards/create_board_view.py +237 -0
  10. honeycomb/_generated/api/boards/delete_board.py +191 -0
  11. honeycomb/_generated/api/boards/delete_board_view.py +210 -0
  12. honeycomb/_generated/api/boards/get_board.py +208 -0
  13. honeycomb/_generated/api/boards/get_board_view.py +214 -0
  14. honeycomb/_generated/api/boards/list_board_views.py +206 -0
  15. honeycomb/_generated/api/boards/list_boards.py +177 -0
  16. honeycomb/_generated/api/boards/update_board.py +238 -0
  17. honeycomb/_generated/api/boards/update_board_view.py +250 -0
  18. honeycomb/_generated/api/burn_alerts/__init__.py +0 -0
  19. honeycomb/_generated/api/burn_alerts/create_burn_alert.py +224 -0
  20. honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +204 -0
  21. honeycomb/_generated/api/burn_alerts/get_burn_alert.py +208 -0
  22. honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +220 -0
  23. honeycomb/_generated/api/calculated_fields/__init__.py +0 -0
  24. honeycomb/_generated/api/calculated_fields/create_calculated_field.py +239 -0
  25. honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +225 -0
  26. honeycomb/_generated/api/calculated_fields/get_calculated_field.py +207 -0
  27. honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +252 -0
  28. honeycomb/_generated/api/calculated_fields/update_calculated_field.py +242 -0
  29. honeycomb/_generated/api/columns/__init__.py +0 -0
  30. honeycomb/_generated/api/columns/create_column.py +241 -0
  31. honeycomb/_generated/api/columns/delete_column.py +221 -0
  32. honeycomb/_generated/api/columns/get_column.py +206 -0
  33. honeycomb/_generated/api/columns/list_columns.py +256 -0
  34. honeycomb/_generated/api/columns/update_column.py +242 -0
  35. honeycomb/_generated/api/dataset_definitions/__init__.py +0 -0
  36. honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +193 -0
  37. honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +235 -0
  38. honeycomb/_generated/api/datasets/__init__.py +0 -0
  39. honeycomb/_generated/api/datasets/create_dataset.py +227 -0
  40. honeycomb/_generated/api/datasets/delete_dataset.py +251 -0
  41. honeycomb/_generated/api/datasets/get_dataset.py +195 -0
  42. honeycomb/_generated/api/datasets/list_datasets.py +177 -0
  43. honeycomb/_generated/api/datasets/update_dataset.py +217 -0
  44. honeycomb/_generated/api/enhance/__init__.py +0 -0
  45. honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +231 -0
  46. honeycomb/_generated/api/environments/__init__.py +0 -0
  47. honeycomb/_generated/api/environments/create_environment.py +247 -0
  48. honeycomb/_generated/api/environments/delete_environment.py +245 -0
  49. honeycomb/_generated/api/environments/get_environment.py +213 -0
  50. honeycomb/_generated/api/environments/list_environments.py +245 -0
  51. honeycomb/_generated/api/environments/update_environment.py +254 -0
  52. honeycomb/_generated/api/events/__init__.py +0 -0
  53. honeycomb/_generated/api/events/create_event.py +269 -0
  54. honeycomb/_generated/api/events/create_events.py +314 -0
  55. honeycomb/_generated/api/key_management/__init__.py +0 -0
  56. honeycomb/_generated/api/key_management/create_api_key.py +286 -0
  57. honeycomb/_generated/api/key_management/delete_api_key.py +223 -0
  58. honeycomb/_generated/api/key_management/get_api_key.py +225 -0
  59. honeycomb/_generated/api/key_management/list_api_keys.py +281 -0
  60. honeycomb/_generated/api/key_management/update_api_key.py +270 -0
  61. honeycomb/_generated/api/kinesis_events/__init__.py +0 -0
  62. honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +220 -0
  63. honeycomb/_generated/api/marker_settings/__init__.py +0 -0
  64. honeycomb/_generated/api/marker_settings/create_marker_setting.py +209 -0
  65. honeycomb/_generated/api/marker_settings/delete_marker_settings.py +194 -0
  66. honeycomb/_generated/api/marker_settings/list_marker_settings.py +186 -0
  67. honeycomb/_generated/api/marker_settings/update_marker_settings.py +230 -0
  68. honeycomb/_generated/api/markers/__init__.py +0 -0
  69. honeycomb/_generated/api/markers/create_marker.py +220 -0
  70. honeycomb/_generated/api/markers/create_marker_v2.py +253 -0
  71. honeycomb/_generated/api/markers/delete_marker.py +200 -0
  72. honeycomb/_generated/api/markers/get_marker.py +194 -0
  73. honeycomb/_generated/api/markers/update_marker.py +233 -0
  74. honeycomb/_generated/api/markers/update_marker_v2.py +262 -0
  75. honeycomb/_generated/api/pipelines/__init__.py +0 -0
  76. honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +306 -0
  77. honeycomb/_generated/api/pipelines/record_pipeline_usage.py +244 -0
  78. honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +261 -0
  79. honeycomb/_generated/api/queries/__init__.py +0 -0
  80. honeycomb/_generated/api/queries/create_query.py +224 -0
  81. honeycomb/_generated/api/queries/get_query.py +208 -0
  82. honeycomb/_generated/api/query_annotations/__init__.py +0 -0
  83. honeycomb/_generated/api/query_annotations/create_query_annotation.py +226 -0
  84. honeycomb/_generated/api/query_annotations/delete_query_annotation.py +198 -0
  85. honeycomb/_generated/api/query_annotations/get_query_annotation.py +202 -0
  86. honeycomb/_generated/api/query_annotations/list_query_annotations.py +217 -0
  87. honeycomb/_generated/api/query_annotations/update_query_annotation.py +237 -0
  88. honeycomb/_generated/api/query_data/__init__.py +0 -0
  89. honeycomb/_generated/api/query_data/create_query_result.py +247 -0
  90. honeycomb/_generated/api/query_data/get_query_result.py +208 -0
  91. honeycomb/_generated/api/recipients/__init__.py +0 -0
  92. honeycomb/_generated/api/recipients/create_recipient.py +317 -0
  93. honeycomb/_generated/api/recipients/delete_recipient.py +199 -0
  94. honeycomb/_generated/api/recipients/get_recipient.py +252 -0
  95. honeycomb/_generated/api/recipients/list_recipients.py +230 -0
  96. honeycomb/_generated/api/recipients/update_recipient.py +323 -0
  97. honeycomb/_generated/api/reporting/__init__.py +0 -0
  98. honeycomb/_generated/api/reporting/get_slo_history.py +218 -0
  99. honeycomb/_generated/api/service_maps/__init__.py +0 -0
  100. honeycomb/_generated/api/service_maps/create_map_dependency_request.py +252 -0
  101. honeycomb/_generated/api/service_maps/get_map_dependencies.py +265 -0
  102. honeycomb/_generated/api/sl_os/__init__.py +0 -0
  103. honeycomb/_generated/api/sl_os/create_slo.py +229 -0
  104. honeycomb/_generated/api/sl_os/delete_slo.py +210 -0
  105. honeycomb/_generated/api/sl_os/get_slo.py +256 -0
  106. honeycomb/_generated/api/sl_os/list_slos.py +210 -0
  107. honeycomb/_generated/api/sl_os/update_slo.py +242 -0
  108. honeycomb/_generated/api/triggers/__init__.py +0 -0
  109. honeycomb/_generated/api/triggers/create_trigger.py +250 -0
  110. honeycomb/_generated/api/triggers/delete_trigger.py +204 -0
  111. honeycomb/_generated/api/triggers/get_trigger.py +214 -0
  112. honeycomb/_generated/api/triggers/list_triggers.py +206 -0
  113. honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +208 -0
  114. honeycomb/_generated/api/triggers/update_trigger.py +248 -0
  115. honeycomb/_generated/client.py +271 -0
  116. honeycomb/_generated/errors.py +14 -0
  117. honeycomb/_generated/models/__init__.py +561 -0
  118. honeycomb/_generated/models/api_key_create_request.py +78 -0
  119. honeycomb/_generated/models/api_key_create_request_data.py +130 -0
  120. honeycomb/_generated/models/api_key_create_request_data_relationships.py +78 -0
  121. honeycomb/_generated/models/api_key_create_request_data_type.py +7 -0
  122. honeycomb/_generated/models/api_key_list_response.py +112 -0
  123. honeycomb/_generated/models/api_key_object.py +189 -0
  124. honeycomb/_generated/models/api_key_object_links.py +74 -0
  125. honeycomb/_generated/models/api_key_object_relationships.py +150 -0
  126. honeycomb/_generated/models/api_key_object_type.py +7 -0
  127. honeycomb/_generated/models/api_key_response.py +78 -0
  128. honeycomb/_generated/models/api_key_update_request.py +104 -0
  129. honeycomb/_generated/models/auth.py +140 -0
  130. honeycomb/_generated/models/auth_api_key_access.py +154 -0
  131. honeycomb/_generated/models/auth_environment.py +82 -0
  132. honeycomb/_generated/models/auth_team.py +82 -0
  133. honeycomb/_generated/models/auth_type.py +8 -0
  134. honeycomb/_generated/models/auth_v2_response.py +108 -0
  135. honeycomb/_generated/models/auth_v2_response_data.py +122 -0
  136. honeycomb/_generated/models/auth_v2_response_data_attributes.py +141 -0
  137. honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +7 -0
  138. honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +107 -0
  139. honeycomb/_generated/models/auth_v2_response_data_relationships.py +59 -0
  140. honeycomb/_generated/models/auth_v2_response_data_type.py +7 -0
  141. honeycomb/_generated/models/base_trigger.py +367 -0
  142. honeycomb/_generated/models/base_trigger_alert_type.py +8 -0
  143. honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +92 -0
  144. honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +10 -0
  145. honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +8 -0
  146. honeycomb/_generated/models/base_trigger_evaluation_schedule.py +83 -0
  147. honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +8 -0
  148. honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +103 -0
  149. honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +13 -0
  150. honeycomb/_generated/models/base_trigger_threshold.py +95 -0
  151. honeycomb/_generated/models/base_trigger_threshold_op.py +10 -0
  152. honeycomb/_generated/models/batch_event.py +110 -0
  153. honeycomb/_generated/models/board.py +276 -0
  154. honeycomb/_generated/models/board_layout_generation.py +8 -0
  155. honeycomb/_generated/models/board_links.py +74 -0
  156. honeycomb/_generated/models/board_panel_position.py +104 -0
  157. honeycomb/_generated/models/board_query_visualization_settings.py +141 -0
  158. honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +113 -0
  159. honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +13 -0
  160. honeycomb/_generated/models/board_type.py +7 -0
  161. honeycomb/_generated/models/board_view_filter.py +93 -0
  162. honeycomb/_generated/models/board_view_filter_operation.py +22 -0
  163. honeycomb/_generated/models/board_view_response.py +111 -0
  164. honeycomb/_generated/models/budget_rate.py +189 -0
  165. honeycomb/_generated/models/budget_rate_alert_type.py +8 -0
  166. honeycomb/_generated/models/burn_alert_shared_params.py +136 -0
  167. honeycomb/_generated/models/calculated_field.py +117 -0
  168. honeycomb/_generated/models/configuration_key_attributes.py +140 -0
  169. honeycomb/_generated/models/configuration_key_attributes_key_type.py +7 -0
  170. honeycomb/_generated/models/configuration_key_attributes_timestamps.py +107 -0
  171. honeycomb/_generated/models/create_board_view_request.py +96 -0
  172. honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +232 -0
  173. honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +74 -0
  174. honeycomb/_generated/models/create_column.py +149 -0
  175. honeycomb/_generated/models/create_column_type.py +11 -0
  176. honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +78 -0
  177. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +90 -0
  178. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +97 -0
  179. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +88 -0
  180. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  181. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  182. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  183. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  184. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  185. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  186. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  187. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  188. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +7 -0
  189. honeycomb/_generated/models/create_environment_request.py +78 -0
  190. honeycomb/_generated/models/create_environment_request_data.py +90 -0
  191. honeycomb/_generated/models/create_environment_request_data_attributes.py +102 -0
  192. honeycomb/_generated/models/create_environment_request_data_type.py +7 -0
  193. honeycomb/_generated/models/create_events_content_encoding.py +8 -0
  194. honeycomb/_generated/models/create_events_response_200_item.py +82 -0
  195. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +217 -0
  196. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +74 -0
  197. honeycomb/_generated/models/create_map_dependencies_request.py +128 -0
  198. honeycomb/_generated/models/create_map_dependencies_response.py +97 -0
  199. honeycomb/_generated/models/create_map_dependencies_response_status.py +9 -0
  200. honeycomb/_generated/models/create_pipeline_health_record_request.py +78 -0
  201. honeycomb/_generated/models/create_pipeline_health_record_request_data.py +98 -0
  202. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +88 -0
  203. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +88 -0
  204. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  205. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  206. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  207. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  208. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  209. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  210. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  211. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  212. honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +7 -0
  213. honeycomb/_generated/models/create_query_result_request.py +118 -0
  214. honeycomb/_generated/models/dataset.py +183 -0
  215. honeycomb/_generated/models/dataset_creation_payload.py +93 -0
  216. honeycomb/_generated/models/dataset_definition_type_1.py +96 -0
  217. honeycomb/_generated/models/dataset_definition_type_1_column_type.py +8 -0
  218. honeycomb/_generated/models/dataset_definitions.py +599 -0
  219. honeycomb/_generated/models/dataset_relationship.py +79 -0
  220. honeycomb/_generated/models/dataset_relationship_data.py +82 -0
  221. honeycomb/_generated/models/dataset_relationship_data_type.py +7 -0
  222. honeycomb/_generated/models/dataset_settings.py +73 -0
  223. honeycomb/_generated/models/dataset_update_payload.py +105 -0
  224. honeycomb/_generated/models/dataset_update_payload_settings.py +73 -0
  225. honeycomb/_generated/models/detailed_error.py +115 -0
  226. honeycomb/_generated/models/email_recipient.py +160 -0
  227. honeycomb/_generated/models/email_recipient_details.py +71 -0
  228. honeycomb/_generated/models/email_recipient_type.py +7 -0
  229. honeycomb/_generated/models/environment.py +112 -0
  230. honeycomb/_generated/models/environment_attributes.py +140 -0
  231. honeycomb/_generated/models/environment_attributes_color_type_1.py +7 -0
  232. honeycomb/_generated/models/environment_attributes_settings.py +70 -0
  233. honeycomb/_generated/models/environment_color.py +16 -0
  234. honeycomb/_generated/models/environment_links.py +70 -0
  235. honeycomb/_generated/models/environment_list_response.py +112 -0
  236. honeycomb/_generated/models/environment_relationship.py +79 -0
  237. honeycomb/_generated/models/environment_relationship_data.py +82 -0
  238. honeycomb/_generated/models/environment_relationship_data_type.py +7 -0
  239. honeycomb/_generated/models/environment_response.py +78 -0
  240. honeycomb/_generated/models/environment_type.py +7 -0
  241. honeycomb/_generated/models/error.py +74 -0
  242. honeycomb/_generated/models/event.py +71 -0
  243. honeycomb/_generated/models/exhaustion_time.py +174 -0
  244. honeycomb/_generated/models/exhaustion_time_alert_type.py +8 -0
  245. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +198 -0
  246. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +77 -0
  247. honeycomb/_generated/models/filter_op.py +22 -0
  248. honeycomb/_generated/models/get_map_dependencies_response.py +169 -0
  249. honeycomb/_generated/models/get_map_dependencies_response_status.py +9 -0
  250. honeycomb/_generated/models/having_calculate_op.py +29 -0
  251. honeycomb/_generated/models/having_op.py +12 -0
  252. honeycomb/_generated/models/included_resource.py +106 -0
  253. honeycomb/_generated/models/included_resource_attributes.py +62 -0
  254. honeycomb/_generated/models/ingest_key_attributes.py +153 -0
  255. honeycomb/_generated/models/ingest_key_attributes_key_type.py +7 -0
  256. honeycomb/_generated/models/ingest_key_attributes_permissions.py +74 -0
  257. honeycomb/_generated/models/ingest_key_attributes_timestamps.py +107 -0
  258. honeycomb/_generated/models/ingest_key_type.py +90 -0
  259. honeycomb/_generated/models/ingest_key_type_key_type.py +7 -0
  260. honeycomb/_generated/models/jsonapi_error_source.py +92 -0
  261. honeycomb/_generated/models/kinesis_event.py +111 -0
  262. honeycomb/_generated/models/kinesis_event_record.py +73 -0
  263. honeycomb/_generated/models/kinesis_response.py +91 -0
  264. honeycomb/_generated/models/list_api_keys_filtertype.py +8 -0
  265. honeycomb/_generated/models/map_dependency.py +118 -0
  266. honeycomb/_generated/models/map_node.py +97 -0
  267. honeycomb/_generated/models/map_node_type.py +7 -0
  268. honeycomb/_generated/models/marker.py +151 -0
  269. honeycomb/_generated/models/marker_create_request.py +78 -0
  270. honeycomb/_generated/models/marker_create_request_data.py +104 -0
  271. honeycomb/_generated/models/marker_create_request_data_attributes.py +110 -0
  272. honeycomb/_generated/models/marker_create_request_data_relationships.py +92 -0
  273. honeycomb/_generated/models/marker_create_request_data_type.py +7 -0
  274. honeycomb/_generated/models/marker_object.py +136 -0
  275. honeycomb/_generated/models/marker_object_attributes.py +146 -0
  276. honeycomb/_generated/models/marker_object_attributes_timestamps.py +107 -0
  277. honeycomb/_generated/models/marker_object_links.py +74 -0
  278. honeycomb/_generated/models/marker_object_relationships.py +111 -0
  279. honeycomb/_generated/models/marker_object_relationships_dataset.py +104 -0
  280. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +94 -0
  281. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +7 -0
  282. honeycomb/_generated/models/marker_object_type.py +7 -0
  283. honeycomb/_generated/models/marker_response.py +78 -0
  284. honeycomb/_generated/models/marker_setting.py +125 -0
  285. honeycomb/_generated/models/marker_update_request.py +78 -0
  286. honeycomb/_generated/models/marker_update_request_data.py +104 -0
  287. honeycomb/_generated/models/marker_update_request_data_attributes.py +111 -0
  288. honeycomb/_generated/models/marker_update_request_data_relationships.py +92 -0
  289. honeycomb/_generated/models/marker_update_request_data_type.py +7 -0
  290. honeycomb/_generated/models/ms_teams_recipient.py +161 -0
  291. honeycomb/_generated/models/ms_teams_recipient_details.py +80 -0
  292. honeycomb/_generated/models/ms_teams_recipient_type.py +7 -0
  293. honeycomb/_generated/models/ms_teams_workflow_recipient.py +161 -0
  294. honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +80 -0
  295. honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +7 -0
  296. honeycomb/_generated/models/notification_recipient.py +131 -0
  297. honeycomb/_generated/models/notification_recipient_details.py +117 -0
  298. honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +10 -0
  299. honeycomb/_generated/models/notification_recipient_details_variables_item.py +81 -0
  300. honeycomb/_generated/models/pager_duty_recipient.py +160 -0
  301. honeycomb/_generated/models/pager_duty_recipient_details.py +79 -0
  302. honeycomb/_generated/models/pager_duty_recipient_type.py +7 -0
  303. honeycomb/_generated/models/pagination_links.py +80 -0
  304. honeycomb/_generated/models/payload_template.py +73 -0
  305. honeycomb/_generated/models/pipeline_configuration_response.py +112 -0
  306. honeycomb/_generated/models/pipeline_configuration_response_attributes.py +101 -0
  307. honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +85 -0
  308. honeycomb/_generated/models/pipeline_configuration_response_links.py +73 -0
  309. honeycomb/_generated/models/pipeline_configuration_response_type.py +7 -0
  310. honeycomb/_generated/models/pipeline_configuration_rollout.py +112 -0
  311. honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +75 -0
  312. honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +12 -0
  313. honeycomb/_generated/models/pipeline_configuration_rollout_links.py +73 -0
  314. honeycomb/_generated/models/pipeline_configuration_rollout_type.py +7 -0
  315. honeycomb/_generated/models/preset_filter.py +78 -0
  316. honeycomb/_generated/models/query.py +346 -0
  317. honeycomb/_generated/models/query_annotation.py +166 -0
  318. honeycomb/_generated/models/query_annotation_source.py +8 -0
  319. honeycomb/_generated/models/query_calculated_fields_item.py +80 -0
  320. honeycomb/_generated/models/query_calculations_item.py +98 -0
  321. honeycomb/_generated/models/query_compare_time_offset_seconds.py +14 -0
  322. honeycomb/_generated/models/query_filter_combination.py +8 -0
  323. honeycomb/_generated/models/query_filters_item.py +126 -0
  324. honeycomb/_generated/models/query_havings_item.py +128 -0
  325. honeycomb/_generated/models/query_op.py +30 -0
  326. honeycomb/_generated/models/query_orders_item.py +115 -0
  327. honeycomb/_generated/models/query_orders_item_order.py +8 -0
  328. honeycomb/_generated/models/query_panel.py +114 -0
  329. honeycomb/_generated/models/query_panel_query_panel.py +143 -0
  330. honeycomb/_generated/models/query_panel_query_panel_query_style.py +9 -0
  331. honeycomb/_generated/models/query_result.py +130 -0
  332. honeycomb/_generated/models/query_result_details.py +156 -0
  333. honeycomb/_generated/models/query_result_details_data.py +188 -0
  334. honeycomb/_generated/models/query_result_details_links.py +85 -0
  335. honeycomb/_generated/models/query_result_links.py +85 -0
  336. honeycomb/_generated/models/query_results_data.py +89 -0
  337. honeycomb/_generated/models/query_results_data_data.py +71 -0
  338. honeycomb/_generated/models/query_results_series.py +97 -0
  339. honeycomb/_generated/models/recipient_properties.py +137 -0
  340. honeycomb/_generated/models/recipient_type.py +12 -0
  341. honeycomb/_generated/models/slack_recipient.py +160 -0
  342. honeycomb/_generated/models/slack_recipient_details.py +71 -0
  343. honeycomb/_generated/models/slack_recipient_type.py +7 -0
  344. honeycomb/_generated/models/slo.py +245 -0
  345. honeycomb/_generated/models/slo_create.py +245 -0
  346. honeycomb/_generated/models/slo_create_sli.py +75 -0
  347. honeycomb/_generated/models/slo_detailed_response.py +312 -0
  348. honeycomb/_generated/models/slo_detailed_response_status.py +10 -0
  349. honeycomb/_generated/models/slo_history.py +94 -0
  350. honeycomb/_generated/models/slo_history_request.py +93 -0
  351. honeycomb/_generated/models/slo_history_response.py +91 -0
  352. honeycomb/_generated/models/slo_panel.py +114 -0
  353. honeycomb/_generated/models/slo_panel_slo_panel.py +75 -0
  354. honeycomb/_generated/models/slo_sli.py +74 -0
  355. honeycomb/_generated/models/tag.py +79 -0
  356. honeycomb/_generated/models/team_relationship.py +78 -0
  357. honeycomb/_generated/models/team_relationship_team.py +78 -0
  358. honeycomb/_generated/models/team_relationship_team_data.py +82 -0
  359. honeycomb/_generated/models/team_relationship_team_data_type.py +7 -0
  360. honeycomb/_generated/models/template_variable_definition.py +81 -0
  361. honeycomb/_generated/models/text_panel.py +114 -0
  362. honeycomb/_generated/models/text_panel_text_panel.py +71 -0
  363. honeycomb/_generated/models/trigger_response.py +399 -0
  364. honeycomb/_generated/models/trigger_with_inline_query.py +390 -0
  365. honeycomb/_generated/models/trigger_with_inline_query_query.py +60 -0
  366. honeycomb/_generated/models/trigger_with_query_reference.py +376 -0
  367. honeycomb/_generated/models/update_board_view_request.py +107 -0
  368. honeycomb/_generated/models/update_environment_request.py +78 -0
  369. honeycomb/_generated/models/update_environment_request_data.py +98 -0
  370. honeycomb/_generated/models/update_environment_request_data_attributes.py +118 -0
  371. honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +73 -0
  372. honeycomb/_generated/models/update_environment_request_data_type.py +7 -0
  373. honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +202 -0
  374. honeycomb/_generated/models/update_pipeline_configuration_rollout.py +98 -0
  375. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +75 -0
  376. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +12 -0
  377. honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +78 -0
  378. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +98 -0
  379. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +75 -0
  380. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +12 -0
  381. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +7 -0
  382. honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +78 -0
  383. honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +7 -0
  384. honeycomb/_generated/models/user_relationship.py +78 -0
  385. honeycomb/_generated/models/user_relationship_data.py +82 -0
  386. honeycomb/_generated/models/user_relationship_data_type.py +7 -0
  387. honeycomb/_generated/models/validation_error.py +145 -0
  388. honeycomb/_generated/models/validation_error_type_detail_item.py +103 -0
  389. honeycomb/_generated/models/validation_error_type_detail_item_code.py +10 -0
  390. honeycomb/_generated/models/webhook_header.py +81 -0
  391. honeycomb/_generated/models/webhook_recipient.py +160 -0
  392. honeycomb/_generated/models/webhook_recipient_details.py +142 -0
  393. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +117 -0
  394. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +126 -0
  395. honeycomb/_generated/models/webhook_recipient_type.py +7 -0
  396. honeycomb/_generated/py.typed +1 -0
  397. honeycomb/_generated/types.py +46 -0
  398. honeycomb/auth.py +152 -0
  399. honeycomb/client.py +736 -0
  400. honeycomb/exceptions.py +236 -0
  401. honeycomb/models/__init__.py +157 -0
  402. honeycomb/models/api_keys.py +81 -0
  403. honeycomb/models/board_builder.py +387 -0
  404. honeycomb/models/boards.py +86 -0
  405. honeycomb/models/burn_alerts.py +124 -0
  406. honeycomb/models/columns.py +59 -0
  407. honeycomb/models/datasets.py +51 -0
  408. honeycomb/models/derived_columns.py +107 -0
  409. honeycomb/models/environments.py +106 -0
  410. honeycomb/models/events.py +35 -0
  411. honeycomb/models/marker_builder.py +136 -0
  412. honeycomb/models/markers.py +73 -0
  413. honeycomb/models/queries.py +210 -0
  414. honeycomb/models/query_annotations.py +63 -0
  415. honeycomb/models/query_builder.py +840 -0
  416. honeycomb/models/recipient_builder.py +248 -0
  417. honeycomb/models/recipients.py +43 -0
  418. honeycomb/models/service_map_dependencies.py +126 -0
  419. honeycomb/models/slo_builder.py +463 -0
  420. honeycomb/models/slos.py +66 -0
  421. honeycomb/models/tags_mixin.py +79 -0
  422. honeycomb/models/trigger_builder.py +561 -0
  423. honeycomb/models/triggers.py +208 -0
  424. honeycomb/resources/__init__.py +35 -0
  425. honeycomb/resources/_recipient_utils.py +156 -0
  426. honeycomb/resources/api_keys.py +303 -0
  427. honeycomb/resources/base.py +142 -0
  428. honeycomb/resources/boards.py +350 -0
  429. honeycomb/resources/burn_alerts.py +205 -0
  430. honeycomb/resources/columns.py +185 -0
  431. honeycomb/resources/datasets.py +163 -0
  432. honeycomb/resources/derived_columns.py +233 -0
  433. honeycomb/resources/environments.py +295 -0
  434. honeycomb/resources/events.py +156 -0
  435. honeycomb/resources/markers.py +334 -0
  436. honeycomb/resources/queries.py +256 -0
  437. honeycomb/resources/query_annotations.py +207 -0
  438. honeycomb/resources/query_results.py +886 -0
  439. honeycomb/resources/recipients.py +202 -0
  440. honeycomb/resources/service_map_dependencies.py +389 -0
  441. honeycomb/resources/slos.py +353 -0
  442. honeycomb/resources/triggers.py +284 -0
  443. honeycomb/tools/__init__.py +85 -0
  444. honeycomb/tools/__main__.py +204 -0
  445. honeycomb/tools/builders.py +512 -0
  446. honeycomb/tools/descriptions.py +523 -0
  447. honeycomb/tools/executor.py +860 -0
  448. honeycomb/tools/generator.py +2386 -0
  449. honeycomb/tools/schemas.py +184 -0
  450. honeycomb_api-0.1.0.dist-info/METADATA +451 -0
  451. honeycomb_api-0.1.0.dist-info/RECORD +453 -0
  452. honeycomb_api-0.1.0.dist-info/WHEEL +4 -0
  453. honeycomb_api-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,350 @@
1
+ """Boards resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any
6
+
7
+ from ..models.boards import Board, BoardCreate
8
+ from .base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from ..client import HoneycombClient
12
+ from ..models.board_builder import BoardBundle
13
+
14
+
15
+ class BoardsResource(BaseResource):
16
+ """Resource for managing Honeycomb boards.
17
+
18
+ Boards are dashboards that display visualizations of your data.
19
+
20
+ Example (async):
21
+ >>> async with HoneycombClient(api_key="...") as client:
22
+ ... boards = await client.boards.list()
23
+ ... board = await client.boards.get(board_id="abc123")
24
+
25
+ Example (sync):
26
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
27
+ ... boards = client.boards.list()
28
+ """
29
+
30
+ def __init__(self, client: HoneycombClient) -> None:
31
+ super().__init__(client)
32
+
33
+ def _build_path(self, board_id: str | None = None) -> str:
34
+ """Build API path for boards."""
35
+ base = "/1/boards"
36
+ if board_id:
37
+ return f"{base}/{board_id}"
38
+ return base
39
+
40
+ # -------------------------------------------------------------------------
41
+ # Async methods
42
+ # -------------------------------------------------------------------------
43
+
44
+ async def list_async(self) -> list[Board]:
45
+ """List all boards (async).
46
+
47
+ Returns:
48
+ List of Board objects.
49
+ """
50
+ data = await self._get_async(self._build_path())
51
+ return self._parse_model_list(Board, data)
52
+
53
+ async def get_async(self, board_id: str) -> Board:
54
+ """Get a specific board (async).
55
+
56
+ Args:
57
+ board_id: Board ID.
58
+
59
+ Returns:
60
+ Board object.
61
+ """
62
+ data = await self._get_async(self._build_path(board_id))
63
+ return self._parse_model(Board, data)
64
+
65
+ async def create_async(self, board: BoardCreate) -> Board:
66
+ """Create a new board (async).
67
+
68
+ Args:
69
+ board: Board configuration.
70
+
71
+ Returns:
72
+ Created Board object.
73
+ """
74
+ data = await self._post_async(self._build_path(), json=board.model_dump_for_api())
75
+ return self._parse_model(Board, data)
76
+
77
+ async def update_async(self, board_id: str, board: BoardCreate) -> Board:
78
+ """Update an existing board (async).
79
+
80
+ Args:
81
+ board_id: Board ID.
82
+ board: Updated board configuration.
83
+
84
+ Returns:
85
+ Updated Board object.
86
+ """
87
+ data = await self._put_async(self._build_path(board_id), json=board.model_dump_for_api())
88
+ return self._parse_model(Board, data)
89
+
90
+ async def delete_async(self, board_id: str) -> None:
91
+ """Delete a board (async).
92
+
93
+ Args:
94
+ board_id: Board ID.
95
+ """
96
+ await self._delete_async(self._build_path(board_id))
97
+
98
+ async def create_from_bundle_async(self, bundle: BoardBundle) -> Board:
99
+ """Create board from BoardBundle with automatic query creation.
100
+
101
+ Orchestrates:
102
+ 1. Create queries + annotations from QueryBuilder instances
103
+ 2. Assemble all panel configurations
104
+ 3. Create board with all panels
105
+
106
+ Panels are added to the board in the order they appear in the bundle:
107
+ - Auto-layout: Honeycomb arranges panels in this order
108
+ - Manual-layout: Respects explicit positions
109
+
110
+ Args:
111
+ bundle: BoardBundle from BoardBuilder.build()
112
+
113
+ Returns:
114
+ Created Board object
115
+
116
+ Example:
117
+ >>> board = await client.boards.create_from_bundle_async(
118
+ ... BoardBuilder("Dashboard")
119
+ ... .auto_layout()
120
+ ... .query(
121
+ ... QueryBuilder("Request Count")
122
+ ... .dataset("api-logs")
123
+ ... .last_1_hour()
124
+ ... .count()
125
+ ... )
126
+ ... .build()
127
+ ... )
128
+ """
129
+
130
+ panels = []
131
+
132
+ # Create query panels from QueryBuilder instances
133
+ for qb_panel in bundle.query_builder_panels:
134
+ # Apply dataset override if specified
135
+ if qb_panel.dataset_override:
136
+ # Temporarily override the dataset on the builder
137
+ original_dataset = qb_panel.builder.get_dataset()
138
+ qb_panel.builder.dataset(qb_panel.dataset_override)
139
+ query, annotation_id = await self._client.queries.create_with_annotation_async(
140
+ qb_panel.builder
141
+ )
142
+ # Restore original dataset
143
+ qb_panel.builder.dataset(original_dataset)
144
+ else:
145
+ query, annotation_id = await self._client.queries.create_with_annotation_async(
146
+ qb_panel.builder
147
+ )
148
+ panels.append(
149
+ self._build_query_panel_dict(
150
+ query.id,
151
+ annotation_id,
152
+ qb_panel.position,
153
+ qb_panel.style,
154
+ qb_panel.visualization,
155
+ )
156
+ )
157
+
158
+ # Add existing query panels
159
+ for existing in bundle.existing_query_panels:
160
+ panels.append(
161
+ self._build_query_panel_dict(
162
+ existing.query_id,
163
+ existing.annotation_id,
164
+ existing.position,
165
+ existing.style,
166
+ existing.visualization,
167
+ )
168
+ )
169
+
170
+ # Create SLOs from SLOBuilder instances
171
+ for slo_panel in bundle.slo_builder_panels:
172
+ # Create SLO using existing orchestration
173
+ slo_dict = await self._client.slos.create_from_bundle_async(slo_panel.builder.build())
174
+ # Get first SLO (should only be one dataset for board usage)
175
+ slo = next(iter(slo_dict.values()))
176
+ panels.append(self._build_slo_panel_dict(slo.id, slo_panel.position))
177
+
178
+ # Add existing SLO panels
179
+ for slo_existing in bundle.existing_slo_panels:
180
+ panels.append(self._build_slo_panel_dict(slo_existing.slo_id, slo_existing.position))
181
+
182
+ # Add text panels
183
+ for text in bundle.text_panels:
184
+ panels.append(self._build_text_panel_dict(text.content, text.position))
185
+
186
+ # Create board
187
+ board_create = BoardCreate(
188
+ name=bundle.board_name,
189
+ description=bundle.board_description,
190
+ type="flexible",
191
+ panels=panels if panels else None,
192
+ layout_generation=bundle.layout_generation,
193
+ tags=bundle.tags,
194
+ preset_filters=bundle.preset_filters,
195
+ )
196
+
197
+ return await self.create_async(board_create)
198
+
199
+ def _build_query_panel_dict(
200
+ self,
201
+ query_id: str,
202
+ annotation_id: str,
203
+ position: tuple[int, int, int, int] | None,
204
+ style: str,
205
+ visualization: dict[str, Any] | None,
206
+ ) -> dict[str, Any]:
207
+ """Build query panel dictionary for API."""
208
+ query_panel: dict[str, Any] = {
209
+ "query_id": query_id,
210
+ "query_annotation_id": annotation_id,
211
+ "query_style": style,
212
+ }
213
+ # Dataset is not included - query already knows its scope
214
+ if visualization:
215
+ query_panel["visualization_settings"] = visualization
216
+
217
+ panel: dict[str, Any] = {
218
+ "type": "query",
219
+ "query_panel": query_panel,
220
+ }
221
+ if position:
222
+ panel["position"] = {
223
+ "x_coordinate": position[0],
224
+ "y_coordinate": position[1],
225
+ "width": position[2],
226
+ "height": position[3],
227
+ }
228
+ return panel
229
+
230
+ def _build_slo_panel_dict(
231
+ self,
232
+ slo_id: str,
233
+ position: tuple[int, int, int, int] | None,
234
+ ) -> dict[str, Any]:
235
+ """Build SLO panel dictionary for API."""
236
+ panel = {"type": "slo", "slo_panel": {"slo_id": slo_id}}
237
+ if position:
238
+ panel["position"] = {
239
+ "x_coordinate": position[0],
240
+ "y_coordinate": position[1],
241
+ "width": position[2],
242
+ "height": position[3],
243
+ }
244
+ return panel
245
+
246
+ def _build_text_panel_dict(
247
+ self,
248
+ content: str,
249
+ position: tuple[int, int, int, int] | None,
250
+ ) -> dict[str, Any]:
251
+ """Build text panel dictionary for API."""
252
+ panel = {"type": "text", "text_panel": {"content": content}}
253
+ if position:
254
+ panel["position"] = {
255
+ "x_coordinate": position[0],
256
+ "y_coordinate": position[1],
257
+ "width": position[2],
258
+ "height": position[3],
259
+ }
260
+ return panel
261
+
262
+ # -------------------------------------------------------------------------
263
+ # Sync methods
264
+ # -------------------------------------------------------------------------
265
+
266
+ def list(self) -> list[Board]:
267
+ """List all boards.
268
+
269
+ Returns:
270
+ List of Board objects.
271
+ """
272
+ if not self._client.is_sync:
273
+ raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
274
+ data = self._get_sync(self._build_path())
275
+ return self._parse_model_list(Board, data)
276
+
277
+ def get(self, board_id: str) -> Board:
278
+ """Get a specific board.
279
+
280
+ Args:
281
+ board_id: Board ID.
282
+
283
+ Returns:
284
+ Board object.
285
+ """
286
+ if not self._client.is_sync:
287
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
288
+ data = self._get_sync(self._build_path(board_id))
289
+ return self._parse_model(Board, data)
290
+
291
+ def create(self, board: BoardCreate) -> Board:
292
+ """Create a new board.
293
+
294
+ Args:
295
+ board: Board configuration.
296
+
297
+ Returns:
298
+ Created Board object.
299
+ """
300
+ if not self._client.is_sync:
301
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
302
+ data = self._post_sync(self._build_path(), json=board.model_dump_for_api())
303
+ return self._parse_model(Board, data)
304
+
305
+ def update(self, board_id: str, board: BoardCreate) -> Board:
306
+ """Update an existing board.
307
+
308
+ Args:
309
+ board_id: Board ID.
310
+ board: Updated board configuration.
311
+
312
+ Returns:
313
+ Updated Board object.
314
+ """
315
+ if not self._client.is_sync:
316
+ raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
317
+ data = self._put_sync(self._build_path(board_id), json=board.model_dump_for_api())
318
+ return self._parse_model(Board, data)
319
+
320
+ def delete(self, board_id: str) -> None:
321
+ """Delete a board.
322
+
323
+ Args:
324
+ board_id: Board ID.
325
+ """
326
+ if not self._client.is_sync:
327
+ raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
328
+ self._delete_sync(self._build_path(board_id))
329
+
330
+ def create_from_bundle(self, bundle: BoardBundle) -> Board:
331
+ """Create board from BoardBundle with automatic query creation (sync).
332
+
333
+ Orchestrates:
334
+ 1. Create queries + annotations from QueryBuilder instances
335
+ 2. Assemble all panel configurations
336
+ 3. Create board with all panels
337
+
338
+ Args:
339
+ bundle: BoardBundle from BoardBuilder.build()
340
+
341
+ Returns:
342
+ Created Board object
343
+ """
344
+ if not self._client.is_sync:
345
+ raise RuntimeError(
346
+ "Use create_from_bundle_async() for async mode, or pass sync=True to client"
347
+ )
348
+ import asyncio
349
+
350
+ return asyncio.run(self.create_from_bundle_async(bundle))
@@ -0,0 +1,205 @@
1
+ """Burn Alerts resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from ..models.burn_alerts import BurnAlert, BurnAlertCreate
8
+ from .base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from ..client import HoneycombClient
12
+
13
+
14
+ class BurnAlertsResource(BaseResource):
15
+ """Resource for managing SLO burn alerts.
16
+
17
+ Burn alerts notify you when you're consuming your SLO error budget too quickly.
18
+ Two alert types are supported:
19
+ - exhaustion_time: Alerts when budget will be exhausted within X minutes
20
+ - budget_rate: Alerts when budget drops by X% within a time window
21
+
22
+ Example (async):
23
+ >>> async with HoneycombClient(api_key="...") as client:
24
+ ... alerts = await client.burn_alerts.list(
25
+ ... dataset="my-dataset",
26
+ ... slo_id="abc123"
27
+ ... )
28
+ ... alert = await client.burn_alerts.create(
29
+ ... dataset="my-dataset",
30
+ ... burn_alert=BurnAlertCreate(
31
+ ... alert_type=BurnAlertType.EXHAUSTION_TIME,
32
+ ... slo_id="abc123",
33
+ ... exhaustion_minutes=120
34
+ ... )
35
+ ... )
36
+
37
+ Example (sync):
38
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
39
+ ... alerts = client.burn_alerts.list(
40
+ ... dataset="my-dataset",
41
+ ... slo_id="abc123"
42
+ ... )
43
+ """
44
+
45
+ def __init__(self, client: HoneycombClient) -> None:
46
+ super().__init__(client)
47
+
48
+ def _build_path(self, dataset: str, burn_alert_id: str | None = None) -> str:
49
+ """Build API path for burn alerts."""
50
+ base = f"/1/burn_alerts/{dataset}"
51
+ if burn_alert_id:
52
+ return f"{base}/{burn_alert_id}"
53
+ return base
54
+
55
+ # -------------------------------------------------------------------------
56
+ # Async methods
57
+ # -------------------------------------------------------------------------
58
+
59
+ async def list_async(self, dataset: str, slo_id: str) -> list[BurnAlert]:
60
+ """List all burn alerts for an SLO (async).
61
+
62
+ Args:
63
+ dataset: Dataset slug.
64
+ slo_id: SLO ID to list burn alerts for.
65
+
66
+ Returns:
67
+ List of BurnAlert objects.
68
+ """
69
+ path = f"{self._build_path(dataset)}?slo_id={slo_id}"
70
+ data = await self._get_async(path)
71
+ return self._parse_model_list(BurnAlert, data)
72
+
73
+ async def get_async(self, dataset: str, burn_alert_id: str) -> BurnAlert:
74
+ """Get a specific burn alert (async).
75
+
76
+ Args:
77
+ dataset: Dataset slug.
78
+ burn_alert_id: Burn Alert ID.
79
+
80
+ Returns:
81
+ BurnAlert object.
82
+ """
83
+ data = await self._get_async(self._build_path(dataset, burn_alert_id))
84
+ return self._parse_model(BurnAlert, data)
85
+
86
+ async def create_async(self, dataset: str, burn_alert: BurnAlertCreate) -> BurnAlert:
87
+ """Create a new burn alert (async).
88
+
89
+ Args:
90
+ dataset: Dataset slug.
91
+ burn_alert: Burn alert configuration.
92
+
93
+ Returns:
94
+ Created BurnAlert object.
95
+ """
96
+ data = await self._post_async(
97
+ self._build_path(dataset), json=burn_alert.model_dump_for_api()
98
+ )
99
+ return self._parse_model(BurnAlert, data)
100
+
101
+ async def update_async(
102
+ self, dataset: str, burn_alert_id: str, burn_alert: BurnAlertCreate
103
+ ) -> BurnAlert:
104
+ """Update an existing burn alert (async).
105
+
106
+ Args:
107
+ dataset: Dataset slug.
108
+ burn_alert_id: Burn Alert ID.
109
+ burn_alert: Updated burn alert configuration.
110
+
111
+ Returns:
112
+ Updated BurnAlert object.
113
+ """
114
+ data = await self._put_async(
115
+ self._build_path(dataset, burn_alert_id), json=burn_alert.model_dump_for_api()
116
+ )
117
+ return self._parse_model(BurnAlert, data)
118
+
119
+ async def delete_async(self, dataset: str, burn_alert_id: str) -> None:
120
+ """Delete a burn alert (async).
121
+
122
+ Args:
123
+ dataset: Dataset slug.
124
+ burn_alert_id: Burn Alert ID.
125
+ """
126
+ await self._delete_async(self._build_path(dataset, burn_alert_id))
127
+
128
+ # -------------------------------------------------------------------------
129
+ # Sync methods
130
+ # -------------------------------------------------------------------------
131
+
132
+ def list(self, dataset: str, slo_id: str) -> list[BurnAlert]:
133
+ """List all burn alerts for an SLO.
134
+
135
+ Args:
136
+ dataset: Dataset slug.
137
+ slo_id: SLO ID to list burn alerts for.
138
+
139
+ Returns:
140
+ List of BurnAlert objects.
141
+ """
142
+ if not self._client.is_sync:
143
+ raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
144
+ path = f"{self._build_path(dataset)}?slo_id={slo_id}"
145
+ data = self._get_sync(path)
146
+ return self._parse_model_list(BurnAlert, data)
147
+
148
+ def get(self, dataset: str, burn_alert_id: str) -> BurnAlert:
149
+ """Get a specific burn alert.
150
+
151
+ Args:
152
+ dataset: Dataset slug.
153
+ burn_alert_id: Burn Alert ID.
154
+
155
+ Returns:
156
+ BurnAlert object.
157
+ """
158
+ if not self._client.is_sync:
159
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
160
+ data = self._get_sync(self._build_path(dataset, burn_alert_id))
161
+ return self._parse_model(BurnAlert, data)
162
+
163
+ def create(self, dataset: str, burn_alert: BurnAlertCreate) -> BurnAlert:
164
+ """Create a new burn alert.
165
+
166
+ Args:
167
+ dataset: Dataset slug.
168
+ burn_alert: Burn alert configuration.
169
+
170
+ Returns:
171
+ Created BurnAlert object.
172
+ """
173
+ if not self._client.is_sync:
174
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
175
+ data = self._post_sync(self._build_path(dataset), json=burn_alert.model_dump_for_api())
176
+ return self._parse_model(BurnAlert, data)
177
+
178
+ def update(self, dataset: str, burn_alert_id: str, burn_alert: BurnAlertCreate) -> BurnAlert:
179
+ """Update an existing burn alert.
180
+
181
+ Args:
182
+ dataset: Dataset slug.
183
+ burn_alert_id: Burn Alert ID.
184
+ burn_alert: Updated burn alert configuration.
185
+
186
+ Returns:
187
+ Updated BurnAlert object.
188
+ """
189
+ if not self._client.is_sync:
190
+ raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
191
+ data = self._put_sync(
192
+ self._build_path(dataset, burn_alert_id), json=burn_alert.model_dump_for_api()
193
+ )
194
+ return self._parse_model(BurnAlert, data)
195
+
196
+ def delete(self, dataset: str, burn_alert_id: str) -> None:
197
+ """Delete a burn alert.
198
+
199
+ Args:
200
+ dataset: Dataset slug.
201
+ burn_alert_id: Burn Alert ID.
202
+ """
203
+ if not self._client.is_sync:
204
+ raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
205
+ self._delete_sync(self._build_path(dataset, burn_alert_id))