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
@@ -0,0 +1,203 @@
1
+ """
2
+ Board management commands.
3
+ """
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ import typer
9
+ from rich.console import Console
10
+
11
+ from honeycomb.cli.config import get_client
12
+ from honeycomb.cli.formatters import DEFAULT_OUTPUT_FORMAT, OutputFormat, output_result
13
+ from honeycomb.models.boards import BoardCreate
14
+
15
+ app = typer.Typer(help="Manage boards (dashboards)")
16
+ console = Console()
17
+
18
+
19
+ @app.command("list")
20
+ def list_boards(
21
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
22
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
23
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
24
+ quiet: bool = typer.Option(False, "--quiet", "-q", help="Only output board IDs"),
25
+ ) -> None:
26
+ """List all boards in the environment."""
27
+ try:
28
+ client = get_client(profile=profile, api_key=api_key)
29
+ boards = client.boards.list()
30
+ output_result(boards, output, columns=["id", "name", "description"], quiet=quiet)
31
+ except Exception as e:
32
+ console.print(f"[red]Error:[/red] {e}", style="bold")
33
+ raise typer.Exit(1)
34
+
35
+
36
+ @app.command("get")
37
+ def get_board(
38
+ board_id: str = typer.Argument(..., help="Board ID"),
39
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
40
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
41
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
42
+ ) -> None:
43
+ """Get a specific board."""
44
+ try:
45
+ client = get_client(profile=profile, api_key=api_key)
46
+ board = client.boards.get(board_id=board_id)
47
+ output_result(board, output)
48
+ except Exception as e:
49
+ console.print(f"[red]Error:[/red] {e}", style="bold")
50
+ raise typer.Exit(1)
51
+
52
+
53
+ @app.command("create")
54
+ def create_board(
55
+ from_file: Path = typer.Option(..., "--from-file", "-f", help="JSON file with board config"),
56
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
57
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
58
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
59
+ ) -> None:
60
+ """Create a board from a JSON file."""
61
+ try:
62
+ client = get_client(profile=profile, api_key=api_key)
63
+
64
+ # Load and parse JSON file
65
+ data = json.loads(from_file.read_text())
66
+
67
+ # Strip fields that shouldn't be in create request
68
+ data.pop("id", None)
69
+ data.pop("created_at", None)
70
+ data.pop("updated_at", None)
71
+
72
+ board_create = BoardCreate.model_validate(data)
73
+ board = client.boards.create(board=board_create)
74
+
75
+ console.print(f"[green]Created board '{board.name}' with ID: {board.id}[/green]")
76
+ output_result(board, output)
77
+ except Exception as e:
78
+ console.print(f"[red]Error:[/red] {e}", style="bold")
79
+ raise typer.Exit(1)
80
+
81
+
82
+ @app.command("update")
83
+ def update_board(
84
+ board_id: str = typer.Argument(..., help="Board ID"),
85
+ from_file: Path = typer.Option(..., "--from-file", "-f", help="JSON file with board config"),
86
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
87
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
88
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
89
+ ) -> None:
90
+ """Update an existing board."""
91
+ try:
92
+ client = get_client(profile=profile, api_key=api_key)
93
+
94
+ # Load and parse JSON file
95
+ data = json.loads(from_file.read_text())
96
+
97
+ # Strip fields that shouldn't be in update request
98
+ data.pop("id", None)
99
+ data.pop("created_at", None)
100
+ data.pop("updated_at", None)
101
+
102
+ board_update = BoardCreate.model_validate(data)
103
+ board = client.boards.update(board_id=board_id, board=board_update)
104
+
105
+ console.print(f"[green]Updated board '{board.name}'[/green]")
106
+ output_result(board, output)
107
+ except Exception as e:
108
+ console.print(f"[red]Error:[/red] {e}", style="bold")
109
+ raise typer.Exit(1)
110
+
111
+
112
+ @app.command("delete")
113
+ def delete_board(
114
+ board_id: str = typer.Argument(..., help="Board ID"),
115
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
116
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
117
+ yes: bool = typer.Option(False, "--yes", "-y", help="Skip confirmation"),
118
+ ) -> None:
119
+ """Delete a board."""
120
+ try:
121
+ if not yes:
122
+ confirm = typer.confirm(f"Delete board {board_id}?")
123
+ if not confirm:
124
+ console.print("[yellow]Cancelled[/yellow]")
125
+ raise typer.Exit(0)
126
+
127
+ client = get_client(profile=profile, api_key=api_key)
128
+ client.boards.delete(board_id=board_id)
129
+ console.print(f"[green]Deleted board {board_id}[/green]")
130
+ except Exception as e:
131
+ console.print(f"[red]Error:[/red] {e}", style="bold")
132
+ raise typer.Exit(1)
133
+
134
+
135
+ @app.command("export")
136
+ def export_board(
137
+ board_id: str = typer.Argument(..., help="Board ID"),
138
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
139
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
140
+ output_file: Path | None = typer.Option(
141
+ None, "--output-file", "-o", help="Output file (default: stdout)"
142
+ ),
143
+ include_views: bool = typer.Option(True, "--views/--no-views", help="Include board views"),
144
+ ) -> None:
145
+ """
146
+ Export a board as JSON.
147
+
148
+ Output is suitable for importing to another environment via the 'create' command.
149
+ By default, includes board views. Use --no-views to exclude them.
150
+ """
151
+ try:
152
+ client = get_client(profile=profile, api_key=api_key)
153
+
154
+ if include_views:
155
+ # Use new export method that includes views
156
+ data = client.boards.export_with_views(board_id=board_id)
157
+ else:
158
+ # Original behavior (no views)
159
+ board = client.boards.get(board_id=board_id)
160
+ data = board.model_dump(exclude={"id", "created_at", "updated_at"}, mode="json")
161
+
162
+ json_str = json.dumps(data, indent=2, default=str)
163
+
164
+ if output_file:
165
+ output_file.write_text(json_str)
166
+ console.print(f"[green]Exported board to {output_file}[/green]")
167
+ else:
168
+ console.print(json_str)
169
+ except Exception as e:
170
+ console.print(f"[red]Error:[/red] {e}", style="bold")
171
+ raise typer.Exit(1)
172
+
173
+
174
+ @app.command("export-all")
175
+ def export_all_boards(
176
+ output_dir: Path = typer.Option(..., "--output-dir", help="Output directory"),
177
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
178
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
179
+ ) -> None:
180
+ """Export all boards to individual JSON files."""
181
+ try:
182
+ output_dir.mkdir(parents=True, exist_ok=True)
183
+
184
+ client = get_client(profile=profile, api_key=api_key)
185
+ boards = client.boards.list()
186
+
187
+ for board in boards:
188
+ # Export without IDs/timestamps
189
+ data = board.model_dump(exclude={"id", "created_at", "updated_at"}, mode="json")
190
+
191
+ # Sanitize filename (replace special chars with dash)
192
+ filename = f"{board.name}.json".replace("/", "-").replace(" ", "-").lower()
193
+ file_path = output_dir / filename
194
+
195
+ with open(file_path, "w") as f:
196
+ json.dump(data, f, indent=2, default=str)
197
+
198
+ console.print(f"[green]Exported '{board.name}' to {file_path}[/green]")
199
+
200
+ console.print(f"\n[bold green]Exported {len(boards)} boards to {output_dir}[/bold green]")
201
+ except Exception as e:
202
+ console.print(f"[red]Error:[/red] {e}", style="bold")
203
+ raise typer.Exit(1)
@@ -0,0 +1,256 @@
1
+ """
2
+ Column management commands.
3
+ """
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ import typer
9
+ from rich.console import Console
10
+
11
+ from honeycomb.cli.config import get_client
12
+ from honeycomb.cli.formatters import DEFAULT_OUTPUT_FORMAT, OutputFormat, output_result
13
+ from honeycomb.models.columns import ColumnCreate, ColumnType
14
+
15
+ app = typer.Typer(help="Manage dataset columns")
16
+ console = Console()
17
+
18
+
19
+ @app.command("list")
20
+ def list_columns(
21
+ dataset: str = typer.Option(
22
+ "__all__", "--dataset", "-d", help="Dataset slug (default: __all__ for environment-wide)"
23
+ ),
24
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
25
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
26
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
27
+ quiet: bool = typer.Option(False, "--quiet", "-q", help="Only output column IDs"),
28
+ ) -> None:
29
+ """List all columns (environment-wide by default, or in a specific dataset)."""
30
+ try:
31
+ client = get_client(profile=profile, api_key=api_key)
32
+ columns = client.columns.list(dataset=dataset)
33
+ # Sort by key_name alphabetically
34
+ columns = sorted(columns, key=lambda c: c.key_name.lower())
35
+ output_result(
36
+ columns,
37
+ output,
38
+ columns=["id", "key_name", "type", "description", "hidden", "last_written"],
39
+ quiet=quiet,
40
+ column_titles={"key_name": "Name"},
41
+ )
42
+ except Exception as e:
43
+ console.print(f"[red]Error:[/red] {e}", style="bold")
44
+ raise typer.Exit(1)
45
+
46
+
47
+ @app.command("get")
48
+ def get_column(
49
+ column_id: str = typer.Argument(..., help="Column ID"),
50
+ dataset: str = typer.Option(..., "--dataset", "-d", help="Dataset slug"),
51
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
52
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
53
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
54
+ ) -> None:
55
+ """Get a specific column."""
56
+ try:
57
+ client = get_client(profile=profile, api_key=api_key)
58
+ column = client.columns.get(dataset=dataset, column_id=column_id)
59
+ output_result(column, output)
60
+ except Exception as e:
61
+ console.print(f"[red]Error:[/red] {e}", style="bold")
62
+ raise typer.Exit(1)
63
+
64
+
65
+ @app.command("create")
66
+ def create_column(
67
+ dataset: str = typer.Option(..., "--dataset", "-d", help="Dataset slug"),
68
+ from_file: Path | None = typer.Option(
69
+ None, "--from-file", "-f", help="JSON file with column config"
70
+ ),
71
+ key_name: str | None = typer.Option(None, "--key-name", "-k", help="Column name"),
72
+ column_type: ColumnType = typer.Option(ColumnType.STRING, "--type", "-t", help="Column type"),
73
+ description: str | None = typer.Option(None, "--description", help="Column description"),
74
+ hidden: bool = typer.Option(False, "--hidden", help="Hide column from autocomplete"),
75
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
76
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
77
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
78
+ ) -> None:
79
+ """Create a column from a JSON file or command-line options."""
80
+ try:
81
+ client = get_client(profile=profile, api_key=api_key)
82
+
83
+ if from_file:
84
+ # Load and parse JSON file
85
+ data = json.loads(from_file.read_text())
86
+
87
+ # Strip fields that shouldn't be in create request
88
+ data.pop("id", None)
89
+ data.pop("created_at", None)
90
+ data.pop("updated_at", None)
91
+ data.pop("last_written", None)
92
+
93
+ column_create = ColumnCreate.model_validate(data)
94
+ elif key_name:
95
+ column_create = ColumnCreate(
96
+ key_name=key_name,
97
+ type=column_type,
98
+ description=description,
99
+ hidden=hidden,
100
+ )
101
+ else:
102
+ console.print("[red]Error:[/red] Either --from-file or --key-name is required")
103
+ raise typer.Exit(1)
104
+
105
+ column = client.columns.create(dataset=dataset, column=column_create)
106
+
107
+ console.print(f"[green]Created column '{column.key_name}' with ID: {column.id}[/green]")
108
+ output_result(column, output)
109
+ except Exception as e:
110
+ console.print(f"[red]Error:[/red] {e}", style="bold")
111
+ raise typer.Exit(1)
112
+
113
+
114
+ @app.command("update")
115
+ def update_column(
116
+ column_id: str = typer.Argument(..., help="Column ID"),
117
+ dataset: str = typer.Option(..., "--dataset", "-d", help="Dataset slug"),
118
+ from_file: Path | None = typer.Option(
119
+ None, "--from-file", "-f", help="JSON file with column config"
120
+ ),
121
+ key_name: str | None = typer.Option(None, "--key-name", "-k", help="Column name"),
122
+ column_type: ColumnType | None = typer.Option(None, "--type", "-t", help="Column type"),
123
+ description: str | None = typer.Option(None, "--description", help="Column description"),
124
+ hidden: bool | None = typer.Option(None, "--hidden/--no-hidden", help="Hide column"),
125
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
126
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
127
+ output: OutputFormat = typer.Option(DEFAULT_OUTPUT_FORMAT, "--output", "-o"),
128
+ ) -> None:
129
+ """Update an existing column."""
130
+ try:
131
+ client = get_client(profile=profile, api_key=api_key)
132
+
133
+ if from_file:
134
+ # Load and parse JSON file
135
+ data = json.loads(from_file.read_text())
136
+
137
+ # Strip fields that shouldn't be in update request
138
+ data.pop("id", None)
139
+ data.pop("created_at", None)
140
+ data.pop("updated_at", None)
141
+ data.pop("last_written", None)
142
+
143
+ column_update = ColumnCreate.model_validate(data)
144
+ else:
145
+ # Get existing column to merge with updates
146
+ existing = client.columns.get(dataset=dataset, column_id=column_id)
147
+ column_update = ColumnCreate(
148
+ key_name=key_name if key_name is not None else existing.key_name,
149
+ type=column_type if column_type is not None else existing.type,
150
+ description=description if description is not None else existing.description,
151
+ hidden=hidden if hidden is not None else existing.hidden,
152
+ )
153
+
154
+ column = client.columns.update(dataset=dataset, column_id=column_id, column=column_update)
155
+
156
+ console.print(f"[green]Updated column '{column.key_name}'[/green]")
157
+ output_result(column, output)
158
+ except Exception as e:
159
+ console.print(f"[red]Error:[/red] {e}", style="bold")
160
+ raise typer.Exit(1)
161
+
162
+
163
+ @app.command("delete")
164
+ def delete_column(
165
+ column_id: str = typer.Argument(..., help="Column ID"),
166
+ dataset: str = typer.Option(..., "--dataset", "-d", help="Dataset slug"),
167
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
168
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
169
+ yes: bool = typer.Option(False, "--yes", "-y", help="Skip confirmation"),
170
+ ) -> None:
171
+ """Delete a column."""
172
+ try:
173
+ if not yes:
174
+ confirm = typer.confirm(f"Delete column {column_id} from dataset {dataset}?")
175
+ if not confirm:
176
+ console.print("[yellow]Cancelled[/yellow]")
177
+ raise typer.Exit(0)
178
+
179
+ client = get_client(profile=profile, api_key=api_key)
180
+ client.columns.delete(dataset=dataset, column_id=column_id)
181
+ console.print(f"[green]Deleted column {column_id}[/green]")
182
+ except Exception as e:
183
+ console.print(f"[red]Error:[/red] {e}", style="bold")
184
+ raise typer.Exit(1)
185
+
186
+
187
+ @app.command("export")
188
+ def export_column(
189
+ column_id: str = typer.Argument(..., help="Column ID"),
190
+ dataset: str = typer.Option(..., "--dataset", "-d", help="Dataset slug"),
191
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
192
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
193
+ output_file: Path | None = typer.Option(
194
+ None, "--output-file", "-o", help="Output file (default: stdout)"
195
+ ),
196
+ ) -> None:
197
+ """
198
+ Export a column as JSON.
199
+
200
+ Output is suitable for importing to another environment via the 'create' command.
201
+ """
202
+ try:
203
+ client = get_client(profile=profile, api_key=api_key)
204
+ column = client.columns.get(dataset=dataset, column_id=column_id)
205
+
206
+ # Export without IDs/timestamps for portability
207
+ data = column.model_dump(
208
+ exclude={"id", "created_at", "updated_at", "last_written"}, mode="json"
209
+ )
210
+ json_str = json.dumps(data, indent=2, default=str)
211
+
212
+ if output_file:
213
+ output_file.write_text(json_str)
214
+ console.print(f"[green]Exported column to {output_file}[/green]")
215
+ else:
216
+ console.print(json_str)
217
+ except Exception as e:
218
+ console.print(f"[red]Error:[/red] {e}", style="bold")
219
+ raise typer.Exit(1)
220
+
221
+
222
+ @app.command("export-all")
223
+ def export_all_columns(
224
+ dataset: str = typer.Option(
225
+ "__all__", "--dataset", "-d", help="Dataset slug (default: __all__ for environment-wide)"
226
+ ),
227
+ output_dir: Path = typer.Option(..., "--output-dir", help="Output directory"),
228
+ profile: str | None = typer.Option(None, "--profile", "-p", help="Config profile"),
229
+ api_key: str | None = typer.Option(None, "--api-key", envvar="HONEYCOMB_API_KEY"),
230
+ ) -> None:
231
+ """Export all columns to individual JSON files."""
232
+ try:
233
+ output_dir.mkdir(parents=True, exist_ok=True)
234
+
235
+ client = get_client(profile=profile, api_key=api_key)
236
+ columns = client.columns.list(dataset=dataset)
237
+
238
+ for column in columns:
239
+ # Export without IDs/timestamps
240
+ data = column.model_dump(
241
+ exclude={"id", "created_at", "updated_at", "last_written"}, mode="json"
242
+ )
243
+
244
+ # Sanitize filename (replace special chars with dash)
245
+ filename = f"{column.key_name}.json".replace("/", "-").replace(" ", "-").lower()
246
+ file_path = output_dir / filename
247
+
248
+ with open(file_path, "w") as f:
249
+ json.dump(data, f, indent=2, default=str)
250
+
251
+ console.print(f"[green]Exported '{column.key_name}' to {file_path}[/green]")
252
+
253
+ console.print(f"\n[bold green]Exported {len(columns)} columns to {output_dir}[/bold green]")
254
+ except Exception as e:
255
+ console.print(f"[red]Error:[/red] {e}", style="bold")
256
+ raise typer.Exit(1)