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,184 @@
1
+ """Schema generation utilities for Claude tool definitions.
2
+
3
+ This module provides utilities to generate JSON Schema definitions from Pydantic models,
4
+ suitable for Claude's tool calling API.
5
+ """
6
+
7
+ import re
8
+ from typing import Any
9
+
10
+ from pydantic import BaseModel
11
+
12
+
13
+ def validate_tool_name(name: str) -> None:
14
+ """Validate tool name follows Claude's naming constraints.
15
+
16
+ Args:
17
+ name: The tool name to validate
18
+
19
+ Raises:
20
+ ValueError: If name doesn't match pattern ^[a-zA-Z0-9_-]{1,64}$
21
+ """
22
+ pattern = r"^[a-zA-Z0-9_-]{1,64}$"
23
+ if not re.match(pattern, name):
24
+ raise ValueError(
25
+ f"Tool name '{name}' must match pattern {pattern}. "
26
+ "Only letters, numbers, underscores, and hyphens allowed, 1-64 characters."
27
+ )
28
+
29
+
30
+ def generate_schema_from_model(
31
+ model: type[BaseModel], exclude_fields: set[str] | None = None
32
+ ) -> dict[str, Any]:
33
+ """Generate JSON Schema from a Pydantic model.
34
+
35
+ Args:
36
+ model: The Pydantic model class to generate schema from
37
+ exclude_fields: Optional set of field names to exclude from schema
38
+
39
+ Returns:
40
+ JSON Schema dict suitable for Claude tool definitions
41
+ """
42
+ exclude_fields = exclude_fields or set()
43
+
44
+ # Get the full JSON schema from Pydantic
45
+ full_schema = model.model_json_schema()
46
+
47
+ # Extract properties and required fields
48
+ properties = {
49
+ k: v for k, v in full_schema.get("properties", {}).items() if k not in exclude_fields
50
+ }
51
+ required = [f for f in full_schema.get("required", []) if f not in exclude_fields]
52
+
53
+ # Build the schema
54
+ schema: dict[str, Any] = {
55
+ "type": "object",
56
+ "properties": properties,
57
+ }
58
+
59
+ if required:
60
+ schema["required"] = required
61
+
62
+ # Handle definitions/defs for nested models
63
+ if "$defs" in full_schema:
64
+ schema["$defs"] = full_schema["$defs"]
65
+ elif "definitions" in full_schema:
66
+ schema["definitions"] = full_schema["definitions"]
67
+
68
+ return schema
69
+
70
+
71
+ def merge_schemas(*schemas: dict[str, Any]) -> dict[str, Any]:
72
+ """Merge multiple JSON schemas into one.
73
+
74
+ Useful for combining schemas from multiple models (e.g., dataset + model-specific params).
75
+
76
+ Args:
77
+ *schemas: Variable number of schema dicts to merge
78
+
79
+ Returns:
80
+ Merged schema dict
81
+ """
82
+ merged: dict[str, Any] = {
83
+ "type": "object",
84
+ "properties": {},
85
+ "required": [],
86
+ }
87
+
88
+ all_defs: dict[str, Any] = {}
89
+
90
+ for schema in schemas:
91
+ # Merge properties
92
+ merged["properties"].update(schema.get("properties", {}))
93
+
94
+ # Merge required fields
95
+ required = schema.get("required", [])
96
+ if required:
97
+ merged["required"].extend(required)
98
+
99
+ # Merge definitions
100
+ if "$defs" in schema:
101
+ all_defs.update(schema["$defs"])
102
+ elif "definitions" in schema:
103
+ all_defs.update(schema["definitions"])
104
+
105
+ # Deduplicate required fields
106
+ if merged["required"]:
107
+ merged["required"] = list(dict.fromkeys(merged["required"]))
108
+ else:
109
+ del merged["required"]
110
+
111
+ # Add definitions if any
112
+ if all_defs:
113
+ merged["$defs"] = all_defs
114
+
115
+ return merged
116
+
117
+
118
+ def add_parameter(
119
+ schema: dict[str, Any],
120
+ name: str,
121
+ param_type: str,
122
+ description: str,
123
+ required: bool = True,
124
+ **kwargs: Any,
125
+ ) -> None:
126
+ """Add a parameter to an existing schema.
127
+
128
+ Args:
129
+ schema: The schema dict to modify
130
+ name: Parameter name
131
+ param_type: JSON Schema type (string, integer, object, array, etc.)
132
+ description: Parameter description
133
+ required: Whether parameter is required
134
+ **kwargs: Additional schema properties (enum, items, etc.)
135
+ """
136
+ schema["properties"][name] = {
137
+ "type": param_type,
138
+ "description": description,
139
+ **kwargs,
140
+ }
141
+
142
+ if required:
143
+ if "required" not in schema:
144
+ schema["required"] = []
145
+ if name not in schema["required"]:
146
+ schema["required"].append(name)
147
+
148
+
149
+ def validate_schema(schema: dict[str, Any]) -> None:
150
+ """Validate a JSON Schema is well-formed.
151
+
152
+ Args:
153
+ schema: The schema dict to validate
154
+
155
+ Raises:
156
+ ValueError: If schema is invalid
157
+ """
158
+ if not isinstance(schema, dict):
159
+ raise ValueError("Schema must be a dictionary")
160
+
161
+ if schema.get("type") != "object":
162
+ raise ValueError("Schema type must be 'object'")
163
+
164
+ if "properties" not in schema:
165
+ raise ValueError("Schema must have 'properties' field")
166
+
167
+ if not isinstance(schema["properties"], dict):
168
+ raise ValueError("Schema properties must be a dictionary")
169
+
170
+ # Check all required fields exist in properties
171
+ required = schema.get("required", [])
172
+ properties = schema["properties"]
173
+
174
+ for field in required:
175
+ if field not in properties:
176
+ raise ValueError(f"Required field '{field}' not found in properties")
177
+
178
+ # Check all properties have descriptions
179
+ for field_name, field_schema in properties.items():
180
+ if "description" not in field_schema and "$ref" not in field_schema:
181
+ raise ValueError(
182
+ f"Field '{field_name}' missing description. "
183
+ "All fields must have descriptions for Claude tool definitions."
184
+ )
@@ -0,0 +1,451 @@
1
+ Metadata-Version: 2.4
2
+ Name: honeycomb-api
3
+ Version: 0.1.0
4
+ Summary: Python client for the Honeycomb.io API
5
+ License-Expression: MIT
6
+ License-File: LICENSE
7
+ Keywords: honeycomb,observability,api,client,sdk
8
+ Author: Irving Popovetsky
9
+ Requires-Python: >=3.10
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Typing :: Typed
18
+ Requires-Dist: attrs (>=23.0)
19
+ Requires-Dist: httpx (>=0.27)
20
+ Requires-Dist: pydantic (>=2.0)
21
+ Requires-Dist: pytest-xdist (>=3.8.0,<4.0.0)
22
+ Requires-Dist: python-dateutil (>=2.8)
23
+ Project-URL: Homepage, https://github.com/irvingpop/honeycomb-api-python
24
+ Project-URL: Repository, https://github.com/irvingpop/honeycomb-api-python
25
+ Description-Content-Type: text/markdown
26
+
27
+ # honeycomb-api-python
28
+
29
+ A modern, async-first Python client for the [Honeycomb.io](https://www.honeycomb.io/) API.
30
+
31
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
32
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
33
+ [![Code style: ruff](https://img.shields.io/badge/code%20style-ruff-000000.svg)](https://github.com/astral-sh/ruff)
34
+
35
+ 📚 **[Read the full documentation](https://irvingpop.github.io/honeycomb-api-python/)**
36
+
37
+ ## Features
38
+
39
+ - **Async-first design** with full sync support
40
+ - **Fluent builder pattern** for queries, triggers, SLOs, and boards
41
+ - **Pydantic models** for type-safe request/response handling
42
+ - **Automatic retries** with exponential backoff for transient failures
43
+ - **Comprehensive error handling** with specific exception types
44
+ - **Dual authentication** support (API keys and Management keys)
45
+ - **Resource-oriented API** for intuitive usage
46
+
47
+ ## Installation (coming soon)
48
+
49
+ ```bash
50
+ pip install honeycomb-api-python
51
+ ```
52
+
53
+ Or with Poetry:
54
+
55
+ ```bash
56
+ poetry add honeycomb-api-python
57
+ ```
58
+
59
+ ## Quick Start
60
+
61
+ ### Async Usage (Recommended)
62
+
63
+ ```python
64
+ import asyncio
65
+ from honeycomb import HoneycombClient, QueryBuilder
66
+
67
+ async def main():
68
+ async with HoneycombClient(api_key="your-api-key") as client:
69
+ # List all datasets
70
+ datasets = await client.datasets.list_async()
71
+ for ds in datasets:
72
+ print(f"Dataset: {ds.name} ({ds.slug})")
73
+
74
+ # Run a query using the fluent QueryBuilder
75
+ query, result = await client.query_results.create_and_run_async(
76
+ QueryBuilder("Error Analysis") # Optional name for board integration
77
+ .dataset("my-dataset") # Dataset scope on builder
78
+ .last_24_hours() # Time preset matching Honeycomb UI
79
+ .count()
80
+ .p99("duration_ms")
81
+ .avg("duration_ms")
82
+ .gte("status_code", 500) # Filter shortcuts: gte, eq, contains, etc.
83
+ .group_by("service", "endpoint")
84
+ .order_by_count()
85
+ .limit(100)
86
+ )
87
+
88
+ for row in result.data.rows:
89
+ print(f"Service: {row['service']}, Count: {row['COUNT']}, P99: {row['P99']}")
90
+
91
+ asyncio.run(main())
92
+ ```
93
+
94
+ ### Sync Usage
95
+
96
+ ```python
97
+ from honeycomb import HoneycombClient, QueryBuilder
98
+
99
+ with HoneycombClient(api_key="your-api-key", sync=True) as client:
100
+ datasets = client.datasets.list()
101
+
102
+ # Run queries with the same fluent API
103
+ query, result = client.query_results.create_and_run(
104
+ QueryBuilder()
105
+ .dataset("my-dataset")
106
+ .last_1_hour()
107
+ .count()
108
+ .group_by("endpoint"),
109
+ )
110
+ ```
111
+
112
+ ## Builders with resource mixins
113
+
114
+ ### TriggerBuilder
115
+
116
+ ```python
117
+ from honeycomb import TriggerBuilder
118
+
119
+ # Create sophisticated alert in one fluent call
120
+ trigger = await client.triggers.create_async(
121
+ "api-logs",
122
+ TriggerBuilder("High Error Rate")
123
+ .dataset("api-logs") # Or .environment_wide() for all datasets
124
+ .last_15_minutes() # Frequency presets
125
+ .count()
126
+ .gte("status_code", 500)
127
+ .threshold_gt(100) # Threshold shortcuts
128
+ .email("oncall@example.com") # Multiple recipients
129
+ .pagerduty("critical")
130
+ .slack("#incidents")
131
+ .tag("team", "backend") # Tag support with validation
132
+ .build()
133
+ )
134
+ ```
135
+
136
+ ### SLOBuilder
137
+
138
+ ```python
139
+ from honeycomb import SLOBuilder
140
+
141
+ # Create SLO with derived column and burn alerts automatically
142
+ slos = await client.slos.create_from_bundle_async(
143
+ SLOBuilder("API Availability")
144
+ .dataset("api-logs")
145
+ .target_nines(3) # 99.9% = .target_percentage(99.9)
146
+ .time_period_days(30)
147
+ .sli(
148
+ alias="success_rate",
149
+ expression="IF(LT($status_code, 400), 1, 0)",
150
+ description="Success indicator"
151
+ )
152
+ # Burn alerts with integrated recipients
153
+ .exhaustion_alert(exhaustion_minutes=15)
154
+ .budget_rate_alert(window_minutes=60, threshold_percentage=10)
155
+ .email("sre@example.com")
156
+ .pagerduty("critical")
157
+ .build()
158
+ )
159
+ ```
160
+
161
+ ### BoardBuilder
162
+
163
+ ```python
164
+ from honeycomb import BoardBuilder, QueryBuilder, SLOBuilder
165
+
166
+ # Create board with inline queries and SLOs - no pre-creation needed!
167
+ board = await client.boards.create_from_bundle_async(
168
+ BoardBuilder("Production Dashboard")
169
+ .description("Service health monitoring")
170
+ .auto_layout()
171
+ .tag("team", "platform")
172
+ # Inline QueryBuilder - creates query automatically
173
+ .query(
174
+ QueryBuilder("Request Count")
175
+ .dataset("api-logs")
176
+ .last_24_hours()
177
+ .count()
178
+ .group_by("service"),
179
+ style="graph"
180
+ )
181
+ # Inline SLOBuilder - creates SLO automatically
182
+ .slo(
183
+ SLOBuilder("API Availability")
184
+ .dataset("api-logs")
185
+ .target_nines(3)
186
+ .sli(alias="sli_success")
187
+ )
188
+ # Environment-wide query
189
+ .query(
190
+ QueryBuilder("P99 Latency")
191
+ .environment_wide() # All datasets
192
+ .last_1_hour()
193
+ .p99("duration_ms")
194
+ .group_by("endpoint"),
195
+ style="table"
196
+ )
197
+ .build()
198
+ )
199
+ ```
200
+
201
+ See [full documentation](https://irvingpop.github.io/honeycomb-api-python/) for more examples and advanced features.
202
+
203
+ ## Authentication
204
+
205
+ The client supports two authentication methods:
206
+
207
+ ### API Key (Single Environment)
208
+
209
+ For accessing a single Honeycomb environment:
210
+
211
+ ```python
212
+ client = HoneycombClient(api_key="your-api-key")
213
+ ```
214
+
215
+ The API key is sent via the `X-Honeycomb-Team` header.
216
+
217
+ ### Management Key (Multi-Environment)
218
+
219
+ For management operations across multiple environments:
220
+
221
+ ```python
222
+ client = HoneycombClient(
223
+ management_key="your-key-id",
224
+ management_secret="your-key-secret"
225
+ )
226
+ ```
227
+
228
+ Management credentials are sent via the `Authorization: Bearer` header.
229
+
230
+ ## Usage Guide
231
+
232
+ For complete usage examples and guides, see the [full documentation](https://irvingpop.github.io/honeycomb-api-python/):
233
+
234
+ - [Quick Start Guide](https://irvingpop.github.io/honeycomb-api-python/getting-started/quickstart/) - Common operations with examples
235
+ - [Working with Queries](https://irvingpop.github.io/honeycomb-api-python/usage/queries/) - Saved, ephemeral, and combined query patterns
236
+ - [Working with Triggers](https://irvingpop.github.io/honeycomb-api-python/usage/triggers/) - Alert configuration
237
+ - [Working with SLOs](https://irvingpop.github.io/honeycomb-api-python/usage/slos/) - Service level objectives
238
+ - [API Reference](https://irvingpop.github.io/honeycomb-api-python/api/resources/) - Complete API documentation
239
+
240
+ ## Error Handling
241
+
242
+ The client provides specific exception types for different error scenarios (authentication, rate limiting, validation, etc.). All exceptions include useful debugging information like HTTP status codes and request IDs for support tickets.
243
+
244
+ See the [Error Handling Guide](https://irvingpop.github.io/honeycomb-api-python/advanced/error-handling/) for complete documentation and best practices.
245
+
246
+ ## Configuration
247
+
248
+ ### Client Options
249
+
250
+ ```python
251
+ from honeycomb import HoneycombClient, RetryConfig
252
+
253
+ client = HoneycombClient(
254
+ api_key="...", # API key for single-environment access
255
+ management_key="...", # Management key ID (alternative auth)
256
+ management_secret="...", # Management key secret
257
+ base_url="https://api.honeycomb.io", # API base URL (default)
258
+ timeout=30.0, # Request timeout in seconds (default: 30)
259
+ max_retries=3, # Max retry attempts (default: 3)
260
+ retry_config=None, # Custom retry configuration (optional)
261
+ sync=False, # Use sync mode (default: False)
262
+ )
263
+ ```
264
+
265
+ ### Retry Behavior
266
+
267
+ The client automatically retries requests on:
268
+ - HTTP 429 (Rate Limited) - respects `Retry-After` header
269
+ - HTTP 500, 502, 503, 504 (Server Errors)
270
+ - Connection timeouts
271
+
272
+ Retries use exponential backoff: 1s, 2s, 4s, ... up to 30s max.
273
+
274
+ #### Custom Retry Configuration
275
+
276
+ ```python
277
+ from honeycomb import HoneycombClient, RetryConfig
278
+
279
+ # Customize retry behavior
280
+ retry_config = RetryConfig(
281
+ max_retries=5, # More retry attempts
282
+ base_delay=2.0, # Start with 2s delay
283
+ max_delay=60.0, # Cap at 60s
284
+ exponential_base=2.0, # Double each time
285
+ retry_statuses={429, 503}, # Only retry these status codes
286
+ )
287
+
288
+ client = HoneycombClient(api_key="...", retry_config=retry_config)
289
+ ```
290
+
291
+ ## API Reference
292
+
293
+ The client provides resource-oriented access to the Honeycomb API:
294
+
295
+ **Core Resources:**
296
+ - `client.datasets` - Dataset management
297
+ - `client.triggers` - Alert triggers
298
+ - `client.slos` - Service level objectives
299
+ - `client.boards` - Dashboards
300
+ - `client.queries` - Saved queries
301
+ - `client.query_results` - Query execution
302
+
303
+ **Data Management:**
304
+ - `client.columns` - Column schema management
305
+ - `client.markers` - Event markers and annotations
306
+ - `client.recipients` - Notification recipients
307
+ - `client.burn_alerts` - SLO burn rate alerts
308
+ - `client.events` - Event ingestion (send data to Honeycomb)
309
+
310
+ **Team Management (v2 - requires Management Key):**
311
+ - `client.api_keys` - API key management (team-scoped)
312
+ - `client.environments` - Environment management (team-scoped)
313
+
314
+ All methods have both sync and async variants (`list()` / `list_async()`).
315
+
316
+ See the [API Reference](https://irvingpop.github.io/honeycomb-api-python/api/resources/) for complete documentation.
317
+
318
+ ## Development
319
+
320
+ ### Prerequisites
321
+
322
+ - Python 3.10+
323
+ - [Poetry](https://python-poetry.org/) for dependency management
324
+ - [direnv](https://direnv.net/) (optional, for environment management)
325
+ - Make
326
+
327
+ ### Setup
328
+
329
+ ```bash
330
+ # Clone the repository
331
+ git clone https://github.com/irvingpop/honeycomb-api-python.git
332
+ cd honeycomb-api-python
333
+
334
+ # Install dependencies
335
+ make install-dev
336
+ # Or: poetry install
337
+
338
+ # Set up environment variables (for live API testing)
339
+ cp .envrc.example .envrc
340
+ # Edit .envrc with your API key
341
+ direnv allow
342
+ ```
343
+
344
+ ### Make Commands
345
+
346
+ All common development tasks are available via `make`. Run `make help` for a full list:
347
+
348
+ ```bash
349
+ make help # Show all available commands
350
+ ```
351
+
352
+ #### Setup
353
+ | Command | Description |
354
+ |---------|-------------|
355
+ | `make install` | Install poetry production dependencies only |
356
+ | `make install-dev` | Install all poetry dependencies (including dev) |
357
+
358
+ #### Code Quality
359
+ | Command | Description |
360
+ |---------|-------------|
361
+ | `make lint` | Run linter (ruff check) |
362
+ | `make lint-fix` | Run linter and auto-fix issues |
363
+ | `make format` | Format code with ruff |
364
+ | `make typecheck` | Run type checker (mypy) |
365
+ | `make check` | Run all checks (lint + typecheck) |
366
+
367
+ #### Testing
368
+ | Command | Description |
369
+ |---------|-------------|
370
+ | `make test` | Run all tests |
371
+ | `make test-unit` | Run only unit tests |
372
+ | `make test-cov` | Run tests with coverage report |
373
+ | `make test-live` | Run live API tests (requires `HONEYCOMB_API_KEY`) |
374
+
375
+ #### Build & Publish
376
+ | Command | Description |
377
+ |---------|-------------|
378
+ | `make build` | Build distribution packages |
379
+ | `make publish` | Publish to PyPI |
380
+ | `make publish-test` | Publish to Test PyPI |
381
+
382
+ #### Maintenance
383
+ | Command | Description |
384
+ |---------|-------------|
385
+ | `make clean` | Remove build artifacts and cache files |
386
+ | `make update-deps` | Update dependencies to latest versions |
387
+ | `make ci` | Run full CI pipeline (install, check, test) |
388
+
389
+ ### Running Tests (Manual)
390
+
391
+ ```bash
392
+ # Run all tests
393
+ make test
394
+ # Or: poetry run pytest tests/ -v
395
+
396
+ # Run with coverage
397
+ make test-cov
398
+ # Or: poetry run pytest --cov=honeycomb --cov-report=html
399
+
400
+ # Run specific test file
401
+ poetry run pytest tests/unit/test_wrapper_client.py -v
402
+ ```
403
+
404
+ ### Code Quality (Manual)
405
+
406
+ ```bash
407
+ # Run all checks
408
+ make check
409
+
410
+ # Or run individually:
411
+ poetry run ruff check src/ tests/ # Linting
412
+ poetry run ruff format src/ tests/ # Formatting
413
+ poetry run mypy src/ # Type checking
414
+ ```
415
+
416
+ ## Contributing
417
+
418
+ Contributions are welcome! Please follow these steps:
419
+
420
+ 1. Fork the repository
421
+ 2. Create a feature branch (`git checkout -b feature/amazing-feature`)
422
+ 3. Make your changes
423
+ 4. Run checks and tests (`make check && make test`)
424
+ 5. Commit your changes (`git commit -m 'Add amazing feature'`)
425
+ 6. Push to the branch (`git push origin feature/amazing-feature`)
426
+ 7. Open a Pull Request
427
+
428
+ ### Guidelines
429
+
430
+ - Follow the existing code style (enforced by Ruff)
431
+ - Add tests for new functionality
432
+ - Update documentation as needed
433
+ - Keep commits focused and atomic
434
+ - Run `make ci` before submitting to ensure all checks pass
435
+
436
+ ## License
437
+
438
+ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
439
+
440
+ ## Related Links
441
+
442
+ - [Honeycomb Documentation](https://docs.honeycomb.io/)
443
+ - [Honeycomb API Reference](https://docs.honeycomb.io/api/)
444
+ - [Issue Tracker](https://github.com/irvingpop/honeycomb-api-python/issues)
445
+
446
+ ## Acknowledgments
447
+
448
+ - Built with [httpx](https://www.python-httpx.org/) for async HTTP
449
+ - Models powered by [Pydantic](https://docs.pydantic.dev/)
450
+ - API spec from [Honeycomb OpenAPI](https://docs.honeycomb.io/api/)
451
+