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,334 @@
1
+ """Markers resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, List # noqa: UP035
6
+
7
+ from ..models.markers import Marker, MarkerCreate, MarkerSetting, MarkerSettingCreate
8
+ from .base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from ..client import HoneycombClient
12
+
13
+
14
+ class MarkersResource(BaseResource):
15
+ """Resource for managing dataset markers.
16
+
17
+ Markers allow you to annotate your data with events like deployments,
18
+ configuration changes, or other significant occurrences.
19
+
20
+ Note: The Markers API does not support GET for individual markers.
21
+ Use list() to retrieve all markers and filter client-side if needed.
22
+
23
+ Example (async):
24
+ >>> async with HoneycombClient(api_key="...") as client:
25
+ ... markers = await client.markers.list_async(dataset="my-dataset")
26
+ ... marker = await client.markers.create_async(
27
+ ... dataset="my-dataset",
28
+ ... marker=MarkerCreate(
29
+ ... message="deploy #123",
30
+ ... type="deploy"
31
+ ... )
32
+ ... )
33
+
34
+ Example (sync):
35
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
36
+ ... markers = client.markers.list(dataset="my-dataset")
37
+ """
38
+
39
+ def __init__(self, client: HoneycombClient) -> None:
40
+ super().__init__(client)
41
+
42
+ def _build_path(self, dataset: str, marker_id: str | None = None) -> str:
43
+ """Build API path for markers."""
44
+ base = f"/1/markers/{dataset}"
45
+ if marker_id:
46
+ return f"{base}/{marker_id}"
47
+ return base
48
+
49
+ def _build_settings_path(self, dataset: str, setting_id: str | None = None) -> str:
50
+ """Build API path for marker settings."""
51
+ base = f"/1/marker_settings/{dataset}"
52
+ if setting_id:
53
+ return f"{base}/{setting_id}"
54
+ return base
55
+
56
+ # -------------------------------------------------------------------------
57
+ # Async methods - Markers
58
+ # -------------------------------------------------------------------------
59
+
60
+ async def list_async(self, dataset: str) -> list[Marker]:
61
+ """List all markers for a dataset (async).
62
+
63
+ Args:
64
+ dataset: Dataset slug.
65
+
66
+ Returns:
67
+ List of Marker objects.
68
+ """
69
+ data = await self._get_async(self._build_path(dataset))
70
+ return self._parse_model_list(Marker, data)
71
+
72
+ async def create_async(self, dataset: str, marker: MarkerCreate) -> Marker:
73
+ """Create a new marker (async).
74
+
75
+ Args:
76
+ dataset: Dataset slug (use '__all__' for environment-wide markers).
77
+ marker: Marker configuration.
78
+
79
+ Returns:
80
+ Created Marker object.
81
+ """
82
+ data = await self._post_async(self._build_path(dataset), json=marker.model_dump_for_api())
83
+ return self._parse_model(Marker, data)
84
+
85
+ async def update_async(self, dataset: str, marker_id: str, marker: MarkerCreate) -> Marker:
86
+ """Update an existing marker (async).
87
+
88
+ Args:
89
+ dataset: Dataset slug.
90
+ marker_id: Marker ID.
91
+ marker: Updated marker configuration.
92
+
93
+ Returns:
94
+ Updated Marker object.
95
+ """
96
+ data = await self._put_async(
97
+ self._build_path(dataset, marker_id), json=marker.model_dump_for_api()
98
+ )
99
+ return self._parse_model(Marker, data)
100
+
101
+ async def delete_async(self, dataset: str, marker_id: str) -> None:
102
+ """Delete a marker (async).
103
+
104
+ Args:
105
+ dataset: Dataset slug.
106
+ marker_id: Marker ID.
107
+ """
108
+ await self._delete_async(self._build_path(dataset, marker_id))
109
+
110
+ # -------------------------------------------------------------------------
111
+ # Async methods - Marker Settings
112
+ # -------------------------------------------------------------------------
113
+
114
+ async def list_settings_async(self, dataset: str) -> list[MarkerSetting]:
115
+ """List all marker settings for a dataset (async).
116
+
117
+ Args:
118
+ dataset: Dataset slug.
119
+
120
+ Returns:
121
+ List of MarkerSetting objects.
122
+ """
123
+ data = await self._get_async(self._build_settings_path(dataset))
124
+ return self._parse_model_list(MarkerSetting, data)
125
+
126
+ async def get_setting_async(self, dataset: str, setting_id: str) -> MarkerSetting:
127
+ """Get a specific marker setting (async).
128
+
129
+ Args:
130
+ dataset: Dataset slug.
131
+ setting_id: Marker setting ID.
132
+
133
+ Returns:
134
+ MarkerSetting object.
135
+ """
136
+ data = await self._get_async(self._build_settings_path(dataset, setting_id))
137
+ return self._parse_model(MarkerSetting, data)
138
+
139
+ async def create_setting_async(
140
+ self, dataset: str, setting: MarkerSettingCreate
141
+ ) -> MarkerSetting:
142
+ """Create a new marker setting (async).
143
+
144
+ Args:
145
+ dataset: Dataset slug.
146
+ setting: Marker setting configuration.
147
+
148
+ Returns:
149
+ Created MarkerSetting object.
150
+ """
151
+ data = await self._post_async(
152
+ self._build_settings_path(dataset), json=setting.model_dump_for_api()
153
+ )
154
+ return self._parse_model(MarkerSetting, data)
155
+
156
+ async def update_setting_async(
157
+ self, dataset: str, setting_id: str, setting: MarkerSettingCreate
158
+ ) -> MarkerSetting:
159
+ """Update an existing marker setting (async).
160
+
161
+ Args:
162
+ dataset: Dataset slug.
163
+ setting_id: Marker setting ID.
164
+ setting: Updated marker setting configuration.
165
+
166
+ Returns:
167
+ Updated MarkerSetting object.
168
+ """
169
+ data = await self._put_async(
170
+ self._build_settings_path(dataset, setting_id), json=setting.model_dump_for_api()
171
+ )
172
+ return self._parse_model(MarkerSetting, data)
173
+
174
+ async def delete_setting_async(self, dataset: str, setting_id: str) -> None:
175
+ """Delete a marker setting (async).
176
+
177
+ Args:
178
+ dataset: Dataset slug.
179
+ setting_id: Marker setting ID.
180
+ """
181
+ await self._delete_async(self._build_settings_path(dataset, setting_id))
182
+
183
+ # -------------------------------------------------------------------------
184
+ # Sync methods - Markers
185
+ # -------------------------------------------------------------------------
186
+
187
+ def list(self, dataset: str) -> list[Marker]:
188
+ """List all markers for a dataset.
189
+
190
+ Args:
191
+ dataset: Dataset slug.
192
+
193
+ Returns:
194
+ List of Marker objects.
195
+ """
196
+ if not self._client.is_sync:
197
+ raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
198
+ data = self._get_sync(self._build_path(dataset))
199
+ return self._parse_model_list(Marker, data)
200
+
201
+ def create(self, dataset: str, marker: MarkerCreate) -> Marker:
202
+ """Create a new marker.
203
+
204
+ Args:
205
+ dataset: Dataset slug (use '__all__' for environment-wide markers).
206
+ marker: Marker configuration.
207
+
208
+ Returns:
209
+ Created Marker object.
210
+ """
211
+ if not self._client.is_sync:
212
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
213
+ data = self._post_sync(self._build_path(dataset), json=marker.model_dump_for_api())
214
+ return self._parse_model(Marker, data)
215
+
216
+ def update(self, dataset: str, marker_id: str, marker: MarkerCreate) -> Marker:
217
+ """Update an existing marker.
218
+
219
+ Args:
220
+ dataset: Dataset slug.
221
+ marker_id: Marker ID.
222
+ marker: Updated marker configuration.
223
+
224
+ Returns:
225
+ Updated Marker object.
226
+ """
227
+ if not self._client.is_sync:
228
+ raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
229
+ data = self._put_sync(
230
+ self._build_path(dataset, marker_id), json=marker.model_dump_for_api()
231
+ )
232
+ return self._parse_model(Marker, data)
233
+
234
+ def delete(self, dataset: str, marker_id: str) -> None:
235
+ """Delete a marker.
236
+
237
+ Args:
238
+ dataset: Dataset slug.
239
+ marker_id: Marker ID.
240
+ """
241
+ if not self._client.is_sync:
242
+ raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
243
+ self._delete_sync(self._build_path(dataset, marker_id))
244
+
245
+ # -------------------------------------------------------------------------
246
+ # Sync methods - Marker Settings
247
+ # -------------------------------------------------------------------------
248
+
249
+ def list_settings(self, dataset: str) -> List[MarkerSetting]: # noqa: UP006
250
+ """List all marker settings for a dataset.
251
+
252
+ Args:
253
+ dataset: Dataset slug.
254
+
255
+ Returns:
256
+ List of MarkerSetting objects.
257
+ """
258
+ if not self._client.is_sync:
259
+ raise RuntimeError(
260
+ "Use list_settings_async() for async mode, or pass sync=True to client"
261
+ )
262
+ data = self._get_sync(self._build_settings_path(dataset))
263
+ return self._parse_model_list(MarkerSetting, data)
264
+
265
+ def get_setting(self, dataset: str, setting_id: str) -> MarkerSetting:
266
+ """Get a specific marker setting.
267
+
268
+ Args:
269
+ dataset: Dataset slug.
270
+ setting_id: Marker setting ID.
271
+
272
+ Returns:
273
+ MarkerSetting object.
274
+ """
275
+ if not self._client.is_sync:
276
+ raise RuntimeError(
277
+ "Use get_setting_async() for async mode, or pass sync=True to client"
278
+ )
279
+ data = self._get_sync(self._build_settings_path(dataset, setting_id))
280
+ return self._parse_model(MarkerSetting, data)
281
+
282
+ def create_setting(self, dataset: str, setting: MarkerSettingCreate) -> MarkerSetting:
283
+ """Create a new marker setting.
284
+
285
+ Args:
286
+ dataset: Dataset slug.
287
+ setting: Marker setting configuration.
288
+
289
+ Returns:
290
+ Created MarkerSetting object.
291
+ """
292
+ if not self._client.is_sync:
293
+ raise RuntimeError(
294
+ "Use create_setting_async() for async mode, or pass sync=True to client"
295
+ )
296
+ data = self._post_sync(
297
+ self._build_settings_path(dataset), json=setting.model_dump_for_api()
298
+ )
299
+ return self._parse_model(MarkerSetting, data)
300
+
301
+ def update_setting(
302
+ self, dataset: str, setting_id: str, setting: MarkerSettingCreate
303
+ ) -> MarkerSetting:
304
+ """Update an existing marker setting.
305
+
306
+ Args:
307
+ dataset: Dataset slug.
308
+ setting_id: Marker setting ID.
309
+ setting: Updated marker setting configuration.
310
+
311
+ Returns:
312
+ Updated MarkerSetting object.
313
+ """
314
+ if not self._client.is_sync:
315
+ raise RuntimeError(
316
+ "Use update_setting_async() for async mode, or pass sync=True to client"
317
+ )
318
+ data = self._put_sync(
319
+ self._build_settings_path(dataset, setting_id), json=setting.model_dump_for_api()
320
+ )
321
+ return self._parse_model(MarkerSetting, data)
322
+
323
+ def delete_setting(self, dataset: str, setting_id: str) -> None:
324
+ """Delete a marker setting.
325
+
326
+ Args:
327
+ dataset: Dataset slug.
328
+ setting_id: Marker setting ID.
329
+ """
330
+ if not self._client.is_sync:
331
+ raise RuntimeError(
332
+ "Use delete_setting_async() for async mode, or pass sync=True to client"
333
+ )
334
+ self._delete_sync(self._build_settings_path(dataset, setting_id))
@@ -0,0 +1,256 @@
1
+ """Queries resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, overload
6
+
7
+ from ..models.queries import Query, QuerySpec
8
+ from .base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from ..client import HoneycombClient
12
+ from ..models.query_builder import QueryBuilder
13
+
14
+
15
+ class QueriesResource(BaseResource):
16
+ """Resource for managing Honeycomb queries.
17
+
18
+ Queries define how to analyze your data. They can be used with
19
+ triggers, SLOs, or run directly to get results.
20
+
21
+ Example (async):
22
+ >>> async with HoneycombClient(api_key="...") as client:
23
+ ... query = await client.queries.create_async(
24
+ ... QueryBuilder()
25
+ ... .dataset("my-dataset")
26
+ ... .last_1_hour()
27
+ ... .count()
28
+ ... )
29
+ ... query_obj = await client.queries.get_async(
30
+ ... dataset="my-dataset",
31
+ ... query_id=query.id
32
+ ... )
33
+
34
+ Example (sync):
35
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
36
+ ... query = client.queries.create(
37
+ ... QueryBuilder().dataset("my-dataset").count()
38
+ ... )
39
+ """
40
+
41
+ def __init__(self, client: HoneycombClient) -> None:
42
+ super().__init__(client)
43
+
44
+ def _build_path(self, dataset: str, query_id: str | None = None) -> str:
45
+ """Build API path for queries."""
46
+ base = f"/1/queries/{dataset}"
47
+ if query_id:
48
+ return f"{base}/{query_id}"
49
+ return base
50
+
51
+ # -------------------------------------------------------------------------
52
+ # Async methods
53
+ # -------------------------------------------------------------------------
54
+
55
+ @overload
56
+ async def create_async(self, spec: QueryBuilder) -> Query: ...
57
+
58
+ @overload
59
+ async def create_async(self, spec: QuerySpec, *, dataset: str) -> Query: ...
60
+
61
+ async def create_async(
62
+ self, spec: QuerySpec | QueryBuilder, *, dataset: str | None = None
63
+ ) -> Query:
64
+ """Create a new query (async).
65
+
66
+ Args:
67
+ spec: Query specification (QueryBuilder or QuerySpec).
68
+ dataset: Dataset slug. Required for QuerySpec, extracted from QueryBuilder.
69
+
70
+ Returns:
71
+ Created Query object.
72
+
73
+ Raises:
74
+ HoneycombValidationError: If the query spec is invalid.
75
+ HoneycombNotFoundError: If the dataset doesn't exist.
76
+ ValueError: If dataset parameter is misused.
77
+
78
+ Example (QueryBuilder - recommended):
79
+ >>> query = await client.queries.create_async(
80
+ ... QueryBuilder()
81
+ ... .dataset("my-dataset")
82
+ ... .last_1_hour()
83
+ ... .count()
84
+ ... )
85
+
86
+ Example (QuerySpec - advanced):
87
+ >>> query = await client.queries.create_async(
88
+ ... QuerySpec(time_range=3600, calculations=[{"op": "COUNT"}]),
89
+ ... dataset="my-dataset"
90
+ ... )
91
+ """
92
+ from ..models.query_builder import QueryBuilder
93
+
94
+ # Extract dataset based on spec type
95
+ if isinstance(spec, QueryBuilder):
96
+ if dataset is not None:
97
+ raise ValueError(
98
+ "dataset parameter not allowed with QueryBuilder. "
99
+ "Use .dataset() on the builder instead."
100
+ )
101
+ dataset = spec.get_dataset()
102
+ query_spec = spec.build()
103
+ else:
104
+ if dataset is None:
105
+ raise ValueError(
106
+ "dataset parameter required when using QuerySpec. "
107
+ "Pass dataset='your-dataset' or use QueryBuilder instead."
108
+ )
109
+ query_spec = spec
110
+
111
+ data = await self._post_async(
112
+ self._build_path(dataset), json=query_spec.model_dump_for_api()
113
+ )
114
+ return self._parse_model(Query, data)
115
+
116
+ async def get_async(self, dataset: str, query_id: str) -> Query:
117
+ """Get a specific query (async).
118
+
119
+ Args:
120
+ dataset: The dataset slug.
121
+ query_id: Query ID.
122
+
123
+ Returns:
124
+ Query object.
125
+
126
+ Raises:
127
+ HoneycombNotFoundError: If the query doesn't exist.
128
+ """
129
+ data = await self._get_async(self._build_path(dataset, query_id))
130
+ return self._parse_model(Query, data)
131
+
132
+ async def create_with_annotation_async(
133
+ self,
134
+ builder: QueryBuilder,
135
+ ) -> tuple[Query, str]:
136
+ """Create a query and annotation together from QueryBuilder (async).
137
+
138
+ This is a convenience method for QueryBuilder instances that have
139
+ query names (.name() was called). It creates both the query and
140
+ its annotation in one call. Dataset is extracted from the builder.
141
+
142
+ Args:
143
+ builder: QueryBuilder with .name() and .dataset() called
144
+
145
+ Returns:
146
+ Tuple of (Query object, annotation_id)
147
+
148
+ Raises:
149
+ ValueError: If the QueryBuilder doesn't have a name
150
+
151
+ Example:
152
+ >>> query_builder = (
153
+ ... QueryBuilder()
154
+ ... .dataset("my-dataset")
155
+ ... .last_1_hour()
156
+ ... .count()
157
+ ... .name("Error Count")
158
+ ... .description("Tracks errors over time")
159
+ ... )
160
+ >>> query, annotation_id = await client.queries.create_with_annotation_async(
161
+ ... query_builder
162
+ ... )
163
+ >>> # Use query.id and annotation_id in BoardBuilder
164
+ """
165
+ from ..models.query_annotations import QueryAnnotationCreate
166
+
167
+ # Check if this has a name
168
+ if not hasattr(builder, "has_name") or not builder.has_name():
169
+ raise ValueError(
170
+ "create_with_annotation requires a QueryBuilder with .name() called. "
171
+ "Use create_async() for plain QuerySpec objects."
172
+ )
173
+
174
+ # Extract dataset from builder
175
+ dataset = builder.get_dataset()
176
+
177
+ # Create the query first
178
+ query = await self.create_async(builder)
179
+
180
+ # Create the annotation
181
+ annotation = QueryAnnotationCreate(
182
+ name=builder.get_name() or "",
183
+ query_id=query.id,
184
+ description=builder.get_description(),
185
+ )
186
+ created_annotation = await self._client.query_annotations.create_async(dataset, annotation)
187
+
188
+ return (query, created_annotation.id)
189
+
190
+ # -------------------------------------------------------------------------
191
+ # Sync methods
192
+ # -------------------------------------------------------------------------
193
+
194
+ @overload
195
+ def create(self, spec: QueryBuilder) -> Query: ...
196
+
197
+ @overload
198
+ def create(self, spec: QuerySpec, *, dataset: str) -> Query: ...
199
+
200
+ def create(self, spec: QuerySpec | QueryBuilder, *, dataset: str | None = None) -> Query:
201
+ """Create a new query.
202
+
203
+ Args:
204
+ spec: Query specification (QueryBuilder or QuerySpec).
205
+ dataset: Dataset slug. Required for QuerySpec, extracted from QueryBuilder.
206
+
207
+ Returns:
208
+ Created Query object.
209
+
210
+ Raises:
211
+ HoneycombValidationError: If the query spec is invalid.
212
+ HoneycombNotFoundError: If the dataset doesn't exist.
213
+ ValueError: If dataset parameter is misused.
214
+ """
215
+ if not self._client.is_sync:
216
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
217
+
218
+ from ..models.query_builder import QueryBuilder
219
+
220
+ # Extract dataset based on spec type
221
+ if isinstance(spec, QueryBuilder):
222
+ if dataset is not None:
223
+ raise ValueError(
224
+ "dataset parameter not allowed with QueryBuilder. "
225
+ "Use .dataset() on the builder instead."
226
+ )
227
+ dataset = spec.get_dataset()
228
+ query_spec = spec.build()
229
+ else:
230
+ if dataset is None:
231
+ raise ValueError(
232
+ "dataset parameter required when using QuerySpec. "
233
+ "Pass dataset='your-dataset' or use QueryBuilder instead."
234
+ )
235
+ query_spec = spec
236
+
237
+ data = self._post_sync(self._build_path(dataset), json=query_spec.model_dump_for_api())
238
+ return self._parse_model(Query, data)
239
+
240
+ def get(self, dataset: str, query_id: str) -> Query:
241
+ """Get a specific query.
242
+
243
+ Args:
244
+ dataset: The dataset slug.
245
+ query_id: Query ID.
246
+
247
+ Returns:
248
+ Query object.
249
+
250
+ Raises:
251
+ HoneycombNotFoundError: If the query doesn't exist.
252
+ """
253
+ if not self._client.is_sync:
254
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
255
+ data = self._get_sync(self._build_path(dataset, query_id))
256
+ return self._parse_model(Query, data)