honeycomb-api 0.1.0__py3-none-any.whl → 0.5.3__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 (443) hide show
  1. honeycomb/__init__.py +9 -0
  2. honeycomb/_generated/api/auth/get_auth.py +2 -5
  3. honeycomb/_generated/api/auth/get_v2_auth.py +2 -5
  4. honeycomb/_generated/api/boards/create_board.py +6 -5
  5. honeycomb/_generated/api/boards/create_board_view.py +14 -9
  6. honeycomb/_generated/api/boards/delete_board.py +2 -5
  7. honeycomb/_generated/api/boards/delete_board_view.py +2 -5
  8. honeycomb/_generated/api/boards/get_board.py +2 -5
  9. honeycomb/_generated/api/boards/get_board_view.py +2 -5
  10. honeycomb/_generated/api/boards/list_board_views.py +10 -9
  11. honeycomb/_generated/api/boards/list_boards.py +2 -5
  12. honeycomb/_generated/api/boards/update_board.py +10 -5
  13. honeycomb/_generated/api/boards/update_board_view.py +2 -5
  14. honeycomb/_generated/api/burn_alerts/create_burn_alert.py +6 -8
  15. honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +2 -5
  16. honeycomb/_generated/api/burn_alerts/get_burn_alert.py +2 -5
  17. honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +2 -5
  18. honeycomb/_generated/api/calculated_fields/create_calculated_field.py +2 -5
  19. honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +2 -5
  20. honeycomb/_generated/api/calculated_fields/get_calculated_field.py +2 -5
  21. honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +2 -8
  22. honeycomb/_generated/api/calculated_fields/update_calculated_field.py +2 -5
  23. honeycomb/_generated/api/columns/create_column.py +2 -5
  24. honeycomb/_generated/api/columns/delete_column.py +2 -5
  25. honeycomb/_generated/api/columns/get_column.py +2 -5
  26. honeycomb/_generated/api/columns/list_columns.py +2 -8
  27. honeycomb/_generated/api/columns/update_column.py +2 -5
  28. honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +2 -5
  29. honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +2 -5
  30. honeycomb/_generated/api/datasets/create_dataset.py +2 -5
  31. honeycomb/_generated/api/datasets/delete_dataset.py +2 -5
  32. honeycomb/_generated/api/datasets/get_dataset.py +2 -5
  33. honeycomb/_generated/api/datasets/list_datasets.py +2 -5
  34. honeycomb/_generated/api/datasets/update_dataset.py +2 -5
  35. honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +4 -6
  36. honeycomb/_generated/api/environments/create_environment.py +2 -5
  37. honeycomb/_generated/api/environments/delete_environment.py +2 -5
  38. honeycomb/_generated/api/environments/get_environment.py +2 -5
  39. honeycomb/_generated/api/environments/list_environments.py +2 -7
  40. honeycomb/_generated/api/environments/update_environment.py +2 -5
  41. honeycomb/_generated/api/events/create_event.py +2 -7
  42. honeycomb/_generated/api/events/create_events.py +7 -11
  43. honeycomb/_generated/api/key_management/create_api_key.py +2 -5
  44. honeycomb/_generated/api/key_management/delete_api_key.py +2 -5
  45. honeycomb/_generated/api/key_management/get_api_key.py +2 -5
  46. honeycomb/_generated/api/key_management/list_api_keys.py +2 -7
  47. honeycomb/_generated/api/key_management/update_api_key.py +2 -5
  48. honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +2 -5
  49. honeycomb/_generated/api/marker_settings/create_marker_setting.py +2 -5
  50. honeycomb/_generated/api/marker_settings/delete_marker_settings.py +2 -5
  51. honeycomb/_generated/api/marker_settings/list_marker_settings.py +2 -5
  52. honeycomb/_generated/api/marker_settings/update_marker_settings.py +2 -5
  53. honeycomb/_generated/api/markers/create_marker.py +2 -5
  54. honeycomb/_generated/api/markers/create_marker_v2.py +2 -5
  55. honeycomb/_generated/api/markers/delete_marker.py +2 -5
  56. honeycomb/_generated/api/markers/get_marker.py +2 -5
  57. honeycomb/_generated/api/markers/update_marker.py +2 -5
  58. honeycomb/_generated/api/markers/update_marker_v2.py +2 -5
  59. honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +4 -8
  60. honeycomb/_generated/api/pipelines/record_pipeline_usage.py +4 -6
  61. honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +6 -7
  62. honeycomb/_generated/api/queries/create_query.py +2 -5
  63. honeycomb/_generated/api/queries/get_query.py +2 -5
  64. honeycomb/_generated/api/query_annotations/create_query_annotation.py +2 -5
  65. honeycomb/_generated/api/query_annotations/delete_query_annotation.py +2 -5
  66. honeycomb/_generated/api/query_annotations/get_query_annotation.py +2 -5
  67. honeycomb/_generated/api/query_annotations/list_query_annotations.py +2 -7
  68. honeycomb/_generated/api/query_annotations/update_query_annotation.py +2 -5
  69. honeycomb/_generated/api/query_data/create_query_result.py +2 -5
  70. honeycomb/_generated/api/query_data/get_query_result.py +2 -5
  71. honeycomb/_generated/api/recipients/create_recipient.py +2 -6
  72. honeycomb/_generated/api/recipients/delete_recipient.py +2 -5
  73. honeycomb/_generated/api/recipients/get_recipient.py +2 -6
  74. honeycomb/_generated/api/recipients/list_recipients.py +2 -6
  75. honeycomb/_generated/api/recipients/update_recipient.py +2 -6
  76. honeycomb/_generated/api/reporting/get_slo_history.py +2 -5
  77. honeycomb/_generated/api/service_maps/create_map_dependency_request.py +6 -9
  78. honeycomb/_generated/api/service_maps/get_map_dependencies.py +2 -7
  79. honeycomb/_generated/api/sl_os/create_slo.py +2 -5
  80. honeycomb/_generated/api/sl_os/delete_slo.py +2 -5
  81. honeycomb/_generated/api/sl_os/get_slo.py +2 -8
  82. honeycomb/_generated/api/sl_os/list_slos.py +2 -5
  83. honeycomb/_generated/api/sl_os/update_slo.py +2 -5
  84. honeycomb/_generated/api/triggers/create_trigger.py +2 -6
  85. honeycomb/_generated/api/triggers/delete_trigger.py +2 -5
  86. honeycomb/_generated/api/triggers/get_trigger.py +2 -5
  87. honeycomb/_generated/api/triggers/list_triggers.py +2 -5
  88. honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +2 -5
  89. honeycomb/_generated/api/triggers/update_trigger.py +2 -5
  90. honeycomb/_generated/client.py +2 -5
  91. honeycomb/_generated/models/__init__.py +195 -88
  92. honeycomb/_generated/models/api_key_create_request.py +6 -5
  93. honeycomb/_generated/models/api_key_create_request_data.py +15 -11
  94. honeycomb/_generated/models/api_key_create_request_data_relationships.py +2 -3
  95. honeycomb/_generated/models/api_key_create_request_data_type.py +1 -0
  96. honeycomb/_generated/models/api_key_list_response.py +2 -5
  97. honeycomb/_generated/models/api_key_object.py +14 -14
  98. honeycomb/_generated/models/api_key_object_links.py +2 -9
  99. honeycomb/_generated/models/api_key_object_relationships.py +5 -9
  100. honeycomb/_generated/models/api_key_object_type.py +1 -0
  101. honeycomb/_generated/models/api_key_response.py +2 -3
  102. honeycomb/_generated/models/api_key_update_request.py +15 -17
  103. honeycomb/_generated/models/auth.py +2 -5
  104. honeycomb/_generated/models/auth_api_key_access.py +2 -9
  105. honeycomb/_generated/models/auth_environment.py +2 -9
  106. honeycomb/_generated/models/auth_team.py +2 -9
  107. honeycomb/_generated/models/auth_type.py +1 -0
  108. honeycomb/_generated/models/auth_v2_response.py +5 -8
  109. honeycomb/_generated/models/auth_v2_response_data.py +14 -11
  110. honeycomb/_generated/models/auth_v2_response_data_attributes.py +10 -9
  111. honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +1 -0
  112. honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +4 -12
  113. honeycomb/_generated/models/auth_v2_response_data_relationships.py +1 -7
  114. honeycomb/_generated/models/auth_v2_response_data_type.py +1 -0
  115. honeycomb/_generated/models/base_trigger.py +21 -18
  116. honeycomb/_generated/models/base_trigger_alert_type.py +1 -0
  117. honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +5 -9
  118. honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +1 -0
  119. honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +1 -0
  120. honeycomb/_generated/models/base_trigger_evaluation_schedule.py +8 -6
  121. honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +1 -0
  122. honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +4 -9
  123. honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +1 -0
  124. honeycomb/_generated/models/base_trigger_threshold.py +2 -9
  125. honeycomb/_generated/models/base_trigger_threshold_op.py +1 -0
  126. honeycomb/_generated/models/batch_event.py +2 -5
  127. honeycomb/_generated/models/board.py +15 -17
  128. honeycomb/_generated/models/board_layout_generation.py +1 -0
  129. honeycomb/_generated/models/board_links.py +2 -9
  130. honeycomb/_generated/models/board_panel_position.py +2 -9
  131. honeycomb/_generated/models/board_query_visualization_settings.py +8 -8
  132. honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +4 -10
  133. honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +1 -0
  134. honeycomb/_generated/models/board_type.py +1 -0
  135. honeycomb/_generated/models/board_view_filter.py +2 -9
  136. honeycomb/_generated/models/board_view_filter_operation.py +1 -0
  137. honeycomb/_generated/models/board_view_response.py +2 -5
  138. honeycomb/_generated/models/budget_rate.py +4 -12
  139. honeycomb/_generated/models/budget_rate_alert_type.py +1 -0
  140. honeycomb/_generated/models/burn_alert_shared_params.py +4 -12
  141. honeycomb/_generated/models/calculated_field.py +2 -9
  142. honeycomb/_generated/models/configuration_key_attributes.py +16 -12
  143. honeycomb/_generated/models/configuration_key_attributes_key_type.py +1 -0
  144. honeycomb/_generated/models/configuration_key_attributes_permissions.py +172 -0
  145. honeycomb/_generated/models/configuration_key_attributes_timestamps.py +4 -12
  146. honeycomb/_generated/models/configuration_key_request.py +101 -0
  147. honeycomb/_generated/models/configuration_key_request_attributes.py +107 -0
  148. honeycomb/_generated/models/configuration_key_request_attributes_permissions.py +168 -0
  149. honeycomb/_generated/models/configuration_key_request_type.py +8 -0
  150. honeycomb/_generated/models/create_board_view_request.py +2 -3
  151. honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +10 -10
  152. honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +1 -7
  153. honeycomb/_generated/models/create_column.py +2 -9
  154. honeycomb/_generated/models/create_column_type.py +1 -0
  155. honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +8 -6
  156. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +10 -7
  157. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +8 -8
  158. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +8 -6
  159. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
  160. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
  161. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
  162. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
  163. 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 +1 -0
  164. 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 +8 -6
  165. 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 +8 -6
  166. 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 +2 -9
  167. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +1 -0
  168. honeycomb/_generated/models/create_environment_request.py +8 -6
  169. honeycomb/_generated/models/create_environment_request_data.py +10 -7
  170. honeycomb/_generated/models/create_environment_request_data_attributes.py +2 -9
  171. honeycomb/_generated/models/create_environment_request_data_type.py +1 -0
  172. honeycomb/_generated/models/create_events_content_encoding.py +1 -0
  173. honeycomb/_generated/models/create_events_response_200_item.py +2 -9
  174. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +10 -10
  175. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +1 -7
  176. honeycomb/_generated/models/create_map_dependencies_request.py +2 -5
  177. honeycomb/_generated/models/create_map_dependencies_response.py +4 -10
  178. honeycomb/_generated/models/create_map_dependencies_response_status.py +1 -0
  179. honeycomb/_generated/models/create_pipeline_health_record_request.py +8 -6
  180. honeycomb/_generated/models/create_pipeline_health_record_request_data.py +10 -7
  181. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +8 -8
  182. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +8 -6
  183. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
  184. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
  185. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
  186. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
  187. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +1 -0
  188. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +8 -6
  189. 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 +8 -6
  190. 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 +2 -9
  191. honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +1 -0
  192. honeycomb/_generated/models/create_query_result_request.py +2 -9
  193. honeycomb/_generated/models/dataset.py +2 -6
  194. honeycomb/_generated/models/dataset_creation_payload.py +2 -9
  195. honeycomb/_generated/models/dataset_definition_type_1.py +4 -10
  196. honeycomb/_generated/models/dataset_definition_type_1_column_type.py +1 -0
  197. honeycomb/_generated/models/dataset_definitions.py +2 -6
  198. honeycomb/_generated/models/dataset_relationship.py +2 -3
  199. honeycomb/_generated/models/dataset_relationship_data.py +2 -8
  200. honeycomb/_generated/models/dataset_relationship_data_type.py +1 -0
  201. honeycomb/_generated/models/dataset_settings.py +2 -9
  202. honeycomb/_generated/models/dataset_update_payload.py +8 -8
  203. honeycomb/_generated/models/dataset_update_payload_settings.py +2 -9
  204. honeycomb/_generated/models/detailed_error.py +2 -9
  205. honeycomb/_generated/models/email_recipient.py +4 -7
  206. honeycomb/_generated/models/email_recipient_details.py +1 -7
  207. honeycomb/_generated/models/email_recipient_type.py +1 -0
  208. honeycomb/_generated/models/environment.py +6 -7
  209. honeycomb/_generated/models/environment_attributes.py +11 -9
  210. honeycomb/_generated/models/environment_attributes_color_type_1.py +1 -0
  211. honeycomb/_generated/models/environment_attributes_settings.py +1 -7
  212. honeycomb/_generated/models/environment_color.py +1 -0
  213. honeycomb/_generated/models/environment_links.py +1 -7
  214. honeycomb/_generated/models/environment_list_response.py +2 -5
  215. honeycomb/_generated/models/environment_relationship.py +8 -6
  216. honeycomb/_generated/models/environment_relationship_data.py +3 -8
  217. honeycomb/_generated/models/environment_relationship_data_type.py +1 -0
  218. honeycomb/_generated/models/environment_response.py +2 -3
  219. honeycomb/_generated/models/environment_type.py +1 -0
  220. honeycomb/_generated/models/error.py +2 -9
  221. honeycomb/_generated/models/event.py +2 -8
  222. honeycomb/_generated/models/exhaustion_time.py +4 -12
  223. honeycomb/_generated/models/exhaustion_time_alert_type.py +1 -0
  224. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +10 -10
  225. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +2 -9
  226. honeycomb/_generated/models/filter_op.py +1 -0
  227. honeycomb/_generated/models/get_map_dependencies_response.py +7 -10
  228. honeycomb/_generated/models/get_map_dependencies_response_status.py +1 -0
  229. honeycomb/_generated/models/having_calculate_op.py +1 -0
  230. honeycomb/_generated/models/having_op.py +1 -0
  231. honeycomb/_generated/models/included_resource.py +6 -7
  232. honeycomb/_generated/models/included_resource_attributes.py +1 -7
  233. honeycomb/_generated/models/ingest_key_attributes.py +14 -11
  234. honeycomb/_generated/models/ingest_key_attributes_key_type.py +1 -0
  235. honeycomb/_generated/models/ingest_key_attributes_permissions.py +2 -9
  236. honeycomb/_generated/models/ingest_key_attributes_timestamps.py +4 -12
  237. honeycomb/_generated/models/ingest_key_request.py +100 -0
  238. honeycomb/_generated/models/ingest_key_request_attributes.py +75 -0
  239. honeycomb/_generated/models/ingest_key_request_type.py +8 -0
  240. honeycomb/_generated/models/ingest_key_type.py +2 -9
  241. honeycomb/_generated/models/ingest_key_type_key_type.py +1 -0
  242. honeycomb/_generated/models/jsonapi_error_source.py +2 -9
  243. honeycomb/_generated/models/kinesis_event.py +2 -5
  244. honeycomb/_generated/models/kinesis_event_record.py +2 -9
  245. honeycomb/_generated/models/kinesis_response.py +2 -9
  246. honeycomb/_generated/models/list_api_keys_filtertype.py +1 -0
  247. honeycomb/_generated/models/map_dependency.py +2 -5
  248. honeycomb/_generated/models/map_node.py +2 -9
  249. honeycomb/_generated/models/map_node_type.py +1 -0
  250. honeycomb/_generated/models/marker.py +2 -9
  251. honeycomb/_generated/models/marker_create_request.py +2 -3
  252. honeycomb/_generated/models/marker_create_request_data.py +16 -10
  253. honeycomb/_generated/models/marker_create_request_data_attributes.py +2 -9
  254. honeycomb/_generated/models/marker_create_request_data_relationships.py +2 -3
  255. honeycomb/_generated/models/marker_create_request_data_type.py +1 -0
  256. honeycomb/_generated/models/marker_object.py +7 -8
  257. honeycomb/_generated/models/marker_object_attributes.py +8 -8
  258. honeycomb/_generated/models/marker_object_attributes_timestamps.py +4 -12
  259. honeycomb/_generated/models/marker_object_links.py +2 -9
  260. honeycomb/_generated/models/marker_object_relationships.py +8 -8
  261. honeycomb/_generated/models/marker_object_relationships_dataset.py +8 -9
  262. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +4 -10
  263. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +1 -0
  264. honeycomb/_generated/models/marker_object_type.py +1 -0
  265. honeycomb/_generated/models/marker_response.py +2 -3
  266. honeycomb/_generated/models/marker_setting.py +2 -10
  267. honeycomb/_generated/models/marker_update_request.py +2 -3
  268. honeycomb/_generated/models/marker_update_request_data.py +16 -10
  269. honeycomb/_generated/models/marker_update_request_data_attributes.py +2 -9
  270. honeycomb/_generated/models/marker_update_request_data_relationships.py +2 -3
  271. honeycomb/_generated/models/marker_update_request_data_type.py +1 -0
  272. honeycomb/_generated/models/ms_teams_recipient.py +4 -7
  273. honeycomb/_generated/models/ms_teams_recipient_details.py +1 -7
  274. honeycomb/_generated/models/ms_teams_recipient_type.py +1 -0
  275. honeycomb/_generated/models/ms_teams_workflow_recipient.py +12 -11
  276. honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +1 -7
  277. honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +1 -0
  278. honeycomb/_generated/models/notification_recipient.py +8 -8
  279. honeycomb/_generated/models/notification_recipient_details.py +10 -9
  280. honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +1 -0
  281. honeycomb/_generated/models/notification_recipient_details_variables_item.py +2 -9
  282. honeycomb/_generated/models/pager_duty_recipient.py +8 -9
  283. honeycomb/_generated/models/pager_duty_recipient_details.py +1 -7
  284. honeycomb/_generated/models/pager_duty_recipient_type.py +1 -0
  285. honeycomb/_generated/models/pagination_links.py +2 -8
  286. honeycomb/_generated/models/payload_template.py +2 -9
  287. honeycomb/_generated/models/pipeline_configuration_response.py +16 -10
  288. honeycomb/_generated/models/pipeline_configuration_response_attributes.py +8 -8
  289. honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +1 -7
  290. honeycomb/_generated/models/pipeline_configuration_response_links.py +2 -9
  291. honeycomb/_generated/models/pipeline_configuration_response_type.py +1 -0
  292. honeycomb/_generated/models/pipeline_configuration_rollout.py +16 -10
  293. honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +3 -8
  294. honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +1 -0
  295. honeycomb/_generated/models/pipeline_configuration_rollout_links.py +2 -9
  296. honeycomb/_generated/models/pipeline_configuration_rollout_type.py +1 -0
  297. honeycomb/_generated/models/preset_filter.py +1 -7
  298. honeycomb/_generated/models/query.py +11 -11
  299. honeycomb/_generated/models/query_annotation.py +4 -12
  300. honeycomb/_generated/models/query_annotation_source.py +1 -0
  301. honeycomb/_generated/models/query_calculated_fields_item.py +1 -7
  302. honeycomb/_generated/models/query_calculations_item.py +2 -10
  303. honeycomb/_generated/models/query_compare_time_offset_seconds.py +1 -0
  304. honeycomb/_generated/models/query_filter_combination.py +1 -0
  305. honeycomb/_generated/models/query_filters_item.py +2 -11
  306. honeycomb/_generated/models/query_havings_item.py +2 -10
  307. honeycomb/_generated/models/query_op.py +1 -0
  308. honeycomb/_generated/models/query_orders_item.py +2 -9
  309. honeycomb/_generated/models/query_orders_item_order.py +1 -0
  310. honeycomb/_generated/models/query_panel.py +2 -6
  311. honeycomb/_generated/models/query_panel_query_panel.py +10 -9
  312. honeycomb/_generated/models/query_panel_query_panel_query_style.py +1 -0
  313. honeycomb/_generated/models/query_result.py +2 -5
  314. honeycomb/_generated/models/query_result_details.py +5 -8
  315. honeycomb/_generated/models/query_result_details_data.py +5 -8
  316. honeycomb/_generated/models/query_result_details_links.py +2 -9
  317. honeycomb/_generated/models/query_result_links.py +2 -9
  318. honeycomb/_generated/models/query_results_data.py +2 -5
  319. honeycomb/_generated/models/query_results_data_data.py +2 -8
  320. honeycomb/_generated/models/query_results_series.py +2 -5
  321. honeycomb/_generated/models/recipient_properties.py +4 -12
  322. honeycomb/_generated/models/recipient_type.py +1 -0
  323. honeycomb/_generated/models/slack_recipient.py +4 -7
  324. honeycomb/_generated/models/slack_recipient_details.py +1 -7
  325. honeycomb/_generated/models/slack_recipient_type.py +1 -0
  326. honeycomb/_generated/models/slo.py +4 -8
  327. honeycomb/_generated/models/slo_create.py +4 -8
  328. honeycomb/_generated/models/slo_create_sli.py +1 -7
  329. honeycomb/_generated/models/slo_detailed_response.py +4 -8
  330. honeycomb/_generated/models/slo_detailed_response_status.py +1 -0
  331. honeycomb/_generated/models/slo_history.py +2 -9
  332. honeycomb/_generated/models/slo_history_request.py +2 -8
  333. honeycomb/_generated/models/slo_history_response.py +2 -3
  334. honeycomb/_generated/models/slo_panel.py +2 -6
  335. honeycomb/_generated/models/slo_panel_slo_panel.py +2 -9
  336. honeycomb/_generated/models/slo_sli.py +1 -7
  337. honeycomb/_generated/models/tag.py +1 -7
  338. honeycomb/_generated/models/team_relationship.py +2 -3
  339. honeycomb/_generated/models/team_relationship_team.py +6 -5
  340. honeycomb/_generated/models/team_relationship_team_data.py +3 -8
  341. honeycomb/_generated/models/team_relationship_team_data_type.py +1 -0
  342. honeycomb/_generated/models/template_variable_definition.py +2 -9
  343. honeycomb/_generated/models/text_panel.py +2 -6
  344. honeycomb/_generated/models/text_panel_text_panel.py +1 -7
  345. honeycomb/_generated/models/trigger_response.py +27 -21
  346. honeycomb/_generated/models/trigger_with_inline_query.py +27 -21
  347. honeycomb/_generated/models/trigger_with_inline_query_query.py +1 -7
  348. honeycomb/_generated/models/trigger_with_query_reference.py +21 -18
  349. honeycomb/_generated/models/update_board_view_request.py +2 -5
  350. honeycomb/_generated/models/update_environment_request.py +8 -6
  351. honeycomb/_generated/models/update_environment_request_data.py +10 -7
  352. honeycomb/_generated/models/update_environment_request_data_attributes.py +8 -8
  353. honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +2 -9
  354. honeycomb/_generated/models/update_environment_request_data_type.py +1 -0
  355. honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +4 -7
  356. honeycomb/_generated/models/update_pipeline_configuration_rollout.py +10 -7
  357. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +3 -8
  358. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +1 -0
  359. honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +8 -6
  360. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +10 -7
  361. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +3 -8
  362. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +1 -0
  363. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +1 -0
  364. honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +8 -6
  365. honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +1 -0
  366. honeycomb/_generated/models/user_relationship.py +2 -3
  367. honeycomb/_generated/models/user_relationship_data.py +2 -8
  368. honeycomb/_generated/models/user_relationship_data_type.py +1 -0
  369. honeycomb/_generated/models/validation_error.py +8 -8
  370. honeycomb/_generated/models/validation_error_type_detail_item.py +4 -10
  371. honeycomb/_generated/models/validation_error_type_detail_item_code.py +1 -0
  372. honeycomb/_generated/models/webhook_header.py +2 -9
  373. honeycomb/_generated/models/webhook_recipient.py +4 -7
  374. honeycomb/_generated/models/webhook_recipient_details.py +8 -8
  375. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +12 -10
  376. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +2 -5
  377. honeycomb/_generated/models/webhook_recipient_type.py +1 -0
  378. honeycomb/_generated/types.py +1 -1
  379. honeycomb/cli/__init__.py +85 -0
  380. honeycomb/cli/api_keys.py +205 -0
  381. honeycomb/cli/auth.py +70 -0
  382. honeycomb/cli/boards.py +203 -0
  383. honeycomb/cli/columns.py +256 -0
  384. honeycomb/cli/config.py +259 -0
  385. honeycomb/cli/datasets.py +186 -0
  386. honeycomb/cli/derived_columns.py +222 -0
  387. honeycomb/cli/environments.py +240 -0
  388. honeycomb/cli/formatters.py +242 -0
  389. honeycomb/cli/markers.py +151 -0
  390. honeycomb/cli/queries.py +380 -0
  391. honeycomb/cli/recipients.py +211 -0
  392. honeycomb/cli/slos.py +338 -0
  393. honeycomb/cli/triggers.py +271 -0
  394. honeycomb/client.py +13 -7
  395. honeycomb/models/__init__.py +18 -3
  396. honeycomb/models/api_keys.py +49 -5
  397. honeycomb/models/auth.py +71 -0
  398. honeycomb/models/board_builder.py +97 -25
  399. honeycomb/models/boards.py +95 -1
  400. honeycomb/models/datasets.py +42 -0
  401. honeycomb/models/queries.py +21 -0
  402. honeycomb/models/query_builder.py +119 -59
  403. honeycomb/models/recipient_builder.py +51 -4
  404. honeycomb/models/slo_builder.py +24 -19
  405. honeycomb/models/slos.py +50 -3
  406. honeycomb/models/tool_inputs.py +630 -0
  407. honeycomb/models/triggers.py +39 -9
  408. honeycomb/resources/__init__.py +2 -0
  409. honeycomb/resources/api_keys.py +66 -29
  410. honeycomb/resources/auth.py +97 -0
  411. honeycomb/resources/boards.py +272 -18
  412. honeycomb/resources/datasets.py +49 -11
  413. honeycomb/resources/environments.py +54 -31
  414. honeycomb/resources/slos.py +87 -61
  415. honeycomb/tools/__main__.py +40 -4
  416. honeycomb/tools/builders.py +235 -150
  417. honeycomb/tools/descriptions.py +175 -7
  418. honeycomb/tools/executor.py +212 -25
  419. honeycomb/tools/generator.py +61 -2264
  420. honeycomb/tools/resources/__init__.py +42 -0
  421. honeycomb/tools/resources/api_keys.py +249 -0
  422. honeycomb/tools/resources/auth.py +98 -0
  423. honeycomb/tools/resources/boards.py +313 -0
  424. honeycomb/tools/resources/burn_alerts.py +278 -0
  425. honeycomb/tools/resources/columns.py +257 -0
  426. honeycomb/tools/resources/datasets.py +215 -0
  427. honeycomb/tools/resources/derived_columns.py +311 -0
  428. honeycomb/tools/resources/environments.py +211 -0
  429. honeycomb/tools/resources/events.py +158 -0
  430. honeycomb/tools/resources/marker_settings.py +216 -0
  431. honeycomb/tools/resources/markers.py +197 -0
  432. honeycomb/tools/resources/queries.py +220 -0
  433. honeycomb/tools/resources/recipients.py +297 -0
  434. honeycomb/tools/resources/service_map.py +110 -0
  435. honeycomb/tools/resources/slos.py +276 -0
  436. honeycomb/tools/resources/triggers.py +328 -0
  437. honeycomb/tools/schemas.py +81 -0
  438. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/METADATA +33 -8
  439. honeycomb_api-0.5.3.dist-info/RECORD +497 -0
  440. honeycomb_api-0.5.3.dist-info/entry_points.txt +5 -0
  441. honeycomb_api-0.1.0.dist-info/RECORD +0 -453
  442. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/WHEEL +0 -0
  443. {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/licenses/LICENSE +0 -0
@@ -6,7 +6,7 @@ from datetime import datetime
6
6
  from enum import Enum
7
7
  from typing import Any
8
8
 
9
- from pydantic import BaseModel, Field
9
+ from pydantic import BaseModel, Field, field_validator
10
10
 
11
11
  from honeycomb.models.query_builder import (
12
12
  CalcOp,
@@ -14,6 +14,7 @@ from honeycomb.models.query_builder import (
14
14
  Filter,
15
15
  FilterCombination,
16
16
  )
17
+ from honeycomb.models.tool_inputs import TagInput
17
18
 
18
19
 
19
20
  class TriggerThresholdOp(str, Enum):
@@ -38,7 +39,10 @@ class TriggerThreshold(BaseModel):
38
39
  op: TriggerThresholdOp = Field(description="Comparison operator")
39
40
  value: float = Field(description="Threshold value")
40
41
  exceeded_limit: int | None = Field(
41
- default=None, description="Number of times threshold must be exceeded"
42
+ default=None,
43
+ ge=1,
44
+ le=5,
45
+ description="Number of times threshold must be exceeded (1-5, default 1)",
42
46
  )
43
47
 
44
48
 
@@ -50,8 +54,6 @@ def _default_calculations() -> list[Calculation | dict[str, Any]]:
50
54
  class TriggerQuery(BaseModel):
51
55
  """Inline query specification for a trigger.
52
56
 
53
- Note: time_range must be <= 3600 (1 hour) for triggers.
54
-
55
57
  Accepts both typed models and dicts for flexibility:
56
58
  >>> # Using typed models
57
59
  >>> TriggerQuery(calculations=[Calculation(op=CalcOp.P99, column="duration_ms")])
@@ -61,9 +63,10 @@ class TriggerQuery(BaseModel):
61
63
  """
62
64
 
63
65
  time_range: int = Field(
64
- default=3600,
66
+ default=900,
67
+ ge=300,
65
68
  le=3600,
66
- description="Query time range in seconds (max 3600 for triggers)",
69
+ description="Query time range in seconds (300-3600, i.e. 5 min to 1 hour)",
67
70
  )
68
71
  granularity: int | None = Field(default=None, description="Time granularity in seconds")
69
72
  calculations: list[Calculation | dict[str, Any]] | None = Field(
@@ -76,6 +79,19 @@ class TriggerQuery(BaseModel):
76
79
  default=None, description="How to combine filters (AND/OR)"
77
80
  )
78
81
 
82
+ @field_validator("calculations")
83
+ @classmethod
84
+ def validate_single_calculation(
85
+ cls, v: list[Calculation | dict[str, Any]] | None
86
+ ) -> list[Calculation | dict[str, Any]] | None:
87
+ """Validate that only one calculation is provided (trigger limitation)."""
88
+ if v is not None and len(v) > 1:
89
+ raise ValueError(
90
+ f"Triggers support only a single calculation, got {len(v)}. "
91
+ "Use multiple triggers or a saved query if you need multiple calculations."
92
+ )
93
+ return v
94
+
79
95
 
80
96
  def _normalize_calculation(calc: Calculation | dict[str, Any]) -> dict[str, Any]:
81
97
  """Convert a Calculation or dict to API dict format."""
@@ -110,7 +126,8 @@ class TriggerCreate(BaseModel):
110
126
  default=900,
111
127
  ge=60,
112
128
  le=86400,
113
- description="Check frequency in seconds (60-86400)",
129
+ description="Check frequency in seconds (60-86400, must be multiple of 60)",
130
+ json_schema_extra={"multipleOf": 60},
114
131
  )
115
132
  query: TriggerQuery | None = Field(default=None, description="Inline query")
116
133
  query_id: str | None = Field(default=None, description="Reference to saved query")
@@ -120,7 +137,7 @@ class TriggerCreate(BaseModel):
120
137
  description="When to send alerts",
121
138
  )
