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/models/triggers.py
CHANGED
|
@@ -6,7 +6,7 @@ from datetime import datetime
|
|
|
6
6
|
from enum import Enum
|
|
7
7
|
from typing import Any
|
|
8
8
|
|
|
9
|
-
from pydantic import BaseModel, Field
|
|
9
|
+
from pydantic import BaseModel, Field, field_validator
|
|
10
10
|
|
|
11
11
|
from honeycomb.models.query_builder import (
|
|
12
12
|
CalcOp,
|
|
@@ -14,6 +14,7 @@ from honeycomb.models.query_builder import (
|
|
|
14
14
|
Filter,
|
|
15
15
|
FilterCombination,
|
|
16
16
|
)
|
|
17
|
+
from honeycomb.models.tool_inputs import TagInput
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
class TriggerThresholdOp(str, Enum):
|
|
@@ -38,7 +39,10 @@ class TriggerThreshold(BaseModel):
|
|
|
38
39
|
op: TriggerThresholdOp = Field(description="Comparison operator")
|
|
39
40
|
value: float = Field(description="Threshold value")
|
|
40
41
|
exceeded_limit: int | None = Field(
|
|
41
|
-
default=None,
|
|
42
|
+
default=None,
|
|
43
|
+
ge=1,
|
|
44
|
+
le=5,
|
|
45
|
+
description="Number of times threshold must be exceeded (1-5, default 1)",
|
|
42
46
|
)
|
|
43
47
|
|
|
44
48
|
|
|
@@ -50,8 +54,6 @@ def _default_calculations() -> list[Calculation | dict[str, Any]]:
|
|
|
50
54
|
class TriggerQuery(BaseModel):
|
|
51
55
|
"""Inline query specification for a trigger.
|
|
52
56
|
|
|
53
|
-
Note: time_range must be <= 3600 (1 hour) for triggers.
|
|
54
|
-
|
|
55
57
|
Accepts both typed models and dicts for flexibility:
|
|
56
58
|
>>> # Using typed models
|
|
57
59
|
>>> TriggerQuery(calculations=[Calculation(op=CalcOp.P99, column="duration_ms")])
|
|
@@ -61,9 +63,10 @@ class TriggerQuery(BaseModel):
|
|
|
61
63
|
"""
|
|
62
64
|
|
|
63
65
|
time_range: int = Field(
|
|
64
|
-
default=
|
|
66
|
+
default=900,
|
|
67
|
+
ge=300,
|
|
65
68
|
le=3600,
|
|
66
|
-
description="Query time range in seconds (
|
|
69
|
+
description="Query time range in seconds (300-3600, i.e. 5 min to 1 hour)",
|
|
67
70
|
)
|
|
68
71
|
granularity: int | None = Field(default=None, description="Time granularity in seconds")
|
|
69
72
|
calculations: list[Calculation | dict[str, Any]] | None = Field(
|
|
@@ -76,6 +79,19 @@ class TriggerQuery(BaseModel):
|
|
|
76
79
|
default=None, description="How to combine filters (AND/OR)"
|
|
77
80
|
)
|
|
78
81
|
|
|
82
|
+
@field_validator("calculations")
|
|
83
|
+
@classmethod
|
|
84
|
+
def validate_single_calculation(
|
|
85
|
+
cls, v: list[Calculation | dict[str, Any]] | None
|
|
86
|
+
) -> list[Calculation | dict[str, Any]] | None:
|
|
87
|
+
"""Validate that only one calculation is provided (trigger limitation)."""
|
|
88
|
+
if v is not None and len(v) > 1:
|
|
89
|
+
raise ValueError(
|
|
90
|
+
f"Triggers support only a single calculation, got {len(v)}. "
|
|
91
|
+
"Use multiple triggers or a saved query if you need multiple calculations."
|
|
92
|
+
)
|
|
93
|
+
return v
|
|
94
|
+
|
|
79
95
|
|
|
80
96
|
def _normalize_calculation(calc: Calculation | dict[str, Any]) -> dict[str, Any]:
|
|
81
97
|
"""Convert a Calculation or dict to API dict format."""
|
|
@@ -110,7 +126,8 @@ class TriggerCreate(BaseModel):
|
|
|
110
126
|
default=900,
|
|
111
127
|
ge=60,
|
|
112
128
|
le=86400,
|
|
113
|
-
description="Check frequency in seconds (60-86400)",
|
|
129
|
+
description="Check frequency in seconds (60-86400, must be multiple of 60)",
|
|
130
|
+
json_schema_extra={"multipleOf": 60},
|
|
114
131
|
)
|
|
115
132
|
query: TriggerQuery | None = Field(default=None, description="Inline query")
|
|
116
133
|
query_id: str | None = Field(default=None, description="Reference to saved query")
|
|
@@ -120,7 +137,7 @@ class TriggerCreate(BaseModel):
|
|
|
120
137
|
description="When to send alerts",
|
|
121
138
|
)
|
|
122
139
|
recipients: list[dict] | None = Field(default=None, description="Notification recipients")
|
|
123
|
-
tags: list[
|
|
140
|
+
tags: list[TagInput] | None = Field(
|
|
124
141
|
default=None, description="Tags for organizing triggers (max 10)"
|
|
125
142
|
)
|
|
126
143
|
baseline_details: dict[str, Any] | None = Field(
|
|
@@ -128,6 +145,14 @@ class TriggerCreate(BaseModel):
|
|
|
128
145
|
description="Baseline threshold configuration for comparing against historical data",
|
|
129
146
|
)
|
|
130
147
|
|
|
148
|
+
@field_validator("frequency")
|
|
149
|
+
@classmethod
|
|
150
|
+
def validate_frequency_multiple(cls, v: int) -> int:
|
|
151
|
+
"""Validate that frequency is a multiple of 60."""
|
|
152
|
+
if v % 60 != 0:
|
|
153
|
+
raise ValueError(f"Frequency must be a multiple of 60 seconds, got {v}")
|
|
154
|
+
return v
|
|
155
|
+
|
|
131
156
|
def model_dump_for_api(self) -> dict[str, Any]:
|
|
132
157
|
"""Serialize for API request, handling nested models."""
|
|
133
158
|
data: dict[str, Any] = {
|
|
@@ -172,7 +197,7 @@ class TriggerCreate(BaseModel):
|
|
|
172
197
|
data["recipients"] = self.recipients
|
|
173
198
|
|
|
174
199
|
if self.tags:
|
|
175
|
-
data["tags"] = self.tags
|
|
200
|
+
data["tags"] = [{"key": tag.key, "value": tag.value} for tag in self.tags]
|
|
176
201
|
|
|
177
202
|
if self.baseline_details:
|
|
178
203
|
data["baseline_details"] = self.baseline_details
|
|
@@ -206,3 +231,8 @@ class Trigger(BaseModel):
|
|
|
206
231
|
updated_at: datetime | None = Field(default=None, description="Last update timestamp")
|
|
207
232
|
|
|
208
233
|
model_config = {"extra": "allow"}
|
|
234
|
+
|
|
235
|
+
@property
|
|
236
|
+
def dataset(self) -> str:
|
|
237
|
+
"""Alias for dataset_slug for convenience."""
|
|
238
|
+
return self.dataset_slug
|
honeycomb/resources/__init__.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Resource clients for Honeycomb API."""
|
|
2
2
|
|
|
3
3
|
from .api_keys import ApiKeysResource
|
|
4
|
+
from .auth import AuthResource
|
|
4
5
|
from .base import BaseResource
|
|
5
6
|
from .boards import BoardsResource
|
|
6
7
|
from .burn_alerts import BurnAlertsResource
|
|
@@ -30,6 +31,7 @@ __all__ = [
|
|
|
30
31
|
"BurnAlertsResource",
|
|
31
32
|
"EventsResource",
|
|
32
33
|
"ApiKeysResource",
|
|
34
|
+
"AuthResource",
|
|
33
35
|
"EnvironmentsResource",
|
|
34
36
|
"ServiceMapDependenciesResource",
|
|
35
37
|
]
|
honeycomb/resources/api_keys.py
CHANGED
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
from typing import TYPE_CHECKING, Any
|
|
6
6
|
from urllib.parse import parse_qs, urlparse
|
|
7
7
|
|
|
8
|
-
from ..models.api_keys import ApiKey, ApiKeyCreate
|
|
8
|
+
from ..models.api_keys import ApiKey, ApiKeyCreate, ApiKeyUpdate
|
|
9
9
|
from .base import BaseResource
|
|
10
10
|
|
|
11
11
|
if TYPE_CHECKING:
|
|
@@ -33,9 +33,8 @@ class ApiKeysResource(BaseResource):
|
|
|
33
33
|
... management_key="hcamk_xxx",
|
|
34
34
|
... management_secret="xxx"
|
|
35
35
|
... ) as client:
|
|
36
|
-
... keys = await client.api_keys.list_async(
|
|
36
|
+
... keys = await client.api_keys.list_async()
|
|
37
37
|
... key = await client.api_keys.create_async(
|
|
38
|
-
... team="my-team",
|
|
39
38
|
... api_key=ApiKeyCreate(
|
|
40
39
|
... name="My Ingest Key",
|
|
41
40
|
... key_type=ApiKeyType.INGEST,
|
|
@@ -49,11 +48,50 @@ class ApiKeysResource(BaseResource):
|
|
|
49
48
|
... management_secret="xxx",
|
|
50
49
|
... sync=True
|
|
51
50
|
... ) as client:
|
|
52
|
-
... keys = client.api_keys.list(
|
|
51
|
+
... keys = client.api_keys.list()
|
|
53
52
|
"""
|
|
54
53
|
|
|
55
54
|
def __init__(self, client: HoneycombClient) -> None:
|
|
56
55
|
super().__init__(client)
|
|
56
|
+
self._cached_team_slug: str | None = None
|
|
57
|
+
|
|
58
|
+
async def _get_team_slug_async(self, team: str | None = None) -> str:
|
|
59
|
+
"""Get team slug, auto-detecting from auth if not provided."""
|
|
60
|
+
if team:
|
|
61
|
+
return team
|
|
62
|
+
|
|
63
|
+
# Use cached value if available
|
|
64
|
+
if self._cached_team_slug:
|
|
65
|
+
return self._cached_team_slug
|
|
66
|
+
|
|
67
|
+
# Auto-detect from auth endpoint
|
|
68
|
+
auth_info = await self._client.auth.get_async()
|
|
69
|
+
if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
|
|
70
|
+
raise ValueError(
|
|
71
|
+
"Cannot auto-detect team slug. Please provide team parameter explicitly."
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
self._cached_team_slug = auth_info.team_slug
|
|
75
|
+
return self._cached_team_slug
|
|
76
|
+
|
|
77
|
+
def _get_team_slug(self, team: str | None = None) -> str:
|
|
78
|
+
"""Get team slug (sync), auto-detecting from auth if not provided."""
|
|
79
|
+
if team:
|
|
80
|
+
return team
|
|
81
|
+
|
|
82
|
+
# Use cached value if available
|
|
83
|
+
if self._cached_team_slug:
|
|
84
|
+
return self._cached_team_slug
|
|
85
|
+
|
|
86
|
+
# Auto-detect from auth endpoint
|
|
87
|
+
auth_info = self._client.auth.get()
|
|
88
|
+
if not hasattr(auth_info, "team_slug") or not auth_info.team_slug:
|
|
89
|
+
raise ValueError(
|
|
90
|
+
"Cannot auto-detect team slug. Please provide team parameter explicitly."
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
self._cached_team_slug = auth_info.team_slug
|
|
94
|
+
return self._cached_team_slug
|
|
57
95
|
|
|
58
96
|
def _build_path(self, team: str, key_id: str | None = None) -> str:
|
|
59
97
|
"""Build API path for API keys."""
|
|
@@ -89,14 +127,13 @@ class ApiKeysResource(BaseResource):
|
|
|
89
127
|
# Async methods
|
|
90
128
|
# -------------------------------------------------------------------------
|
|
91
129
|
|
|
92
|
-
async def list_async(self,
|
|
93
|
-
"""List all API keys for
|
|
130
|
+
async def list_async(self, key_type: str | None = None) -> list[ApiKey]:
|
|
131
|
+
"""List all API keys for the authenticated team (async).
|
|
94
132
|
|
|
95
133
|
Automatically paginates through all results. For teams with many API keys,
|
|
96
134
|
this may result in multiple API requests.
|
|
97
135
|
|
|
98
136
|
Args:
|
|
99
|
-
team: Team slug.
|
|
100
137
|
key_type: Optional filter by key type ('ingest' or 'configuration').
|
|
101
138
|
|
|
102
139
|
Returns:
|
|
@@ -106,6 +143,7 @@ class ApiKeysResource(BaseResource):
|
|
|
106
143
|
The default rate limit is 100 requests per minute per operation.
|
|
107
144
|
Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
|
|
108
145
|
"""
|
|
146
|
+
team = await self._get_team_slug_async()
|
|
109
147
|
results: list[ApiKey] = []
|
|
110
148
|
cursor: str | None = None
|
|
111
149
|
path = self._build_path(team)
|
|
@@ -129,29 +167,29 @@ class ApiKeysResource(BaseResource):
|
|
|
129
167
|
|
|
130
168
|
return results
|
|
131
169
|
|
|
132
|
-
async def get_async(self,
|
|
170
|
+
async def get_async(self, key_id: str) -> ApiKey:
|
|
133
171
|
"""Get a specific API key (async).
|
|
134
172
|
|
|
135
173
|
Args:
|
|
136
|
-
team: Team slug.
|
|
137
174
|
key_id: API Key ID.
|
|
138
175
|
|
|
139
176
|
Returns:
|
|
140
177
|
ApiKey object.
|
|
141
178
|
"""
|
|
179
|
+
team = await self._get_team_slug_async()
|
|
142
180
|
data = await self._get_async(self._build_path(team, key_id))
|
|
143
181
|
return ApiKey.from_jsonapi(data)
|
|
144
182
|
|
|
145
|
-
async def create_async(self,
|
|
183
|
+
async def create_async(self, api_key: ApiKeyCreate) -> ApiKey:
|
|
146
184
|
"""Create a new API key (async).
|
|
147
185
|
|
|
148
186
|
Args:
|
|
149
|
-
team: Team slug.
|
|
150
187
|
api_key: API key configuration.
|
|
151
188
|
|
|
152
189
|
Returns:
|
|
153
190
|
Created ApiKey object (includes secret, save it immediately!).
|
|
154
191
|
"""
|
|
192
|
+
team = await self._get_team_slug_async()
|
|
155
193
|
data = await self._post_async(
|
|
156
194
|
self._build_path(team),
|
|
157
195
|
json=api_key.to_jsonapi(),
|
|
@@ -159,19 +197,18 @@ class ApiKeysResource(BaseResource):
|
|
|
159
197
|
)
|
|
160
198
|
return ApiKey.from_jsonapi(data)
|
|
161
199
|
|
|
162
|
-
async def update_async(self,
|
|
200
|
+
async def update_async(self, key_id: str, api_key: ApiKeyUpdate) -> ApiKey:
|
|
163
201
|
"""Update an existing API key (async).
|
|
164
202
|
|
|
165
203
|
Args:
|
|
166
|
-
team: Team slug.
|
|
167
204
|
key_id: API Key ID.
|
|
168
205
|
api_key: Updated API key configuration.
|
|
169
206
|
|
|
170
207
|
Returns:
|
|
171
208
|
Updated ApiKey object.
|
|
172
209
|
"""
|
|
173
|
-
|
|
174
|
-
payload
|
|
210
|
+
team = await self._get_team_slug_async()
|
|
211
|
+
payload = api_key.to_jsonapi(key_id)
|
|
175
212
|
data = await self._patch_async(
|
|
176
213
|
self._build_path(team, key_id),
|
|
177
214
|
json=payload,
|
|
@@ -179,27 +216,26 @@ class ApiKeysResource(BaseResource):
|
|
|
179
216
|
)
|
|
180
217
|
return ApiKey.from_jsonapi(data)
|
|
181
218
|
|
|
182
|
-
async def delete_async(self,
|
|
219
|
+
async def delete_async(self, key_id: str) -> None:
|
|
183
220
|
"""Delete an API key (async).
|
|
184
221
|
|
|
185
222
|
Args:
|
|
186
|
-
team: Team slug.
|
|
187
223
|
key_id: API Key ID.
|
|
188
224
|
"""
|
|
225
|
+
team = await self._get_team_slug_async()
|
|
189
226
|
await self._delete_async(self._build_path(team, key_id))
|
|
190
227
|
|
|
191
228
|
# -------------------------------------------------------------------------
|
|
192
229
|
# Sync methods
|
|
193
230
|
# -------------------------------------------------------------------------
|
|
194
231
|
|
|
195
|
-
def list(self,
|
|
196
|
-
"""List all API keys for
|
|
232
|
+
def list(self, key_type: str | None = None) -> list[ApiKey]:
|
|
233
|
+
"""List all API keys for the authenticated team.
|
|
197
234
|
|
|
198
235
|
Automatically paginates through all results. For teams with many API keys,
|
|
199
236
|
this may result in multiple API requests.
|
|
200
237
|
|
|
201
238
|
Args:
|
|
202
|
-
team: Team slug.
|
|
203
239
|
key_type: Optional filter by key type ('ingest' or 'configuration').
|
|
204
240
|
|
|
205
241
|
Returns:
|
|
@@ -212,6 +248,7 @@ class ApiKeysResource(BaseResource):
|
|
|
212
248
|
if not self._client.is_sync:
|
|
213
249
|
raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
|
|
214
250
|
|
|
251
|
+
team = self._get_team_slug()
|
|
215
252
|
results: list[ApiKey] = []
|
|
216
253
|
cursor: str | None = None
|
|
217
254
|
path = self._build_path(team)
|
|
@@ -235,11 +272,10 @@ class ApiKeysResource(BaseResource):
|
|
|
235
272
|
|
|
236
273
|
return results
|
|
237
274
|
|
|
238
|
-
def get(self,
|
|
275
|
+
def get(self, key_id: str) -> ApiKey:
|
|
239
276
|
"""Get a specific API key.
|
|
240
277
|
|
|
241
278
|
Args:
|
|
242
|
-
team: Team slug.
|
|
243
279
|
key_id: API Key ID.
|
|
244
280
|
|
|
245
281
|
Returns:
|
|
@@ -247,10 +283,11 @@ class ApiKeysResource(BaseResource):
|
|
|
247
283
|
"""
|
|
248
284
|
if not self._client.is_sync:
|
|
249
285
|
raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
|
|
286
|
+
team = self._get_team_slug()
|
|
250
287
|
data = self._get_sync(self._build_path(team, key_id))
|
|
251
288
|
return ApiKey.from_jsonapi(data)
|
|
252
289
|
|
|
253
|
-
def create(self,
|
|
290
|
+
def create(self, api_key: ApiKeyCreate) -> ApiKey:
|
|
254
291
|
"""Create a new API key.
|
|
255
292
|
|
|
256
293
|
Args:
|
|
@@ -262,6 +299,7 @@ class ApiKeysResource(BaseResource):
|
|
|
262
299
|
"""
|
|
263
300
|
if not self._client.is_sync:
|
|
264
301
|
raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
|
|
302
|
+
team = self._get_team_slug()
|
|
265
303
|
data = self._post_sync(
|
|
266
304
|
self._build_path(team),
|
|
267
305
|
json=api_key.to_jsonapi(),
|
|
@@ -269,11 +307,10 @@ class ApiKeysResource(BaseResource):
|
|
|
269
307
|
)
|
|
270
308
|
return ApiKey.from_jsonapi(data)
|
|
271
309
|
|
|
272
|
-
def update(self,
|
|
310
|
+
def update(self, key_id: str, api_key: ApiKeyUpdate) -> ApiKey:
|
|
273
311
|
"""Update an existing API key.
|
|
274
312
|
|
|
275
313
|
Args:
|
|
276
|
-
team: Team slug.
|
|
277
314
|
key_id: API Key ID.
|
|
278
315
|
api_key: Updated API key configuration.
|
|
279
316
|
|
|
@@ -282,8 +319,8 @@ class ApiKeysResource(BaseResource):
|
|
|
282
319
|
"""
|
|
283
320
|
if not self._client.is_sync:
|
|
284
321
|
raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
|
|
285
|
-
|
|
286
|
-
payload
|
|
322
|
+
team = self._get_team_slug()
|
|
323
|
+
payload = api_key.to_jsonapi(key_id)
|
|
287
324
|
data = self._patch_sync(
|
|
288
325
|
self._build_path(team, key_id),
|
|
289
326
|
json=payload,
|
|
@@ -291,13 +328,13 @@ class ApiKeysResource(BaseResource):
|
|
|
291
328
|
)
|
|
292
329
|
return ApiKey.from_jsonapi(data)
|
|
293
330
|
|
|
294
|
-
def delete(self,
|
|
331
|
+
def delete(self, key_id: str) -> None:
|
|
295
332
|
"""Delete an API key.
|
|
296
333
|
|
|
297
334
|
Args:
|
|
298
|
-
team: Team slug.
|
|
299
335
|
key_id: API Key ID.
|
|
300
336
|
"""
|
|
301
337
|
if not self._client.is_sync:
|
|
302
338
|
raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
|
|
339
|
+
team = self._get_team_slug()
|
|
303
340
|
self._delete_sync(self._build_path(team, key_id))
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"""Auth resource for retrieving API key metadata."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import TYPE_CHECKING
|
|
6
|
+
|
|
7
|
+
from honeycomb.models.auth import AuthInfo, AuthInfoV2
|
|
8
|
+
from honeycomb.resources.base import BaseResource
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from honeycomb.client import HoneycombClient
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AuthResource(BaseResource):
|
|
15
|
+
"""Access authentication metadata for the current API key.
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
>>> # Auto-detects endpoint based on credentials
|
|
19
|
+
>>> auth_info = await client.auth.get_async()
|
|
20
|
+
>>> print(f"Team: {auth_info.team_name}")
|
|
21
|
+
|
|
22
|
+
>>> # Force v2 endpoint (requires management key)
|
|
23
|
+
>>> auth_info = await client.auth.get_async(use_v2=True)
|
|
24
|
+
>>> print(f"Scopes: {auth_info.scopes}")
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
def __init__(self, client: HoneycombClient) -> None:
|
|
28
|
+
super().__init__(client)
|
|
29
|
+
|
|
30
|
+
def _is_management_auth(self) -> bool:
|
|
31
|
+
"""Check if client is using management key authentication."""
|
|
32
|
+
from honeycomb.auth import ManagementKeyAuth
|
|
33
|
+
|
|
34
|
+
return isinstance(self._client._auth, ManagementKeyAuth)
|
|
35
|
+
|
|
36
|
+
def _require_management_auth(self) -> None:
|
|
37
|
+
"""Raise error if not using management key authentication."""
|
|
38
|
+
if not self._is_management_auth():
|
|
39
|
+
raise ValueError(
|
|
40
|
+
"v2 auth endpoint requires management key authentication. "
|
|
41
|
+
"Initialize client with management_key and management_secret."
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
async def get_async(self, *, use_v2: bool | None = None) -> AuthInfo | AuthInfoV2:
|
|
45
|
+
"""Get metadata about the current API key.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
use_v2: Force v2 endpoint. If None, auto-detects based on credentials.
|
|
49
|
+
If True with API key credentials, raises ValueError.
|
|
50
|
+
|
|
51
|
+
Returns:
|
|
52
|
+
AuthInfo for v1 (API key) or AuthInfoV2 for v2 (management key).
|
|
53
|
+
"""
|
|
54
|
+
if use_v2 is None:
|
|
55
|
+
use_v2 = self._is_management_auth()
|
|
56
|
+
|
|
57
|
+
if use_v2:
|
|
58
|
+
self._require_management_auth()
|
|
59
|
+
data = await self._get_async("/2/auth")
|
|
60
|
+
return AuthInfoV2.from_jsonapi(data)
|
|
61
|
+
|
|
62
|
+
data = await self._get_async("/1/auth")
|
|
63
|
+
return AuthInfo(
|
|
64
|
+
id=data.get("id", ""),
|
|
65
|
+
type=data.get("type", ""),
|
|
66
|
+
team_name=data.get("team", {}).get("name", ""),
|
|
67
|
+
team_slug=data.get("team", {}).get("slug", ""),
|
|
68
|
+
environment_name=data.get("environment", {}).get("name", ""),
|
|
69
|
+
environment_slug=data.get("environment", {}).get("slug", ""),
|
|
70
|
+
api_key_access=data.get("api_key_access", {}),
|
|
71
|
+
time_to_live=data.get("time_to_live"),
|
|
72
|
+
)
|
|
73
|
+
|
|
74
|
+
def get(self, *, use_v2: bool | None = None) -> AuthInfo | AuthInfoV2:
|
|
75
|
+
"""Get metadata about the current API key (sync version)."""
|
|
76
|
+
if not self._client.is_sync:
|
|
77
|
+
raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
|
|
78
|
+
|
|
79
|
+
if use_v2 is None:
|
|
80
|
+
use_v2 = self._is_management_auth()
|
|
81
|
+
|
|
82
|
+
if use_v2:
|
|
83
|
+
self._require_management_auth()
|
|
84
|
+
data = self._get_sync("/2/auth")
|
|
85
|
+
return AuthInfoV2.from_jsonapi(data)
|
|
86
|
+
|
|
87
|
+
data = self._get_sync("/1/auth")
|
|
88
|
+
return AuthInfo(
|
|
89
|
+
id=data.get("id", ""),
|
|
90
|
+
type=data.get("type", ""),
|
|
91
|
+
team_name=data.get("team", {}).get("name", ""),
|
|
92
|
+
team_slug=data.get("team", {}).get("slug", ""),
|
|
93
|
+
environment_name=data.get("environment", {}).get("name", ""),
|
|
94
|
+
environment_slug=data.get("environment", {}).get("slug", ""),
|
|
95
|
+
api_key_access=data.get("api_key_access", {}),
|
|
96
|
+
time_to_live=data.get("time_to_live"),
|
|
97
|
+
)
|