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.
- honeycomb/__init__.py +9 -0
- honeycomb/_generated/api/auth/get_auth.py +2 -5
- honeycomb/_generated/api/auth/get_v2_auth.py +2 -5
- honeycomb/_generated/api/boards/create_board.py +6 -5
- honeycomb/_generated/api/boards/create_board_view.py +14 -9
- honeycomb/_generated/api/boards/delete_board.py +2 -5
- honeycomb/_generated/api/boards/delete_board_view.py +2 -5
- honeycomb/_generated/api/boards/get_board.py +2 -5
- honeycomb/_generated/api/boards/get_board_view.py +2 -5
- honeycomb/_generated/api/boards/list_board_views.py +10 -9
- honeycomb/_generated/api/boards/list_boards.py +2 -5
- honeycomb/_generated/api/boards/update_board.py +10 -5
- honeycomb/_generated/api/boards/update_board_view.py +2 -5
- honeycomb/_generated/api/burn_alerts/create_burn_alert.py +6 -8
- honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/get_burn_alert.py +2 -5
- honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +2 -5
- honeycomb/_generated/api/calculated_fields/create_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/get_calculated_field.py +2 -5
- honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +2 -8
- honeycomb/_generated/api/calculated_fields/update_calculated_field.py +2 -5
- honeycomb/_generated/api/columns/create_column.py +2 -5
- honeycomb/_generated/api/columns/delete_column.py +2 -5
- honeycomb/_generated/api/columns/get_column.py +2 -5
- honeycomb/_generated/api/columns/list_columns.py +2 -8
- honeycomb/_generated/api/columns/update_column.py +2 -5
- honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +2 -5
- honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +2 -5
- honeycomb/_generated/api/datasets/create_dataset.py +2 -5
- honeycomb/_generated/api/datasets/delete_dataset.py +2 -5
- honeycomb/_generated/api/datasets/get_dataset.py +2 -5
- honeycomb/_generated/api/datasets/list_datasets.py +2 -5
- honeycomb/_generated/api/datasets/update_dataset.py +2 -5
- honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +4 -6
- honeycomb/_generated/api/environments/create_environment.py +2 -5
- honeycomb/_generated/api/environments/delete_environment.py +2 -5
- honeycomb/_generated/api/environments/get_environment.py +2 -5
- honeycomb/_generated/api/environments/list_environments.py +2 -7
- honeycomb/_generated/api/environments/update_environment.py +2 -5
- honeycomb/_generated/api/events/create_event.py +2 -7
- honeycomb/_generated/api/events/create_events.py +7 -11
- honeycomb/_generated/api/key_management/create_api_key.py +2 -5
- honeycomb/_generated/api/key_management/delete_api_key.py +2 -5
- honeycomb/_generated/api/key_management/get_api_key.py +2 -5
- honeycomb/_generated/api/key_management/list_api_keys.py +2 -7
- honeycomb/_generated/api/key_management/update_api_key.py +2 -5
- honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +2 -5
- honeycomb/_generated/api/marker_settings/create_marker_setting.py +2 -5
- honeycomb/_generated/api/marker_settings/delete_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/list_marker_settings.py +2 -5
- honeycomb/_generated/api/marker_settings/update_marker_settings.py +2 -5
- honeycomb/_generated/api/markers/create_marker.py +2 -5
- honeycomb/_generated/api/markers/create_marker_v2.py +2 -5
- honeycomb/_generated/api/markers/delete_marker.py +2 -5
- honeycomb/_generated/api/markers/get_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker.py +2 -5
- honeycomb/_generated/api/markers/update_marker_v2.py +2 -5
- honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +4 -8
- honeycomb/_generated/api/pipelines/record_pipeline_usage.py +4 -6
- honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +6 -7
- honeycomb/_generated/api/queries/create_query.py +2 -5
- honeycomb/_generated/api/queries/get_query.py +2 -5
- honeycomb/_generated/api/query_annotations/create_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/delete_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/get_query_annotation.py +2 -5
- honeycomb/_generated/api/query_annotations/list_query_annotations.py +2 -7
- honeycomb/_generated/api/query_annotations/update_query_annotation.py +2 -5
- honeycomb/_generated/api/query_data/create_query_result.py +2 -5
- honeycomb/_generated/api/query_data/get_query_result.py +2 -5
- honeycomb/_generated/api/recipients/create_recipient.py +2 -6
- honeycomb/_generated/api/recipients/delete_recipient.py +2 -5
- honeycomb/_generated/api/recipients/get_recipient.py +2 -6
- honeycomb/_generated/api/recipients/list_recipients.py +2 -6
- honeycomb/_generated/api/recipients/update_recipient.py +2 -6
- honeycomb/_generated/api/reporting/get_slo_history.py +2 -5
- honeycomb/_generated/api/service_maps/create_map_dependency_request.py +6 -9
- honeycomb/_generated/api/service_maps/get_map_dependencies.py +2 -7
- honeycomb/_generated/api/sl_os/create_slo.py +2 -5
- honeycomb/_generated/api/sl_os/delete_slo.py +2 -5
- honeycomb/_generated/api/sl_os/get_slo.py +2 -8
- honeycomb/_generated/api/sl_os/list_slos.py +2 -5
- honeycomb/_generated/api/sl_os/update_slo.py +2 -5
- honeycomb/_generated/api/triggers/create_trigger.py +2 -6
- honeycomb/_generated/api/triggers/delete_trigger.py +2 -5
- honeycomb/_generated/api/triggers/get_trigger.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers.py +2 -5
- honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +2 -5
- honeycomb/_generated/api/triggers/update_trigger.py +2 -5
- honeycomb/_generated/client.py +2 -5
- honeycomb/_generated/models/__init__.py +195 -88
- honeycomb/_generated/models/api_key_create_request.py +6 -5
- honeycomb/_generated/models/api_key_create_request_data.py +15 -11
- honeycomb/_generated/models/api_key_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/api_key_create_request_data_type.py +1 -0
- honeycomb/_generated/models/api_key_list_response.py +2 -5
- honeycomb/_generated/models/api_key_object.py +14 -14
- honeycomb/_generated/models/api_key_object_links.py +2 -9
- honeycomb/_generated/models/api_key_object_relationships.py +5 -9
- honeycomb/_generated/models/api_key_object_type.py +1 -0
- honeycomb/_generated/models/api_key_response.py +2 -3
- honeycomb/_generated/models/api_key_update_request.py +15 -17
- honeycomb/_generated/models/auth.py +2 -5
- honeycomb/_generated/models/auth_api_key_access.py +2 -9
- honeycomb/_generated/models/auth_environment.py +2 -9
- honeycomb/_generated/models/auth_team.py +2 -9
- honeycomb/_generated/models/auth_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response.py +5 -8
- honeycomb/_generated/models/auth_v2_response_data.py +14 -11
- honeycomb/_generated/models/auth_v2_response_data_attributes.py +10 -9
- honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +1 -0
- honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/auth_v2_response_data_relationships.py +1 -7
- honeycomb/_generated/models/auth_v2_response_data_type.py +1 -0
- honeycomb/_generated/models/base_trigger.py +21 -18
- honeycomb/_generated/models/base_trigger_alert_type.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +5 -9
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +1 -0
- honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule.py +8 -6
- honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +1 -0
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +4 -9
- honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +1 -0
- honeycomb/_generated/models/base_trigger_threshold.py +2 -9
- honeycomb/_generated/models/base_trigger_threshold_op.py +1 -0
- honeycomb/_generated/models/batch_event.py +2 -5
- honeycomb/_generated/models/board.py +15 -17
- honeycomb/_generated/models/board_layout_generation.py +1 -0
- honeycomb/_generated/models/board_links.py +2 -9
- honeycomb/_generated/models/board_panel_position.py +2 -9
- honeycomb/_generated/models/board_query_visualization_settings.py +8 -8
- honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +4 -10
- honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +1 -0
- honeycomb/_generated/models/board_type.py +1 -0
- honeycomb/_generated/models/board_view_filter.py +2 -9
- honeycomb/_generated/models/board_view_filter_operation.py +1 -0
- honeycomb/_generated/models/board_view_response.py +2 -5
- honeycomb/_generated/models/budget_rate.py +4 -12
- honeycomb/_generated/models/budget_rate_alert_type.py +1 -0
- honeycomb/_generated/models/burn_alert_shared_params.py +4 -12
- honeycomb/_generated/models/calculated_field.py +2 -9
- honeycomb/_generated/models/configuration_key_attributes.py +16 -12
- honeycomb/_generated/models/configuration_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/configuration_key_attributes_permissions.py +172 -0
- honeycomb/_generated/models/configuration_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/configuration_key_request.py +101 -0
- honeycomb/_generated/models/configuration_key_request_attributes.py +107 -0
- honeycomb/_generated/models/configuration_key_request_attributes_permissions.py +168 -0
- honeycomb/_generated/models/configuration_key_request_type.py +8 -0
- honeycomb/_generated/models/create_board_view_request.py +2 -3
- honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_column.py +2 -9
- honeycomb/_generated/models/create_column_type.py +1 -0
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +10 -7
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- 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
- 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
- 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
- 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
- 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
- honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_environment_request.py +8 -6
- honeycomb/_generated/models/create_environment_request_data.py +10 -7
- honeycomb/_generated/models/create_environment_request_data_attributes.py +2 -9
- honeycomb/_generated/models/create_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/create_events_content_encoding.py +1 -0
- honeycomb/_generated/models/create_events_response_200_item.py +2 -9
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +10 -10
- honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +1 -7
- honeycomb/_generated/models/create_map_dependencies_request.py +2 -5
- honeycomb/_generated/models/create_map_dependencies_response.py +4 -10
- honeycomb/_generated/models/create_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/create_pipeline_health_record_request.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data.py +10 -7
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +8 -6
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +8 -8
- honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +10 -7
- 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
- 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
- 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
- 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
- honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +1 -0
- honeycomb/_generated/models/create_query_result_request.py +2 -9
- honeycomb/_generated/models/dataset.py +2 -6
- honeycomb/_generated/models/dataset_creation_payload.py +2 -9
- honeycomb/_generated/models/dataset_definition_type_1.py +4 -10
- honeycomb/_generated/models/dataset_definition_type_1_column_type.py +1 -0
- honeycomb/_generated/models/dataset_definitions.py +2 -6
- honeycomb/_generated/models/dataset_relationship.py +2 -3
- honeycomb/_generated/models/dataset_relationship_data.py +2 -8
- honeycomb/_generated/models/dataset_relationship_data_type.py +1 -0
- honeycomb/_generated/models/dataset_settings.py +2 -9
- honeycomb/_generated/models/dataset_update_payload.py +8 -8
- honeycomb/_generated/models/dataset_update_payload_settings.py +2 -9
- honeycomb/_generated/models/detailed_error.py +2 -9
- honeycomb/_generated/models/email_recipient.py +4 -7
- honeycomb/_generated/models/email_recipient_details.py +1 -7
- honeycomb/_generated/models/email_recipient_type.py +1 -0
- honeycomb/_generated/models/environment.py +6 -7
- honeycomb/_generated/models/environment_attributes.py +11 -9
- honeycomb/_generated/models/environment_attributes_color_type_1.py +1 -0
- honeycomb/_generated/models/environment_attributes_settings.py +1 -7
- honeycomb/_generated/models/environment_color.py +1 -0
- honeycomb/_generated/models/environment_links.py +1 -7
- honeycomb/_generated/models/environment_list_response.py +2 -5
- honeycomb/_generated/models/environment_relationship.py +8 -6
- honeycomb/_generated/models/environment_relationship_data.py +3 -8
- honeycomb/_generated/models/environment_relationship_data_type.py +1 -0
- honeycomb/_generated/models/environment_response.py +2 -3
- honeycomb/_generated/models/environment_type.py +1 -0
- honeycomb/_generated/models/error.py +2 -9
- honeycomb/_generated/models/event.py +2 -8
- honeycomb/_generated/models/exhaustion_time.py +4 -12
- honeycomb/_generated/models/exhaustion_time_alert_type.py +1 -0
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +10 -10
- honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +2 -9
- honeycomb/_generated/models/filter_op.py +1 -0
- honeycomb/_generated/models/get_map_dependencies_response.py +7 -10
- honeycomb/_generated/models/get_map_dependencies_response_status.py +1 -0
- honeycomb/_generated/models/having_calculate_op.py +1 -0
- honeycomb/_generated/models/having_op.py +1 -0
- honeycomb/_generated/models/included_resource.py +6 -7
- honeycomb/_generated/models/included_resource_attributes.py +1 -7
- honeycomb/_generated/models/ingest_key_attributes.py +14 -11
- honeycomb/_generated/models/ingest_key_attributes_key_type.py +1 -0
- honeycomb/_generated/models/ingest_key_attributes_permissions.py +2 -9
- honeycomb/_generated/models/ingest_key_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/ingest_key_request.py +100 -0
- honeycomb/_generated/models/ingest_key_request_attributes.py +75 -0
- honeycomb/_generated/models/ingest_key_request_type.py +8 -0
- honeycomb/_generated/models/ingest_key_type.py +2 -9
- honeycomb/_generated/models/ingest_key_type_key_type.py +1 -0
- honeycomb/_generated/models/jsonapi_error_source.py +2 -9
- honeycomb/_generated/models/kinesis_event.py +2 -5
- honeycomb/_generated/models/kinesis_event_record.py +2 -9
- honeycomb/_generated/models/kinesis_response.py +2 -9
- honeycomb/_generated/models/list_api_keys_filtertype.py +1 -0
- honeycomb/_generated/models/map_dependency.py +2 -5
- honeycomb/_generated/models/map_node.py +2 -9
- honeycomb/_generated/models/map_node_type.py +1 -0
- honeycomb/_generated/models/marker.py +2 -9
- honeycomb/_generated/models/marker_create_request.py +2 -3
- honeycomb/_generated/models/marker_create_request_data.py +16 -10
- honeycomb/_generated/models/marker_create_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_create_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_create_request_data_type.py +1 -0
- honeycomb/_generated/models/marker_object.py +7 -8
- honeycomb/_generated/models/marker_object_attributes.py +8 -8
- honeycomb/_generated/models/marker_object_attributes_timestamps.py +4 -12
- honeycomb/_generated/models/marker_object_links.py +2 -9
- honeycomb/_generated/models/marker_object_relationships.py +8 -8
- honeycomb/_generated/models/marker_object_relationships_dataset.py +8 -9
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +4 -10
- honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +1 -0
- honeycomb/_generated/models/marker_object_type.py +1 -0
- honeycomb/_generated/models/marker_response.py +2 -3
- honeycomb/_generated/models/marker_setting.py +2 -10
- honeycomb/_generated/models/marker_update_request.py +2 -3
- honeycomb/_generated/models/marker_update_request_data.py +16 -10
- honeycomb/_generated/models/marker_update_request_data_attributes.py +2 -9
- honeycomb/_generated/models/marker_update_request_data_relationships.py +2 -3
- honeycomb/_generated/models/marker_update_request_data_type.py +1 -0
- honeycomb/_generated/models/ms_teams_recipient.py +4 -7
- honeycomb/_generated/models/ms_teams_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_recipient_type.py +1 -0
- honeycomb/_generated/models/ms_teams_workflow_recipient.py +12 -11
- honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +1 -7
- honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +1 -0
- honeycomb/_generated/models/notification_recipient.py +8 -8
- honeycomb/_generated/models/notification_recipient_details.py +10 -9
- honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +1 -0
- honeycomb/_generated/models/notification_recipient_details_variables_item.py +2 -9
- honeycomb/_generated/models/pager_duty_recipient.py +8 -9
- honeycomb/_generated/models/pager_duty_recipient_details.py +1 -7
- honeycomb/_generated/models/pager_duty_recipient_type.py +1 -0
- honeycomb/_generated/models/pagination_links.py +2 -8
- honeycomb/_generated/models/payload_template.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_response_attributes.py +8 -8
- honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +1 -7
- honeycomb/_generated/models/pipeline_configuration_response_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_response_type.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout.py +16 -10
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/pipeline_configuration_rollout_links.py +2 -9
- honeycomb/_generated/models/pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/preset_filter.py +1 -7
- honeycomb/_generated/models/query.py +11 -11
- honeycomb/_generated/models/query_annotation.py +4 -12
- honeycomb/_generated/models/query_annotation_source.py +1 -0
- honeycomb/_generated/models/query_calculated_fields_item.py +1 -7
- honeycomb/_generated/models/query_calculations_item.py +2 -10
- honeycomb/_generated/models/query_compare_time_offset_seconds.py +1 -0
- honeycomb/_generated/models/query_filter_combination.py +1 -0
- honeycomb/_generated/models/query_filters_item.py +2 -11
- honeycomb/_generated/models/query_havings_item.py +2 -10
- honeycomb/_generated/models/query_op.py +1 -0
- honeycomb/_generated/models/query_orders_item.py +2 -9
- honeycomb/_generated/models/query_orders_item_order.py +1 -0
- honeycomb/_generated/models/query_panel.py +2 -6
- honeycomb/_generated/models/query_panel_query_panel.py +10 -9
- honeycomb/_generated/models/query_panel_query_panel_query_style.py +1 -0
- honeycomb/_generated/models/query_result.py +2 -5
- honeycomb/_generated/models/query_result_details.py +5 -8
- honeycomb/_generated/models/query_result_details_data.py +5 -8
- honeycomb/_generated/models/query_result_details_links.py +2 -9
- honeycomb/_generated/models/query_result_links.py +2 -9
- honeycomb/_generated/models/query_results_data.py +2 -5
- honeycomb/_generated/models/query_results_data_data.py +2 -8
- honeycomb/_generated/models/query_results_series.py +2 -5
- honeycomb/_generated/models/recipient_properties.py +4 -12
- honeycomb/_generated/models/recipient_type.py +1 -0
- honeycomb/_generated/models/slack_recipient.py +4 -7
- honeycomb/_generated/models/slack_recipient_details.py +1 -7
- honeycomb/_generated/models/slack_recipient_type.py +1 -0
- honeycomb/_generated/models/slo.py +4 -8
- honeycomb/_generated/models/slo_create.py +4 -8
- honeycomb/_generated/models/slo_create_sli.py +1 -7
- honeycomb/_generated/models/slo_detailed_response.py +4 -8
- honeycomb/_generated/models/slo_detailed_response_status.py +1 -0
- honeycomb/_generated/models/slo_history.py +2 -9
- honeycomb/_generated/models/slo_history_request.py +2 -8
- honeycomb/_generated/models/slo_history_response.py +2 -3
- honeycomb/_generated/models/slo_panel.py +2 -6
- honeycomb/_generated/models/slo_panel_slo_panel.py +2 -9
- honeycomb/_generated/models/slo_sli.py +1 -7
- honeycomb/_generated/models/tag.py +1 -7
- honeycomb/_generated/models/team_relationship.py +2 -3
- honeycomb/_generated/models/team_relationship_team.py +6 -5
- honeycomb/_generated/models/team_relationship_team_data.py +3 -8
- honeycomb/_generated/models/team_relationship_team_data_type.py +1 -0
- honeycomb/_generated/models/template_variable_definition.py +2 -9
- honeycomb/_generated/models/text_panel.py +2 -6
- honeycomb/_generated/models/text_panel_text_panel.py +1 -7
- honeycomb/_generated/models/trigger_response.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query.py +27 -21
- honeycomb/_generated/models/trigger_with_inline_query_query.py +1 -7
- honeycomb/_generated/models/trigger_with_query_reference.py +21 -18
- honeycomb/_generated/models/update_board_view_request.py +2 -5
- honeycomb/_generated/models/update_environment_request.py +8 -6
- honeycomb/_generated/models/update_environment_request_data.py +10 -7
- honeycomb/_generated/models/update_environment_request_data_attributes.py +8 -8
- honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +2 -9
- honeycomb/_generated/models/update_environment_request_data_type.py +1 -0
- honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +4 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +10 -7
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +3 -8
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +1 -0
- honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +8 -6
- honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +1 -0
- honeycomb/_generated/models/user_relationship.py +2 -3
- honeycomb/_generated/models/user_relationship_data.py +2 -8
- honeycomb/_generated/models/user_relationship_data_type.py +1 -0
- honeycomb/_generated/models/validation_error.py +8 -8
- honeycomb/_generated/models/validation_error_type_detail_item.py +4 -10
- honeycomb/_generated/models/validation_error_type_detail_item_code.py +1 -0
- honeycomb/_generated/models/webhook_header.py +2 -9
- honeycomb/_generated/models/webhook_recipient.py +4 -7
- honeycomb/_generated/models/webhook_recipient_details.py +8 -8
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +12 -10
- honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +2 -5
- honeycomb/_generated/models/webhook_recipient_type.py +1 -0
- honeycomb/_generated/types.py +1 -1
- honeycomb/cli/__init__.py +85 -0
- honeycomb/cli/api_keys.py +205 -0
- honeycomb/cli/auth.py +70 -0
- honeycomb/cli/boards.py +203 -0
- honeycomb/cli/columns.py +256 -0
- honeycomb/cli/config.py +259 -0
- honeycomb/cli/datasets.py +186 -0
- honeycomb/cli/derived_columns.py +222 -0
- honeycomb/cli/environments.py +240 -0
- honeycomb/cli/formatters.py +242 -0
- honeycomb/cli/markers.py +151 -0
- honeycomb/cli/queries.py +380 -0
- honeycomb/cli/recipients.py +211 -0
- honeycomb/cli/slos.py +338 -0
- honeycomb/cli/triggers.py +271 -0
- honeycomb/client.py +13 -7
- honeycomb/models/__init__.py +18 -3
- honeycomb/models/api_keys.py +49 -5
- honeycomb/models/auth.py +71 -0
- honeycomb/models/board_builder.py +97 -25
- honeycomb/models/boards.py +95 -1
- honeycomb/models/datasets.py +42 -0
- honeycomb/models/queries.py +21 -0
- honeycomb/models/query_builder.py +119 -59
- honeycomb/models/recipient_builder.py +51 -4
- honeycomb/models/slo_builder.py +24 -19
- honeycomb/models/slos.py +50 -3
- honeycomb/models/tool_inputs.py +630 -0
- honeycomb/models/triggers.py +39 -9
- honeycomb/resources/__init__.py +2 -0
- honeycomb/resources/api_keys.py +66 -29
- honeycomb/resources/auth.py +97 -0
- honeycomb/resources/boards.py +272 -18
- honeycomb/resources/datasets.py +49 -11
- honeycomb/resources/environments.py +54 -31
- honeycomb/resources/slos.py +87 -61
- honeycomb/tools/__main__.py +40 -4
- honeycomb/tools/builders.py +235 -150
- honeycomb/tools/descriptions.py +175 -7
- honeycomb/tools/executor.py +212 -25
- honeycomb/tools/generator.py +61 -2264
- honeycomb/tools/resources/__init__.py +42 -0
- honeycomb/tools/resources/api_keys.py +249 -0
- honeycomb/tools/resources/auth.py +98 -0
- honeycomb/tools/resources/boards.py +313 -0
- honeycomb/tools/resources/burn_alerts.py +278 -0
- honeycomb/tools/resources/columns.py +257 -0
- honeycomb/tools/resources/datasets.py +215 -0
- honeycomb/tools/resources/derived_columns.py +311 -0
- honeycomb/tools/resources/environments.py +211 -0
- honeycomb/tools/resources/events.py +158 -0
- honeycomb/tools/resources/marker_settings.py +216 -0
- honeycomb/tools/resources/markers.py +197 -0
- honeycomb/tools/resources/queries.py +220 -0
- honeycomb/tools/resources/recipients.py +297 -0
- honeycomb/tools/resources/service_map.py +110 -0
- honeycomb/tools/resources/slos.py +276 -0
- honeycomb/tools/resources/triggers.py +328 -0
- honeycomb/tools/schemas.py +81 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/METADATA +33 -8
- honeycomb_api-0.5.3.dist-info/RECORD +497 -0
- honeycomb_api-0.5.3.dist-info/entry_points.txt +5 -0
- honeycomb_api-0.1.0.dist-info/RECORD +0 -453
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/WHEEL +0 -0
- {honeycomb_api-0.1.0.dist-info → honeycomb_api-0.5.3.dist-info}/licenses/LICENSE +0 -0
honeycomb/cli/boards.py
ADDED
|
@@ -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)
|
honeycomb/cli/columns.py
ADDED
|
@@ -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)
|