122
139
  recipients: list[dict] | None = Field(default=None, description="Notification recipients")
123
- tags: list[dict[str, str]] | None = Field(
140
+ tags: list[TagInput] | None = Field(
124
141
  default=None, description="Tags for organizing triggers (max 10)"
125
142
  )
126
143
  baseline_details: dict[str, Any] | None = Field(
@@ -128,6 +145,14 @@ class TriggerCreate(BaseModel):
128
145
  description="Baseline threshold configuration for comparing against historical data",
129
146
  )
130
147
 
148
+ @field_validator("frequency")
149
+ @classmethod
150
+ def validate_frequency_multiple(cls, v: int) -> int:
151
+ """Validate that frequency is a multiple of 60."""
152
+ if v % 60 != 0:
153
+ raise ValueError(f"Frequency must be a multiple of 60 seconds, got {v}")
154
+ return v
155
+
131
156
  def model_dump_for_api(self) -> dict[str, Any]:
132
157
  """Serialize for API request, handling nested models."""
133
158
  data: dict[str, Any] = {
@@ -172,7 +197,7 @@ class TriggerCreate(BaseModel):
172
197
  data["recipients"] = self.recipients
173
198
 
174
199
  if self.tags:
175
- data["tags"] = self.tags
200
+ data["tags"] = [{"key": tag.key, "value": tag.value} for tag in self.tags]
176
201
 
177
202
  if self.baseline_details:
178
203
  data["baseline_details"] = self.baseline_details
@@ -206,3 +231,8 @@ class Trigger(BaseModel):
206
231
  updated_at: datetime | None = Field(default=None, description="Last update timestamp")
207
232
 
208
233
  model_config = {"extra": "allow"}
234
+
235
+ @property
236
+ def dataset(self) -> str:
237
+ """Alias for dataset_slug for convenience."""
238
+ return self.dataset_slug
@@ -1,6 +1,7 @@
1
1
  """Resource clients for Honeycomb API."""
2
2
 
3
3
  from .api_keys import ApiKeysResource
4
+ from .auth import AuthResource
4
5
  from .base import BaseResource
5
6
  from .boards import BoardsResource
6
7
  from .burn_alerts import BurnAlertsResource
@@ -30,6 +31,7 @@ __all__ = [
30
31
  "BurnAlertsResource",
31
32
  "EventsResource",
32
33
  "ApiKeysResource",
34
+ "AuthResource",
33
35
  "EnvironmentsResource",
34
36
  "ServiceMapDependenciesResource",
35
37
  ]
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  from typing import TYPE_CHECKING, Any
6
6
  from urllib.parse import parse_qs, urlparse
7
7
 
8
- from ..models.api_keys import ApiKey, ApiKeyCreate
8
+ from ..models.api_keys import ApiKey, ApiKeyCreate, ApiKeyUpdate
9
9
  from .base import BaseResource
10
10
 
11
11
  if TYPE_CHECKING:
@@ -33,9 +33,8 @@ class ApiKeysResource(BaseResource):
33
33
  ... management_key="hcamk_xxx",
34
34
  ... management_secret="xxx"
35
35
  ... ) as client:
36
- ... keys = await client.api_keys.list_async(team="my-team")
36
+ ... keys = await client.api_keys.list_async()
37
37
  ... key = await client.api_keys.create_async(
38
- ... team="my-team",
39
38
  ... api_key=ApiKeyCreate(
40
39
  ... name="My Ingest Key",
41
40
  ... key_type=ApiKeyType.INGEST,
@@ -49,11 +48,50 @@ class ApiKeysResource(BaseResource):
49
48
  ... management_secret="xxx",
50
49
  ... sync=True
51
50
  ... ) as client:
52
- ... keys = client.api_keys.list(team="my-team")
51
+ ... keys = client.api_keys.list()
53
52
  """
54
53
 
55
54
  def __init__(self, client: HoneycombClient) -> None:
56
55
  super().__init__(client)
56
+ self._cached_team_slug: str | None = None
57
+
58
+ async def _get_team_slug_async(self, team: str | None = None) -> str:
59
+ """Get team slug, auto-detecting from auth if not provided."""
60
+ if team:
61
+ return team
62
+
63
+ # Use cached value if available
64
+ if self._cached_team_slug:
65
+ return self._cached_team_slug
66
+
67
+ # Auto-detect from auth endpoint
68
+ auth_info = await self._client.auth.get_async()
69
+ if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
70
+ raise ValueError(
71
+ "Cannot auto-detect team slug. Please provide team parameter explicitly."
72
+ )
73
+
74
+ self._cached_team_slug = auth_info.team_slug
75
+ return self._cached_team_slug
76
+
77
+ def _get_team_slug(self, team: str | None = None) -> str:
78
+ """Get team slug (sync), auto-detecting from auth if not provided."""
79
+ if team:
80
+ return team
81
+
82
+ # Use cached value if available
83
+ if self._cached_team_slug:
84
+ return self._cached_team_slug
85
+
86
+ # Auto-detect from auth endpoint
87
+ auth_info = self._client.auth.get()
88
+ if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
89
+ raise ValueError(
90
+ "Cannot auto-detect team slug. Please provide team parameter explicitly."
91
+ )
92
+
93
+ self._cached_team_slug = auth_info.team_slug
94
+ return self._cached_team_slug
57
95
 
58
96
  def _build_path(self, team: str, key_id: str | None = None) -> str:
59
97
  """Build API path for API keys."""
@@ -89,14 +127,13 @@ class ApiKeysResource(BaseResource):
89
127
  # Async methods
90
128
  # -------------------------------------------------------------------------
91
129
 
92
- async def list_async(self, team: str, key_type: str | None = None) -> list[ApiKey]:
93
- """List all API keys for a team (async).
130
+ async def list_async(self, key_type: str | None = None) -> list[ApiKey]:
131
+ """List all API keys for the authenticated team (async).
94
132
 
95
133
  Automatically paginates through all results. For teams with many API keys,
96
134
  this may result in multiple API requests.
97
135
 
98
136
  Args:
99
- team: Team slug.
100
137
  key_type: Optional filter by key type ('ingest' or 'configuration').
101
138
 
102
139
  Returns:
@@ -106,6 +143,7 @@ class ApiKeysResource(BaseResource):
106
143
  The default rate limit is 100 requests per minute per operation.
107
144
  Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
108
145
  """
146
+ team = await self._get_team_slug_async()
109
147
  results: list[ApiKey] = []
110
148
  cursor: str | None = None
111
149
  path = self._build_path(team)
@@ -129,29 +167,29 @@ class ApiKeysResource(BaseResource):
129
167
 
130
168
  return results
131
169
 
132
- async def get_async(self, team: str, key_id: str) -> ApiKey:
170
+ async def get_async(self, key_id: str) -> ApiKey:
133
171
  """Get a specific API key (async).
134
172
 
135
173
  Args:
136
- team: Team slug.
137
174
  key_id: API Key ID.
138
175
 
139
176
  Returns:
140
177
  ApiKey object.
141
178
  """
179
+ team = await self._get_team_slug_async()
142
180
  data = await self._get_async(self._build_path(team, key_id))
143
181
  return ApiKey.from_jsonapi(data)
144
182
 
145
- async def create_async(self, team: str, api_key: ApiKeyCreate) -> ApiKey:
183
+ async def create_async(self, api_key: ApiKeyCreate) -> ApiKey:
146
184
  """Create a new API key (async).
147
185
 
148
186
  Args:
149
- team: Team slug.
150
187
  api_key: API key configuration.
151
188
 
152
189
  Returns:
153
190
  Created ApiKey object (includes secret, save it immediately!).
154
191
  """
192
+ team = await self._get_team_slug_async()
155
193
  data = await self._post_async(
156
194
  self._build_path(team),
157
195
  json=api_key.to_jsonapi(),
@@ -159,19 +197,18 @@ class ApiKeysResource(BaseResource):
159
197
  )
160
198
  return ApiKey.from_jsonapi(data)
161
199
 
162
- async def update_async(self, team: str, key_id: str, api_key: ApiKeyCreate) -> ApiKey:
200
+ async def update_async(self, key_id: str, api_key: ApiKeyUpdate) -> ApiKey:
163
201
  """Update an existing API key (async).
164
202
 
165
203
  Args:
166
- team: Team slug.
167
204
  key_id: API Key ID.
168
205
  api_key: Updated API key configuration.
169
206
 
170
207
  Returns:
171
208
  Updated ApiKey object.
172
209
  """
173
- payload = api_key.to_jsonapi()
174
- payload["data"]["id"] = key_id # Include ID for update
210
+ team = await self._get_team_slug_async()
211
+ payload = api_key.to_jsonapi(key_id)
175
212
  data = await self._patch_async(
176
213
  self._build_path(team, key_id),
177
214
  json=payload,
@@ -179,27 +216,26 @@ class ApiKeysResource(BaseResource):
179
216
  )
180
217
  return ApiKey.from_jsonapi(data)
181
218
 
182
- async def delete_async(self, team: str, key_id: str) -> None:
219
+ async def delete_async(self, key_id: str) -> None:
183
220
  """Delete an API key (async).
184
221
 
185
222
  Args:
186
- team: Team slug.
187
223
  key_id: API Key ID.
188
224
  """
225
+ team = await self._get_team_slug_async()
189
226
  await self._delete_async(self._build_path(team, key_id))
190
227
 
191
228
  # -------------------------------------------------------------------------
192
229
  # Sync methods
193
230
  # -------------------------------------------------------------------------
194
231
 
195
- def list(self, team: str, key_type: str | None = None) -> list[ApiKey]:
196
- """List all API keys for a team.
232
+ def list(self, key_type: str | None = None) -> list[ApiKey]:
233
+ """List all API keys for the authenticated team.
197
234
 
198
235
  Automatically paginates through all results. For teams with many API keys,
199
236
  this may result in multiple API requests.
200
237
 
201
238
  Args:
202
- team: Team slug.
203
239
  key_type: Optional filter by key type ('ingest' or 'configuration').
204
240
 
205
241
  Returns:
@@ -212,6 +248,7 @@ class ApiKeysResource(BaseResource):
212
248
  if not self._client.is_sync:
213
249
  raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
214
250
 
251
+ team = self._get_team_slug()
215
252
  results: list[ApiKey] = []
216
253
  cursor: str | None = None
217
254
  path = self._build_path(team)
@@ -235,11 +272,10 @@ class ApiKeysResource(BaseResource):
235
272
 
236
273
  return results
237
274
 
238
- def get(self, team: str, key_id: str) -> ApiKey:
275
+ def get(self, key_id: str) -> ApiKey:
239
276
  """Get a specific API key.
240
277
 
241
278
  Args:
242
- team: Team slug.
243
279
  key_id: API Key ID.
244
280
 
245
281
  Returns:
@@ -247,10 +283,11 @@ class ApiKeysResource(BaseResource):
247
283
  """
248
284
  if not self._client.is_sync:
249
285
  raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
286
+ team = self._get_team_slug()
250
287
  data = self._get_sync(self._build_path(team, key_id))
251
288
  return ApiKey.from_jsonapi(data)
252
289
 
253
- def create(self, team: str, api_key: ApiKeyCreate) -> ApiKey:
290
+ def create(self, api_key: ApiKeyCreate) -> ApiKey:
254
291
  """Create a new API key.
255
292
 
256
293
  Args:
@@ -262,6 +299,7 @@ class ApiKeysResource(BaseResource):
262
299
  """
263
300
  if not self._client.is_sync:
264
301
  raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
302
+ team = self._get_team_slug()
265
303
  data = self._post_sync(
266
304
  self._build_path(team),
267
305
  json=api_key.to_jsonapi(),
@@ -269,11 +307,10 @@ class ApiKeysResource(BaseResource):
269
307
  )
270
308
  return ApiKey.from_jsonapi(data)
271
309
 
272
- def update(self, team: str, key_id: str, api_key: ApiKeyCreate) -> ApiKey:
310
+ def update(self, key_id: str, api_key: ApiKeyUpdate) -> ApiKey:
273
311
  """Update an existing API key.
274
312
 
275
313
  Args:
276
- team: Team slug.
277
314
  key_id: API Key ID.
278
315
  api_key: Updated API key configuration.
279
316
 
@@ -282,8 +319,8 @@ class ApiKeysResource(BaseResource):
282
319
  """
283
320
  if not self._client.is_sync:
284
321
  raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
285
- payload = api_key.to_jsonapi()
286
- payload["data"]["id"] = key_id
322
+ team = self._get_team_slug()
323
+ payload = api_key.to_jsonapi(key_id)
287
324
  data = self._patch_sync(
288
325
  self._build_path(team, key_id),
289
326
  json=payload,
@@ -291,13 +328,13 @@ class ApiKeysResource(BaseResource):
291
328
  )
292
329
  return ApiKey.from_jsonapi(data)
293
330
 
294
- def delete(self, team: str, key_id: str) -> None:
331
+ def delete(self, key_id: str) -> None:
295
332
  """Delete an API key.
296
333
 
297
334
  Args:
298
- team: Team slug.
299
335
  key_id: API Key ID.
300
336
  """
301
337
  if not self._client.is_sync:
302
338
  raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
339
+ team = self._get_team_slug()
303
340
  self._delete_sync(self._build_path(team, key_id))
@@ -0,0 +1,97 @@
1
+ """Auth resource for retrieving API key metadata."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING
6
+
7
+ from honeycomb.models.auth import AuthInfo, AuthInfoV2
8
+ from honeycomb.resources.base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from honeycomb.client import HoneycombClient
12
+
13
+
14
+ class AuthResource(BaseResource):
15
+ """Access authentication metadata for the current API key.
16
+
17
+ Example:
18
+ >>> # Auto-detects endpoint based on credentials
19
+ >>> auth_info = await client.auth.get_async()
20
+ >>> print(f"Team: {auth_info.team_name}")
21
+
22
+ >>> # Force v2 endpoint (requires management key)
23
+ >>> auth_info = await client.auth.get_async(use_v2=True)
24
+ >>> print(f"Scopes: {auth_info.scopes}")
25
+ """
26
+
27
+ def __init__(self, client: HoneycombClient) -> None:
28
+ super().__init__(client)
29
+
30
+ def _is_management_auth(self) -> bool:
31
+ """Check if client is using management key authentication."""
32
+ from honeycomb.auth import ManagementKeyAuth
33
+
34
+ return isinstance(self._client._auth, ManagementKeyAuth)
35
+
36
+ def _require_management_auth(self) -> None:
37
+ """Raise error if not using management key authentication."""
38
+ if not self._is_management_auth():
39
+ raise ValueError(
40
+ "v2 auth endpoint requires management key authentication. "
41
+ "Initialize client with management_key and management_secret."
42
+ )
43
+
44
+ async def get_async(self, *, use_v2: bool | None = None) -> AuthInfo | AuthInfoV2:
45
+ """Get metadata about the current API key.
46
+
47
+ Args:
48
+ use_v2: Force v2 endpoint. If None, auto-detects based on credentials.
49
+ If True with API key credentials, raises ValueError.
50
+
51
+ Returns:
52
+ AuthInfo for v1 (API key) or AuthInfoV2 for v2 (management key).
53
+ """
54
+ if use_v2 is None:
55
+ use_v2 = self._is_management_auth()
56
+
57
+ if use_v2:
58
+ self._require_management_auth()
59
+ data = await self._get_async("/2/auth")
60
+ return AuthInfoV2.from_jsonapi(data)
61
+
62
+ data = await self._get_async("/1/auth")
63
+ return AuthInfo(
64
+ id=data.get("id", ""),
65
+ type=data.get("type", ""),
66
+ team_name=data.get("team", {}).get("name", ""),
67
+ team_slug=data.get("team", {}).get("slug", ""),
68
+ environment_name=data.get("environment", {}).get("name", ""),
69
+ environment_slug=data.get("environment", {}).get("slug", ""),
70
+ api_key_access=data.get("api_key_access", {}),
71
+ time_to_live=data.get("time_to_live"),
72
+ )
73
+
74
+ def get(self, *, use_v2: bool | None = None) -> AuthInfo | AuthInfoV2:
75
+ """Get metadata about the current API key (sync version)."""
76
+ if not self._client.is_sync:
77
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
78
+
79
+ if use_v2 is None:
80
+ use_v2 = self._is_management_auth()
81
+
82
+ if use_v2:
83
+ self._require_management_auth()
84
+ data = self._get_sync("/2/auth")
85
+ return AuthInfoV2.from_jsonapi(data)
86
+
87
+ data = self._get_sync("/1/auth")
88
+ return AuthInfo(
89
+ id=data.get("id", ""),
90
+ type=data.get("type", ""),
91
+ team_name=data.get("team", {}).get("name", ""),
92
+ team_slug=data.get("team", {}).get("slug", ""),
93
+ environment_name=data.get("environment", {}).get("name", ""),
94
+ environment_slug=data.get("environment", {}).get("slug", ""),
95
+ api_key_access=data.get("api_key_access", {}),
96
+ time_to_live=data.get("time_to_live"),
97
+ )