honeycomb-api 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (453) hide show
  1. honeycomb/__init__.py +217 -0
  2. honeycomb/_generated/__init__.py +8 -0
  3. honeycomb/_generated/api/__init__.py +1 -0
  4. honeycomb/_generated/api/auth/__init__.py +0 -0
  5. honeycomb/_generated/api/auth/get_auth.py +172 -0
  6. honeycomb/_generated/api/auth/get_v2_auth.py +168 -0
  7. honeycomb/_generated/api/boards/__init__.py +0 -0
  8. honeycomb/_generated/api/boards/create_board.py +217 -0
  9. honeycomb/_generated/api/boards/create_board_view.py +237 -0
  10. honeycomb/_generated/api/boards/delete_board.py +191 -0
  11. honeycomb/_generated/api/boards/delete_board_view.py +210 -0
  12. honeycomb/_generated/api/boards/get_board.py +208 -0
  13. honeycomb/_generated/api/boards/get_board_view.py +214 -0
  14. honeycomb/_generated/api/boards/list_board_views.py +206 -0
  15. honeycomb/_generated/api/boards/list_boards.py +177 -0
  16. honeycomb/_generated/api/boards/update_board.py +238 -0
  17. honeycomb/_generated/api/boards/update_board_view.py +250 -0
  18. honeycomb/_generated/api/burn_alerts/__init__.py +0 -0
  19. honeycomb/_generated/api/burn_alerts/create_burn_alert.py +224 -0
  20. honeycomb/_generated/api/burn_alerts/delete_burn_alert.py +204 -0
  21. honeycomb/_generated/api/burn_alerts/get_burn_alert.py +208 -0
  22. honeycomb/_generated/api/burn_alerts/list_burn_alerts_by_slo.py +220 -0
  23. honeycomb/_generated/api/calculated_fields/__init__.py +0 -0
  24. honeycomb/_generated/api/calculated_fields/create_calculated_field.py +239 -0
  25. honeycomb/_generated/api/calculated_fields/delete_calculated_field.py +225 -0
  26. honeycomb/_generated/api/calculated_fields/get_calculated_field.py +207 -0
  27. honeycomb/_generated/api/calculated_fields/list_calculated_fields.py +252 -0
  28. honeycomb/_generated/api/calculated_fields/update_calculated_field.py +242 -0
  29. honeycomb/_generated/api/columns/__init__.py +0 -0
  30. honeycomb/_generated/api/columns/create_column.py +241 -0
  31. honeycomb/_generated/api/columns/delete_column.py +221 -0
  32. honeycomb/_generated/api/columns/get_column.py +206 -0
  33. honeycomb/_generated/api/columns/list_columns.py +256 -0
  34. honeycomb/_generated/api/columns/update_column.py +242 -0
  35. honeycomb/_generated/api/dataset_definitions/__init__.py +0 -0
  36. honeycomb/_generated/api/dataset_definitions/list_dataset_definitions.py +193 -0
  37. honeycomb/_generated/api/dataset_definitions/patch_dataset_definitions.py +235 -0
  38. honeycomb/_generated/api/datasets/__init__.py +0 -0
  39. honeycomb/_generated/api/datasets/create_dataset.py +227 -0
  40. honeycomb/_generated/api/datasets/delete_dataset.py +251 -0
  41. honeycomb/_generated/api/datasets/get_dataset.py +195 -0
  42. honeycomb/_generated/api/datasets/list_datasets.py +177 -0
  43. honeycomb/_generated/api/datasets/update_dataset.py +217 -0
  44. honeycomb/_generated/api/enhance/__init__.py +0 -0
  45. honeycomb/_generated/api/enhance/record_enhance_indexer_usage.py +231 -0
  46. honeycomb/_generated/api/environments/__init__.py +0 -0
  47. honeycomb/_generated/api/environments/create_environment.py +247 -0
  48. honeycomb/_generated/api/environments/delete_environment.py +245 -0
  49. honeycomb/_generated/api/environments/get_environment.py +213 -0
  50. honeycomb/_generated/api/environments/list_environments.py +245 -0
  51. honeycomb/_generated/api/environments/update_environment.py +254 -0
  52. honeycomb/_generated/api/events/__init__.py +0 -0
  53. honeycomb/_generated/api/events/create_event.py +269 -0
  54. honeycomb/_generated/api/events/create_events.py +314 -0
  55. honeycomb/_generated/api/key_management/__init__.py +0 -0
  56. honeycomb/_generated/api/key_management/create_api_key.py +286 -0
  57. honeycomb/_generated/api/key_management/delete_api_key.py +223 -0
  58. honeycomb/_generated/api/key_management/get_api_key.py +225 -0
  59. honeycomb/_generated/api/key_management/list_api_keys.py +281 -0
  60. honeycomb/_generated/api/key_management/update_api_key.py +270 -0
  61. honeycomb/_generated/api/kinesis_events/__init__.py +0 -0
  62. honeycomb/_generated/api/kinesis_events/create_kinesis_events.py +220 -0
  63. honeycomb/_generated/api/marker_settings/__init__.py +0 -0
  64. honeycomb/_generated/api/marker_settings/create_marker_setting.py +209 -0
  65. honeycomb/_generated/api/marker_settings/delete_marker_settings.py +194 -0
  66. honeycomb/_generated/api/marker_settings/list_marker_settings.py +186 -0
  67. honeycomb/_generated/api/marker_settings/update_marker_settings.py +230 -0
  68. honeycomb/_generated/api/markers/__init__.py +0 -0
  69. honeycomb/_generated/api/markers/create_marker.py +220 -0
  70. honeycomb/_generated/api/markers/create_marker_v2.py +253 -0
  71. honeycomb/_generated/api/markers/delete_marker.py +200 -0
  72. honeycomb/_generated/api/markers/get_marker.py +194 -0
  73. honeycomb/_generated/api/markers/update_marker.py +233 -0
  74. honeycomb/_generated/api/markers/update_marker_v2.py +262 -0
  75. honeycomb/_generated/api/pipelines/__init__.py +0 -0
  76. honeycomb/_generated/api/pipelines/get_pipeline_configuration.py +306 -0
  77. honeycomb/_generated/api/pipelines/record_pipeline_usage.py +244 -0
  78. honeycomb/_generated/api/pipelines/update_pipeline_configuration_rollout.py +261 -0
  79. honeycomb/_generated/api/queries/__init__.py +0 -0
  80. honeycomb/_generated/api/queries/create_query.py +224 -0
  81. honeycomb/_generated/api/queries/get_query.py +208 -0
  82. honeycomb/_generated/api/query_annotations/__init__.py +0 -0
  83. honeycomb/_generated/api/query_annotations/create_query_annotation.py +226 -0
  84. honeycomb/_generated/api/query_annotations/delete_query_annotation.py +198 -0
  85. honeycomb/_generated/api/query_annotations/get_query_annotation.py +202 -0
  86. honeycomb/_generated/api/query_annotations/list_query_annotations.py +217 -0
  87. honeycomb/_generated/api/query_annotations/update_query_annotation.py +237 -0
  88. honeycomb/_generated/api/query_data/__init__.py +0 -0
  89. honeycomb/_generated/api/query_data/create_query_result.py +247 -0
  90. honeycomb/_generated/api/query_data/get_query_result.py +208 -0
  91. honeycomb/_generated/api/recipients/__init__.py +0 -0
  92. honeycomb/_generated/api/recipients/create_recipient.py +317 -0
  93. honeycomb/_generated/api/recipients/delete_recipient.py +199 -0
  94. honeycomb/_generated/api/recipients/get_recipient.py +252 -0
  95. honeycomb/_generated/api/recipients/list_recipients.py +230 -0
  96. honeycomb/_generated/api/recipients/update_recipient.py +323 -0
  97. honeycomb/_generated/api/reporting/__init__.py +0 -0
  98. honeycomb/_generated/api/reporting/get_slo_history.py +218 -0
  99. honeycomb/_generated/api/service_maps/__init__.py +0 -0
  100. honeycomb/_generated/api/service_maps/create_map_dependency_request.py +252 -0
  101. honeycomb/_generated/api/service_maps/get_map_dependencies.py +265 -0
  102. honeycomb/_generated/api/sl_os/__init__.py +0 -0
  103. honeycomb/_generated/api/sl_os/create_slo.py +229 -0
  104. honeycomb/_generated/api/sl_os/delete_slo.py +210 -0
  105. honeycomb/_generated/api/sl_os/get_slo.py +256 -0
  106. honeycomb/_generated/api/sl_os/list_slos.py +210 -0
  107. honeycomb/_generated/api/sl_os/update_slo.py +242 -0
  108. honeycomb/_generated/api/triggers/__init__.py +0 -0
  109. honeycomb/_generated/api/triggers/create_trigger.py +250 -0
  110. honeycomb/_generated/api/triggers/delete_trigger.py +204 -0
  111. honeycomb/_generated/api/triggers/get_trigger.py +214 -0
  112. honeycomb/_generated/api/triggers/list_triggers.py +206 -0
  113. honeycomb/_generated/api/triggers/list_triggers_with_recipient.py +208 -0
  114. honeycomb/_generated/api/triggers/update_trigger.py +248 -0
  115. honeycomb/_generated/client.py +271 -0
  116. honeycomb/_generated/errors.py +14 -0
  117. honeycomb/_generated/models/__init__.py +561 -0
  118. honeycomb/_generated/models/api_key_create_request.py +78 -0
  119. honeycomb/_generated/models/api_key_create_request_data.py +130 -0
  120. honeycomb/_generated/models/api_key_create_request_data_relationships.py +78 -0
  121. honeycomb/_generated/models/api_key_create_request_data_type.py +7 -0
  122. honeycomb/_generated/models/api_key_list_response.py +112 -0
  123. honeycomb/_generated/models/api_key_object.py +189 -0
  124. honeycomb/_generated/models/api_key_object_links.py +74 -0
  125. honeycomb/_generated/models/api_key_object_relationships.py +150 -0
  126. honeycomb/_generated/models/api_key_object_type.py +7 -0
  127. honeycomb/_generated/models/api_key_response.py +78 -0
  128. honeycomb/_generated/models/api_key_update_request.py +104 -0
  129. honeycomb/_generated/models/auth.py +140 -0
  130. honeycomb/_generated/models/auth_api_key_access.py +154 -0
  131. honeycomb/_generated/models/auth_environment.py +82 -0
  132. honeycomb/_generated/models/auth_team.py +82 -0
  133. honeycomb/_generated/models/auth_type.py +8 -0
  134. honeycomb/_generated/models/auth_v2_response.py +108 -0
  135. honeycomb/_generated/models/auth_v2_response_data.py +122 -0
  136. honeycomb/_generated/models/auth_v2_response_data_attributes.py +141 -0
  137. honeycomb/_generated/models/auth_v2_response_data_attributes_key_type.py +7 -0
  138. honeycomb/_generated/models/auth_v2_response_data_attributes_timestamps.py +107 -0
  139. honeycomb/_generated/models/auth_v2_response_data_relationships.py +59 -0
  140. honeycomb/_generated/models/auth_v2_response_data_type.py +7 -0
  141. honeycomb/_generated/models/base_trigger.py +367 -0
  142. honeycomb/_generated/models/base_trigger_alert_type.py +8 -0
  143. honeycomb/_generated/models/base_trigger_baseline_details_type_0.py +92 -0
  144. honeycomb/_generated/models/base_trigger_baseline_details_type_0_offset_minutes.py +10 -0
  145. honeycomb/_generated/models/base_trigger_baseline_details_type_0_type.py +8 -0
  146. honeycomb/_generated/models/base_trigger_evaluation_schedule.py +83 -0
  147. honeycomb/_generated/models/base_trigger_evaluation_schedule_type.py +8 -0
  148. honeycomb/_generated/models/base_trigger_evaluation_schedule_window.py +103 -0
  149. honeycomb/_generated/models/base_trigger_evaluation_schedule_window_days_of_week_item.py +13 -0
  150. honeycomb/_generated/models/base_trigger_threshold.py +95 -0
  151. honeycomb/_generated/models/base_trigger_threshold_op.py +10 -0
  152. honeycomb/_generated/models/batch_event.py +110 -0
  153. honeycomb/_generated/models/board.py +276 -0
  154. honeycomb/_generated/models/board_layout_generation.py +8 -0
  155. honeycomb/_generated/models/board_links.py +74 -0
  156. honeycomb/_generated/models/board_panel_position.py +104 -0
  157. honeycomb/_generated/models/board_query_visualization_settings.py +141 -0
  158. honeycomb/_generated/models/board_query_visualization_settings_charts_item.py +113 -0
  159. honeycomb/_generated/models/board_query_visualization_settings_charts_item_chart_type.py +13 -0
  160. honeycomb/_generated/models/board_type.py +7 -0
  161. honeycomb/_generated/models/board_view_filter.py +93 -0
  162. honeycomb/_generated/models/board_view_filter_operation.py +22 -0
  163. honeycomb/_generated/models/board_view_response.py +111 -0
  164. honeycomb/_generated/models/budget_rate.py +189 -0
  165. honeycomb/_generated/models/budget_rate_alert_type.py +8 -0
  166. honeycomb/_generated/models/burn_alert_shared_params.py +136 -0
  167. honeycomb/_generated/models/calculated_field.py +117 -0
  168. honeycomb/_generated/models/configuration_key_attributes.py +140 -0
  169. honeycomb/_generated/models/configuration_key_attributes_key_type.py +7 -0
  170. honeycomb/_generated/models/configuration_key_attributes_timestamps.py +107 -0
  171. honeycomb/_generated/models/create_board_view_request.py +96 -0
  172. honeycomb/_generated/models/create_budget_rate_burn_alert_request.py +232 -0
  173. honeycomb/_generated/models/create_budget_rate_burn_alert_request_slo.py +74 -0
  174. honeycomb/_generated/models/create_column.py +149 -0
  175. honeycomb/_generated/models/create_column_type.py +11 -0
  176. honeycomb/_generated/models/create_enhance_indexer_usage_record_request.py +78 -0
  177. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data.py +90 -0
  178. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes.py +97 -0
  179. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data.py +88 -0
  180. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  181. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  182. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  183. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  184. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  185. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  186. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  187. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  188. honeycomb/_generated/models/create_enhance_indexer_usage_record_request_data_type.py +7 -0
  189. honeycomb/_generated/models/create_environment_request.py +78 -0
  190. honeycomb/_generated/models/create_environment_request_data.py +90 -0
  191. honeycomb/_generated/models/create_environment_request_data_attributes.py +102 -0
  192. honeycomb/_generated/models/create_environment_request_data_type.py +7 -0
  193. honeycomb/_generated/models/create_events_content_encoding.py +8 -0
  194. honeycomb/_generated/models/create_events_response_200_item.py +82 -0
  195. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request.py +217 -0
  196. honeycomb/_generated/models/create_exhaustion_time_burn_alert_request_slo.py +74 -0
  197. honeycomb/_generated/models/create_map_dependencies_request.py +128 -0
  198. honeycomb/_generated/models/create_map_dependencies_response.py +97 -0
  199. honeycomb/_generated/models/create_map_dependencies_response_status.py +9 -0
  200. honeycomb/_generated/models/create_pipeline_health_record_request.py +78 -0
  201. honeycomb/_generated/models/create_pipeline_health_record_request_data.py +98 -0
  202. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes.py +88 -0
  203. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data.py +88 -0
  204. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item.py +89 -0
  205. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item.py +89 -0
  206. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item.py +97 -0
  207. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum.py +102 -0
  208. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_aggregation_temporality.py +7 -0
  209. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item.py +105 -0
  210. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item.py +87 -0
  211. honeycomb/_generated/models/create_pipeline_health_record_request_data_attributes_usage_data_resource_metrics_item_scope_metrics_item_metrics_item_sum_datapoints_item_attributes_item_value.py +73 -0
  212. honeycomb/_generated/models/create_pipeline_health_record_request_data_type.py +7 -0
  213. honeycomb/_generated/models/create_query_result_request.py +118 -0
  214. honeycomb/_generated/models/dataset.py +183 -0
  215. honeycomb/_generated/models/dataset_creation_payload.py +93 -0
  216. honeycomb/_generated/models/dataset_definition_type_1.py +96 -0
  217. honeycomb/_generated/models/dataset_definition_type_1_column_type.py +8 -0
  218. honeycomb/_generated/models/dataset_definitions.py +599 -0
  219. honeycomb/_generated/models/dataset_relationship.py +79 -0
  220. honeycomb/_generated/models/dataset_relationship_data.py +82 -0
  221. honeycomb/_generated/models/dataset_relationship_data_type.py +7 -0
  222. honeycomb/_generated/models/dataset_settings.py +73 -0
  223. honeycomb/_generated/models/dataset_update_payload.py +105 -0
  224. honeycomb/_generated/models/dataset_update_payload_settings.py +73 -0
  225. honeycomb/_generated/models/detailed_error.py +115 -0
  226. honeycomb/_generated/models/email_recipient.py +160 -0
  227. honeycomb/_generated/models/email_recipient_details.py +71 -0
  228. honeycomb/_generated/models/email_recipient_type.py +7 -0
  229. honeycomb/_generated/models/environment.py +112 -0
  230. honeycomb/_generated/models/environment_attributes.py +140 -0
  231. honeycomb/_generated/models/environment_attributes_color_type_1.py +7 -0
  232. honeycomb/_generated/models/environment_attributes_settings.py +70 -0
  233. honeycomb/_generated/models/environment_color.py +16 -0
  234. honeycomb/_generated/models/environment_links.py +70 -0
  235. honeycomb/_generated/models/environment_list_response.py +112 -0
  236. honeycomb/_generated/models/environment_relationship.py +79 -0
  237. honeycomb/_generated/models/environment_relationship_data.py +82 -0
  238. honeycomb/_generated/models/environment_relationship_data_type.py +7 -0
  239. honeycomb/_generated/models/environment_response.py +78 -0
  240. honeycomb/_generated/models/environment_type.py +7 -0
  241. honeycomb/_generated/models/error.py +74 -0
  242. honeycomb/_generated/models/event.py +71 -0
  243. honeycomb/_generated/models/exhaustion_time.py +174 -0
  244. honeycomb/_generated/models/exhaustion_time_alert_type.py +8 -0
  245. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response.py +198 -0
  246. honeycomb/_generated/models/exhaustion_time_burn_alert_list_response_slo.py +77 -0
  247. honeycomb/_generated/models/filter_op.py +22 -0
  248. honeycomb/_generated/models/get_map_dependencies_response.py +169 -0
  249. honeycomb/_generated/models/get_map_dependencies_response_status.py +9 -0
  250. honeycomb/_generated/models/having_calculate_op.py +29 -0
  251. honeycomb/_generated/models/having_op.py +12 -0
  252. honeycomb/_generated/models/included_resource.py +106 -0
  253. honeycomb/_generated/models/included_resource_attributes.py +62 -0
  254. honeycomb/_generated/models/ingest_key_attributes.py +153 -0
  255. honeycomb/_generated/models/ingest_key_attributes_key_type.py +7 -0
  256. honeycomb/_generated/models/ingest_key_attributes_permissions.py +74 -0
  257. honeycomb/_generated/models/ingest_key_attributes_timestamps.py +107 -0
  258. honeycomb/_generated/models/ingest_key_type.py +90 -0
  259. honeycomb/_generated/models/ingest_key_type_key_type.py +7 -0
  260. honeycomb/_generated/models/jsonapi_error_source.py +92 -0
  261. honeycomb/_generated/models/kinesis_event.py +111 -0
  262. honeycomb/_generated/models/kinesis_event_record.py +73 -0
  263. honeycomb/_generated/models/kinesis_response.py +91 -0
  264. honeycomb/_generated/models/list_api_keys_filtertype.py +8 -0
  265. honeycomb/_generated/models/map_dependency.py +118 -0
  266. honeycomb/_generated/models/map_node.py +97 -0
  267. honeycomb/_generated/models/map_node_type.py +7 -0
  268. honeycomb/_generated/models/marker.py +151 -0
  269. honeycomb/_generated/models/marker_create_request.py +78 -0
  270. honeycomb/_generated/models/marker_create_request_data.py +104 -0
  271. honeycomb/_generated/models/marker_create_request_data_attributes.py +110 -0
  272. honeycomb/_generated/models/marker_create_request_data_relationships.py +92 -0
  273. honeycomb/_generated/models/marker_create_request_data_type.py +7 -0
  274. honeycomb/_generated/models/marker_object.py +136 -0
  275. honeycomb/_generated/models/marker_object_attributes.py +146 -0
  276. honeycomb/_generated/models/marker_object_attributes_timestamps.py +107 -0
  277. honeycomb/_generated/models/marker_object_links.py +74 -0
  278. honeycomb/_generated/models/marker_object_relationships.py +111 -0
  279. honeycomb/_generated/models/marker_object_relationships_dataset.py +104 -0
  280. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0.py +94 -0
  281. honeycomb/_generated/models/marker_object_relationships_dataset_data_type_0_type.py +7 -0
  282. honeycomb/_generated/models/marker_object_type.py +7 -0
  283. honeycomb/_generated/models/marker_response.py +78 -0
  284. honeycomb/_generated/models/marker_setting.py +125 -0
  285. honeycomb/_generated/models/marker_update_request.py +78 -0
  286. honeycomb/_generated/models/marker_update_request_data.py +104 -0
  287. honeycomb/_generated/models/marker_update_request_data_attributes.py +111 -0
  288. honeycomb/_generated/models/marker_update_request_data_relationships.py +92 -0
  289. honeycomb/_generated/models/marker_update_request_data_type.py +7 -0
  290. honeycomb/_generated/models/ms_teams_recipient.py +161 -0
  291. honeycomb/_generated/models/ms_teams_recipient_details.py +80 -0
  292. honeycomb/_generated/models/ms_teams_recipient_type.py +7 -0
  293. honeycomb/_generated/models/ms_teams_workflow_recipient.py +161 -0
  294. honeycomb/_generated/models/ms_teams_workflow_recipient_details.py +80 -0
  295. honeycomb/_generated/models/ms_teams_workflow_recipient_type.py +7 -0
  296. honeycomb/_generated/models/notification_recipient.py +131 -0
  297. honeycomb/_generated/models/notification_recipient_details.py +117 -0
  298. honeycomb/_generated/models/notification_recipient_details_pagerduty_severity.py +10 -0
  299. honeycomb/_generated/models/notification_recipient_details_variables_item.py +81 -0
  300. honeycomb/_generated/models/pager_duty_recipient.py +160 -0
  301. honeycomb/_generated/models/pager_duty_recipient_details.py +79 -0
  302. honeycomb/_generated/models/pager_duty_recipient_type.py +7 -0
  303. honeycomb/_generated/models/pagination_links.py +80 -0
  304. honeycomb/_generated/models/payload_template.py +73 -0
  305. honeycomb/_generated/models/pipeline_configuration_response.py +112 -0
  306. honeycomb/_generated/models/pipeline_configuration_response_attributes.py +101 -0
  307. honeycomb/_generated/models/pipeline_configuration_response_attributes_configs_item.py +85 -0
  308. honeycomb/_generated/models/pipeline_configuration_response_links.py +73 -0
  309. honeycomb/_generated/models/pipeline_configuration_response_type.py +7 -0
  310. honeycomb/_generated/models/pipeline_configuration_rollout.py +112 -0
  311. honeycomb/_generated/models/pipeline_configuration_rollout_attributes.py +75 -0
  312. honeycomb/_generated/models/pipeline_configuration_rollout_attributes_status.py +12 -0
  313. honeycomb/_generated/models/pipeline_configuration_rollout_links.py +73 -0
  314. honeycomb/_generated/models/pipeline_configuration_rollout_type.py +7 -0
  315. honeycomb/_generated/models/preset_filter.py +78 -0
  316. honeycomb/_generated/models/query.py +346 -0
  317. honeycomb/_generated/models/query_annotation.py +166 -0
  318. honeycomb/_generated/models/query_annotation_source.py +8 -0
  319. honeycomb/_generated/models/query_calculated_fields_item.py +80 -0
  320. honeycomb/_generated/models/query_calculations_item.py +98 -0
  321. honeycomb/_generated/models/query_compare_time_offset_seconds.py +14 -0
  322. honeycomb/_generated/models/query_filter_combination.py +8 -0
  323. honeycomb/_generated/models/query_filters_item.py +126 -0
  324. honeycomb/_generated/models/query_havings_item.py +128 -0
  325. honeycomb/_generated/models/query_op.py +30 -0
  326. honeycomb/_generated/models/query_orders_item.py +115 -0
  327. honeycomb/_generated/models/query_orders_item_order.py +8 -0
  328. honeycomb/_generated/models/query_panel.py +114 -0
  329. honeycomb/_generated/models/query_panel_query_panel.py +143 -0
  330. honeycomb/_generated/models/query_panel_query_panel_query_style.py +9 -0
  331. honeycomb/_generated/models/query_result.py +130 -0
  332. honeycomb/_generated/models/query_result_details.py +156 -0
  333. honeycomb/_generated/models/query_result_details_data.py +188 -0
  334. honeycomb/_generated/models/query_result_details_links.py +85 -0
  335. honeycomb/_generated/models/query_result_links.py +85 -0
  336. honeycomb/_generated/models/query_results_data.py +89 -0
  337. honeycomb/_generated/models/query_results_data_data.py +71 -0
  338. honeycomb/_generated/models/query_results_series.py +97 -0
  339. honeycomb/_generated/models/recipient_properties.py +137 -0
  340. honeycomb/_generated/models/recipient_type.py +12 -0
  341. honeycomb/_generated/models/slack_recipient.py +160 -0
  342. honeycomb/_generated/models/slack_recipient_details.py +71 -0
  343. honeycomb/_generated/models/slack_recipient_type.py +7 -0
  344. honeycomb/_generated/models/slo.py +245 -0
  345. honeycomb/_generated/models/slo_create.py +245 -0
  346. honeycomb/_generated/models/slo_create_sli.py +75 -0
  347. honeycomb/_generated/models/slo_detailed_response.py +312 -0
  348. honeycomb/_generated/models/slo_detailed_response_status.py +10 -0
  349. honeycomb/_generated/models/slo_history.py +94 -0
  350. honeycomb/_generated/models/slo_history_request.py +93 -0
  351. honeycomb/_generated/models/slo_history_response.py +91 -0
  352. honeycomb/_generated/models/slo_panel.py +114 -0
  353. honeycomb/_generated/models/slo_panel_slo_panel.py +75 -0
  354. honeycomb/_generated/models/slo_sli.py +74 -0
  355. honeycomb/_generated/models/tag.py +79 -0
  356. honeycomb/_generated/models/team_relationship.py +78 -0
  357. honeycomb/_generated/models/team_relationship_team.py +78 -0
  358. honeycomb/_generated/models/team_relationship_team_data.py +82 -0
  359. honeycomb/_generated/models/team_relationship_team_data_type.py +7 -0
  360. honeycomb/_generated/models/template_variable_definition.py +81 -0
  361. honeycomb/_generated/models/text_panel.py +114 -0
  362. honeycomb/_generated/models/text_panel_text_panel.py +71 -0
  363. honeycomb/_generated/models/trigger_response.py +399 -0
  364. honeycomb/_generated/models/trigger_with_inline_query.py +390 -0
  365. honeycomb/_generated/models/trigger_with_inline_query_query.py +60 -0
  366. honeycomb/_generated/models/trigger_with_query_reference.py +376 -0
  367. honeycomb/_generated/models/update_board_view_request.py +107 -0
  368. honeycomb/_generated/models/update_environment_request.py +78 -0
  369. honeycomb/_generated/models/update_environment_request_data.py +98 -0
  370. honeycomb/_generated/models/update_environment_request_data_attributes.py +118 -0
  371. honeycomb/_generated/models/update_environment_request_data_attributes_settings.py +73 -0
  372. honeycomb/_generated/models/update_environment_request_data_type.py +7 -0
  373. honeycomb/_generated/models/update_exhaustion_time_burn_alert_request.py +202 -0
  374. honeycomb/_generated/models/update_pipeline_configuration_rollout.py +98 -0
  375. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes.py +75 -0
  376. honeycomb/_generated/models/update_pipeline_configuration_rollout_attributes_status.py +12 -0
  377. honeycomb/_generated/models/update_pipeline_configuration_rollout_request.py +78 -0
  378. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data.py +98 -0
  379. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes.py +75 -0
  380. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_attributes_status.py +12 -0
  381. honeycomb/_generated/models/update_pipeline_configuration_rollout_request_data_type.py +7 -0
  382. honeycomb/_generated/models/update_pipeline_configuration_rollout_response.py +78 -0
  383. honeycomb/_generated/models/update_pipeline_configuration_rollout_type.py +7 -0
  384. honeycomb/_generated/models/user_relationship.py +78 -0
  385. honeycomb/_generated/models/user_relationship_data.py +82 -0
  386. honeycomb/_generated/models/user_relationship_data_type.py +7 -0
  387. honeycomb/_generated/models/validation_error.py +145 -0
  388. honeycomb/_generated/models/validation_error_type_detail_item.py +103 -0
  389. honeycomb/_generated/models/validation_error_type_detail_item_code.py +10 -0
  390. honeycomb/_generated/models/webhook_header.py +81 -0
  391. honeycomb/_generated/models/webhook_recipient.py +160 -0
  392. honeycomb/_generated/models/webhook_recipient_details.py +142 -0
  393. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads.py +117 -0
  394. honeycomb/_generated/models/webhook_recipient_details_webhook_payloads_payload_templates.py +126 -0
  395. honeycomb/_generated/models/webhook_recipient_type.py +7 -0
  396. honeycomb/_generated/py.typed +1 -0
  397. honeycomb/_generated/types.py +46 -0
  398. honeycomb/auth.py +152 -0
  399. honeycomb/client.py +736 -0
  400. honeycomb/exceptions.py +236 -0
  401. honeycomb/models/__init__.py +157 -0
  402. honeycomb/models/api_keys.py +81 -0
  403. honeycomb/models/board_builder.py +387 -0
  404. honeycomb/models/boards.py +86 -0
  405. honeycomb/models/burn_alerts.py +124 -0
  406. honeycomb/models/columns.py +59 -0
  407. honeycomb/models/datasets.py +51 -0
  408. honeycomb/models/derived_columns.py +107 -0
  409. honeycomb/models/environments.py +106 -0
  410. honeycomb/models/events.py +35 -0
  411. honeycomb/models/marker_builder.py +136 -0
  412. honeycomb/models/markers.py +73 -0
  413. honeycomb/models/queries.py +210 -0
  414. honeycomb/models/query_annotations.py +63 -0
  415. honeycomb/models/query_builder.py +840 -0
  416. honeycomb/models/recipient_builder.py +248 -0
  417. honeycomb/models/recipients.py +43 -0
  418. honeycomb/models/service_map_dependencies.py +126 -0
  419. honeycomb/models/slo_builder.py +463 -0
  420. honeycomb/models/slos.py +66 -0
  421. honeycomb/models/tags_mixin.py +79 -0
  422. honeycomb/models/trigger_builder.py +561 -0
  423. honeycomb/models/triggers.py +208 -0
  424. honeycomb/resources/__init__.py +35 -0
  425. honeycomb/resources/_recipient_utils.py +156 -0
  426. honeycomb/resources/api_keys.py +303 -0
  427. honeycomb/resources/base.py +142 -0
  428. honeycomb/resources/boards.py +350 -0
  429. honeycomb/resources/burn_alerts.py +205 -0
  430. honeycomb/resources/columns.py +185 -0
  431. honeycomb/resources/datasets.py +163 -0
  432. honeycomb/resources/derived_columns.py +233 -0
  433. honeycomb/resources/environments.py +295 -0
  434. honeycomb/resources/events.py +156 -0
  435. honeycomb/resources/markers.py +334 -0
  436. honeycomb/resources/queries.py +256 -0
  437. honeycomb/resources/query_annotations.py +207 -0
  438. honeycomb/resources/query_results.py +886 -0
  439. honeycomb/resources/recipients.py +202 -0
  440. honeycomb/resources/service_map_dependencies.py +389 -0
  441. honeycomb/resources/slos.py +353 -0
  442. honeycomb/resources/triggers.py +284 -0
  443. honeycomb/tools/__init__.py +85 -0
  444. honeycomb/tools/__main__.py +204 -0
  445. honeycomb/tools/builders.py +512 -0
  446. honeycomb/tools/descriptions.py +523 -0
  447. honeycomb/tools/executor.py +860 -0
  448. honeycomb/tools/generator.py +2386 -0
  449. honeycomb/tools/schemas.py +184 -0
  450. honeycomb_api-0.1.0.dist-info/METADATA +451 -0
  451. honeycomb_api-0.1.0.dist-info/RECORD +453 -0
  452. honeycomb_api-0.1.0.dist-info/WHEEL +4 -0
  453. honeycomb_api-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,202 @@
1
+ """Recipients resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import TYPE_CHECKING, Any, List # noqa: UP035
6
+
7
+ from ..models.recipients import Recipient, RecipientCreate
8
+ from .base import BaseResource
9
+
10
+ if TYPE_CHECKING:
11
+ from ..client import HoneycombClient
12
+
13
+
14
+ class RecipientsResource(BaseResource):
15
+ """Resource for managing notification recipients.
16
+
17
+ Recipients define where to send notifications when triggers fire.
18
+ Supported types include email, Slack, PagerDuty, webhooks, and MS Teams.
19
+
20
+ Example (async):
21
+ >>> async with HoneycombClient(api_key="...") as client:
22
+ ... recipients = await client.recipients.list()
23
+ ... recipient = await client.recipients.create(
24
+ ... recipient=RecipientCreate(
25
+ ... type=RecipientType.EMAIL,
26
+ ... details={"email_address": "alerts@example.com"}
27
+ ... )
28
+ ... )
29
+
30
+ Example (sync):
31
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
32
+ ... recipients = client.recipients.list()
33
+ """
34
+
35
+ def __init__(self, client: HoneycombClient) -> None:
36
+ super().__init__(client)
37
+
38
+ def _build_path(self, recipient_id: str | None = None) -> str:
39
+ """Build API path for recipients."""
40
+ base = "/1/recipients"
41
+ if recipient_id:
42
+ return f"{base}/{recipient_id}"
43
+ return base
44
+
45
+ # -------------------------------------------------------------------------
46
+ # Async methods
47
+ # -------------------------------------------------------------------------
48
+
49
+ async def list_async(self) -> list[Recipient]:
50
+ """List all recipients (async).
51
+
52
+ Returns:
53
+ List of Recipient objects.
54
+ """
55
+ data = await self._get_async(self._build_path())
56
+ return self._parse_model_list(Recipient, data)
57
+
58
+ async def get_async(self, recipient_id: str) -> Recipient:
59
+ """Get a specific recipient (async).
60
+
61
+ Args:
62
+ recipient_id: Recipient ID.
63
+
64
+ Returns:
65
+ Recipient object.
66
+ """
67
+ data = await self._get_async(self._build_path(recipient_id))
68
+ return self._parse_model(Recipient, data)
69
+
70
+ async def create_async(self, recipient: RecipientCreate) -> Recipient:
71
+ """Create a new recipient (async).
72
+
73
+ Args:
74
+ recipient: Recipient configuration.
75
+
76
+ Returns:
77
+ Created Recipient object.
78
+ """
79
+ data = await self._post_async(self._build_path(), json=recipient.model_dump_for_api())
80
+ return self._parse_model(Recipient, data)
81
+
82
+ async def update_async(self, recipient_id: str, recipient: RecipientCreate) -> Recipient:
83
+ """Update an existing recipient (async).
84
+
85
+ Args:
86
+ recipient_id: Recipient ID.
87
+ recipient: Updated recipient configuration.
88
+
89
+ Returns:
90
+ Updated Recipient object.
91
+ """
92
+ data = await self._put_async(
93
+ self._build_path(recipient_id), json=recipient.model_dump_for_api()
94
+ )
95
+ return self._parse_model(Recipient, data)
96
+
97
+ async def delete_async(self, recipient_id: str) -> None:
98
+ """Delete a recipient (async).
99
+
100
+ Args:
101
+ recipient_id: Recipient ID.
102
+ """
103
+ await self._delete_async(self._build_path(recipient_id))
104
+
105
+ async def get_triggers_async(self, recipient_id: str) -> List[dict[str, Any]]: # noqa: UP006
106
+ """Get all triggers associated with a recipient (async).
107
+
108
+ Args:
109
+ recipient_id: Recipient ID.
110
+
111
+ Returns:
112
+ List of trigger objects.
113
+ """
114
+ path = f"{self._build_path(recipient_id)}/triggers"
115
+ data = await self._get_async(path)
116
+ # Return raw dict list as we don't want circular dependency on Trigger model
117
+ return data if isinstance(data, list) else []
118
+
119
+ # -------------------------------------------------------------------------
120
+ # Sync methods
121
+ # -------------------------------------------------------------------------
122
+
123
+ def list(self) -> list[Recipient]:
124
+ """List all recipients.
125
+
126
+ Returns:
127
+ List of Recipient objects.
128
+ """
129
+ if not self._client.is_sync:
130
+ raise RuntimeError("Use list_async() for async mode, or pass sync=True to client")
131
+ data = self._get_sync(self._build_path())
132
+ return self._parse_model_list(Recipient, data)
133
+
134
+ def get(self, recipient_id: str) -> Recipient:
135
+ """Get a specific recipient.
136
+
137
+ Args:
138
+ recipient_id: Recipient ID.
139
+
140
+ Returns:
141
+ Recipient object.
142
+ """
143
+ if not self._client.is_sync:
144
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
145
+ data = self._get_sync(self._build_path(recipient_id))
146
+ return self._parse_model(Recipient, data)
147
+
148
+ def create(self, recipient: RecipientCreate) -> Recipient:
149
+ """Create a new recipient.
150
+
151
+ Args:
152
+ recipient: Recipient configuration.
153
+
154
+ Returns:
155
+ Created Recipient object.
156
+ """
157
+ if not self._client.is_sync:
158
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
159
+ data = self._post_sync(self._build_path(), json=recipient.model_dump_for_api())
160
+ return self._parse_model(Recipient, data)
161
+
162
+ def update(self, recipient_id: str, recipient: RecipientCreate) -> Recipient:
163
+ """Update an existing recipient.
164
+
165
+ Args:
166
+ recipient_id: Recipient ID.
167
+ recipient: Updated recipient configuration.
168
+
169
+ Returns:
170
+ Updated Recipient object.
171
+ """
172
+ if not self._client.is_sync:
173
+ raise RuntimeError("Use update_async() for async mode, or pass sync=True to client")
174
+ data = self._put_sync(self._build_path(recipient_id), json=recipient.model_dump_for_api())
175
+ return self._parse_model(Recipient, data)
176
+
177
+ def delete(self, recipient_id: str) -> None:
178
+ """Delete a recipient.
179
+
180
+ Args:
181
+ recipient_id: Recipient ID.
182
+ """
183
+ if not self._client.is_sync:
184
+ raise RuntimeError("Use delete_async() for async mode, or pass sync=True to client")
185
+ self._delete_sync(self._build_path(recipient_id))
186
+
187
+ def get_triggers(self, recipient_id: str) -> List[dict[str, Any]]: # noqa: UP006
188
+ """Get all triggers associated with a recipient.
189
+
190
+ Args:
191
+ recipient_id: Recipient ID.
192
+
193
+ Returns:
194
+ List of trigger objects.
195
+ """
196
+ if not self._client.is_sync:
197
+ raise RuntimeError(
198
+ "Use get_triggers_async() for async mode, or pass sync=True to client"
199
+ )
200
+ path = f"{self._build_path(recipient_id)}/triggers"
201
+ data = self._get_sync(path)
202
+ return data if isinstance(data, list) else []
@@ -0,0 +1,389 @@
1
+ """Service Map Dependencies resource for Honeycomb API."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import time
7
+ from typing import TYPE_CHECKING, Any
8
+ from urllib.parse import parse_qs, urlparse
9
+
10
+ from ..models.service_map_dependencies import (
11
+ ServiceMapDependency,
12
+ ServiceMapDependencyRequest,
13
+ ServiceMapDependencyRequestCreate,
14
+ ServiceMapDependencyRequestStatus,
15
+ ServiceMapDependencyResult,
16
+ )
17
+ from .base import BaseResource
18
+
19
+ if TYPE_CHECKING:
20
+ from ..client import HoneycombClient
21
+
22
+ # Default page size for pagination (API max is 100)
23
+ DEFAULT_PAGE_SIZE = 100
24
+
25
+ # Default max pages to prevent runaway pagination (64000 items / 100 per page = 640)
26
+ DEFAULT_MAX_PAGES = 640
27
+
28
+
29
+ class ServiceMapDependenciesResource(BaseResource):
30
+ """Resource for querying service map dependencies.
31
+
32
+ Service Map Dependencies allow you to query the relationships between services
33
+ in your distributed system based on trace data.
34
+
35
+ Warning:
36
+ Large time ranges or unfiltered queries can return up to 64,000 dependencies.
37
+ With a page size of 100, this may result in up to 640 API requests.
38
+ The default rate limit is 100 requests per minute per operation.
39
+ If you need higher limits, contact Honeycomb support: https://www.honeycomb.io/support
40
+
41
+ Example (async):
42
+ >>> async with HoneycombClient(api_key="...") as client:
43
+ ... # Get dependencies for the last 2 hours
44
+ ... deps = await client.service_map_dependencies.get_async(
45
+ ... request=ServiceMapDependencyRequestCreate(time_range=7200)
46
+ ... )
47
+ ...
48
+ ... # Filter to specific services
49
+ ... deps = await client.service_map_dependencies.get_async(
50
+ ... request=ServiceMapDependencyRequestCreate(
51
+ ... time_range=3600,
52
+ ... filters=[ServiceMapNode(name="user-service")]
53
+ ... )
54
+ ... )
55
+
56
+ Example (sync):
57
+ >>> with HoneycombClient(api_key="...", sync=True) as client:
58
+ ... deps = client.service_map_dependencies.get(
59
+ ... request=ServiceMapDependencyRequestCreate(time_range=7200)
60
+ ... )
61
+ """
62
+
63
+ def __init__(self, client: HoneycombClient) -> None:
64
+ super().__init__(client)
65
+
66
+ def _extract_cursor(self, next_link: str | None) -> str | None:
67
+ """Extract cursor value from pagination next link."""
68
+ if not next_link:
69
+ return None
70
+ parsed = urlparse(next_link)
71
+ query_params = parse_qs(parsed.query)
72
+ cursor_values = query_params.get("page[after]", [])
73
+ return cursor_values[0] if cursor_values else None
74
+
75
+ def _build_params(
76
+ self,
77
+ cursor: str | None = None,
78
+ page_size: int = DEFAULT_PAGE_SIZE,
79
+ ) -> dict[str, Any]:
80
+ """Build query parameters for get requests."""
81
+ params: dict[str, Any] = {"page[size]": page_size}
82
+ if cursor:
83
+ params["page[after]"] = cursor
84
+ return params
85
+
86
+ # -------------------------------------------------------------------------
87
+ # Async methods
88
+ # -------------------------------------------------------------------------
89
+
90
+ async def create_async(
91
+ self,
92
+ request: ServiceMapDependencyRequestCreate,
93
+ limit: int = 10000,
94
+ ) -> ServiceMapDependencyRequest:
95
+ """Create a Service Map Dependencies request (async).
96
+
97
+ This initiates an asynchronous query for service dependencies.
98
+ Use get_async() with the returned request_id to retrieve results.
99
+
100
+ Args:
101
+ request: The dependency query parameters.
102
+ limit: Maximum number of dependencies to return (default: 10000, max: 64000).
103
+
104
+ Returns:
105
+ ServiceMapDependencyRequest with request_id and status.
106
+ """
107
+ params = {"limit": min(limit, 64000)}
108
+ data = await self._post_async(
109
+ "/1/maps/dependencies/requests",
110
+ json=request.model_dump_for_api(),
111
+ params=params,
112
+ )
113
+ return ServiceMapDependencyRequest.model_validate(data)
114
+
115
+ async def get_result_async(
116
+ self,
117
+ request_id: str,
118
+ max_pages: int = DEFAULT_MAX_PAGES,
119
+ ) -> ServiceMapDependencyResult:
120
+ """Get results for a Service Map Dependencies request (async).
121
+
122
+ Automatically paginates through all results. For queries returning
123
+ many dependencies, this may result in multiple API requests.
124
+
125
+ Args:
126
+ request_id: The request ID from create_async().
127
+ max_pages: Maximum number of pages to fetch (default: 640).
128
+ Set to limit API requests for very large result sets.
129
+
130
+ Returns:
131
+ ServiceMapDependencyResult with all dependencies.
132
+
133
+ Note:
134
+ Large queries can return up to 64,000 dependencies (640 pages).
135
+ The default rate limit is 100 requests per minute per operation.
136
+ Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
137
+ """
138
+ all_dependencies: list[ServiceMapDependency] = []
139
+ cursor: str | None = None
140
+ result_status: ServiceMapDependencyRequestStatus = ServiceMapDependencyRequestStatus.PENDING
141
+ result_request_id: str = request_id
142
+ pages_fetched = 0
143
+
144
+ while pages_fetched < max_pages:
145
+ params = self._build_params(cursor=cursor)
146
+ data = await self._get_async(
147
+ f"/1/maps/dependencies/requests/{request_id}",
148
+ params=params,
149
+ )
150
+
151
+ result_status = ServiceMapDependencyRequestStatus(data.get("status", "pending"))
152
+ result_request_id = data.get("request_id", request_id)
153
+
154
+ # If not ready yet, return current state
155
+ if result_status != ServiceMapDependencyRequestStatus.READY:
156
+ return ServiceMapDependencyResult(
157
+ request_id=result_request_id,
158
+ status=result_status,
159
+ dependencies=None,
160
+ )
161
+
162
+ # Parse dependencies from this page
163
+ deps = data.get("dependencies") or []
164
+ all_dependencies.extend(ServiceMapDependency.model_validate(d) for d in deps)
165
+ pages_fetched += 1
166
+
167
+ # Check for next page
168
+ next_link = data.get("links", {}).get("next")
169
+ cursor = self._extract_cursor(next_link)
170
+ if not cursor:
171
+ break
172
+
173
+ return ServiceMapDependencyResult(
174
+ request_id=result_request_id,
175
+ status=result_status,
176
+ dependencies=all_dependencies,
177
+ )
178
+
179
+ async def get_async(
180
+ self,
181
+ request: ServiceMapDependencyRequestCreate,
182
+ limit: int = 10000,
183
+ max_pages: int = DEFAULT_MAX_PAGES,
184
+ poll_interval: float = 1.0,
185
+ timeout: float = 60.0,
186
+ ) -> ServiceMapDependencyResult:
187
+ """Create and retrieve Service Map Dependencies in one call (async).
188
+
189
+ This is a convenience method that creates a request, polls until
190
+ ready, and returns all dependencies with automatic pagination.
191
+
192
+ Args:
193
+ request: The dependency query parameters.
194
+ limit: Maximum dependencies to return (default: 10000, max: 64000).
195
+ max_pages: Maximum pages to fetch (default: 640).
196
+ poll_interval: Seconds between status checks (default: 1.0).
197
+ timeout: Maximum seconds to wait for results (default: 60.0).
198
+
199
+ Returns:
200
+ ServiceMapDependencyResult with all dependencies.
201
+
202
+ Raises:
203
+ TimeoutError: If results are not ready within timeout.
204
+
205
+ Note:
206
+ Large queries can return up to 64,000 dependencies (640 pages).
207
+ The default rate limit is 100 requests per minute per operation.
208
+ Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
209
+ """
210
+ # Create the request
211
+ req = await self.create_async(request, limit=limit)
212
+
213
+ # Poll until ready
214
+ start_time = asyncio.get_event_loop().time()
215
+ while True:
216
+ result = await self.get_result_async(req.request_id, max_pages=max_pages)
217
+
218
+ if result.status == ServiceMapDependencyRequestStatus.READY:
219
+ return result
220
+
221
+ if result.status == ServiceMapDependencyRequestStatus.ERROR:
222
+ return result
223
+
224
+ # Check timeout
225
+ elapsed = asyncio.get_event_loop().time() - start_time
226
+ if elapsed >= timeout:
227
+ raise TimeoutError(
228
+ f"Service map dependencies request {req.request_id} did not complete "
229
+ f"within {timeout} seconds"
230
+ )
231
+
232
+ await asyncio.sleep(poll_interval)
233
+
234
+ # -------------------------------------------------------------------------
235
+ # Sync methods
236
+ # -------------------------------------------------------------------------
237
+
238
+ def create(
239
+ self,
240
+ request: ServiceMapDependencyRequestCreate,
241
+ limit: int = 10000,
242
+ ) -> ServiceMapDependencyRequest:
243
+ """Create a Service Map Dependencies request.
244
+
245
+ This initiates an asynchronous query for service dependencies.
246
+ Use get_result() with the returned request_id to retrieve results.
247
+
248
+ Args:
249
+ request: The dependency query parameters.
250
+ limit: Maximum number of dependencies to return (default: 10000, max: 64000).
251
+
252
+ Returns:
253
+ ServiceMapDependencyRequest with request_id and status.
254
+ """
255
+ if not self._client.is_sync:
256
+ raise RuntimeError("Use create_async() for async mode, or pass sync=True to client")
257
+
258
+ params = {"limit": min(limit, 64000)}
259
+ data = self._post_sync(
260
+ "/1/maps/dependencies/requests",
261
+ json=request.model_dump_for_api(),
262
+ params=params,
263
+ )
264
+ return ServiceMapDependencyRequest.model_validate(data)
265
+
266
+ def get_result(
267
+ self,
268
+ request_id: str,
269
+ max_pages: int = DEFAULT_MAX_PAGES,
270
+ ) -> ServiceMapDependencyResult:
271
+ """Get results for a Service Map Dependencies request.
272
+
273
+ Automatically paginates through all results. For queries returning
274
+ many dependencies, this may result in multiple API requests.
275
+
276
+ Args:
277
+ request_id: The request ID from create().
278
+ max_pages: Maximum number of pages to fetch (default: 640).
279
+ Set to limit API requests for very large result sets.
280
+
281
+ Returns:
282
+ ServiceMapDependencyResult with all dependencies.
283
+
284
+ Note:
285
+ Large queries can return up to 64,000 dependencies (640 pages).
286
+ The default rate limit is 100 requests per minute per operation.
287
+ Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
288
+ """
289
+ if not self._client.is_sync:
290
+ raise RuntimeError("Use get_result_async() for async mode, or pass sync=True to client")
291
+
292
+ all_dependencies: list[ServiceMapDependency] = []
293
+ cursor: str | None = None
294
+ result_status: ServiceMapDependencyRequestStatus = ServiceMapDependencyRequestStatus.PENDING
295
+ result_request_id: str = request_id
296
+ pages_fetched = 0
297
+
298
+ while pages_fetched < max_pages:
299
+ params = self._build_params(cursor=cursor)
300
+ data = self._get_sync(
301
+ f"/1/maps/dependencies/requests/{request_id}",
302
+ params=params,
303
+ )
304
+
305
+ result_status = ServiceMapDependencyRequestStatus(data.get("status", "pending"))
306
+ result_request_id = data.get("request_id", request_id)
307
+
308
+ # If not ready yet, return current state
309
+ if result_status != ServiceMapDependencyRequestStatus.READY:
310
+ return ServiceMapDependencyResult(
311
+ request_id=result_request_id,
312
+ status=result_status,
313
+ dependencies=None,
314
+ )
315
+
316
+ # Parse dependencies from this page
317
+ deps = data.get("dependencies") or []
318
+ all_dependencies.extend(ServiceMapDependency.model_validate(d) for d in deps)
319
+ pages_fetched += 1
320
+
321
+ # Check for next page
322
+ next_link = data.get("links", {}).get("next")
323
+ cursor = self._extract_cursor(next_link)
324
+ if not cursor:
325
+ break
326
+
327
+ return ServiceMapDependencyResult(
328
+ request_id=result_request_id,
329
+ status=result_status,
330
+ dependencies=all_dependencies,
331
+ )
332
+
333
+ def get(
334
+ self,
335
+ request: ServiceMapDependencyRequestCreate,
336
+ limit: int = 10000,
337
+ max_pages: int = DEFAULT_MAX_PAGES,
338
+ poll_interval: float = 1.0,
339
+ timeout: float = 60.0,
340
+ ) -> ServiceMapDependencyResult:
341
+ """Create and retrieve Service Map Dependencies in one call.
342
+
343
+ This is a convenience method that creates a request, polls until
344
+ ready, and returns all dependencies with automatic pagination.
345
+
346
+ Args:
347
+ request: The dependency query parameters.
348
+ limit: Maximum dependencies to return (default: 10000, max: 64000).
349
+ max_pages: Maximum pages to fetch (default: 640).
350
+ poll_interval: Seconds between status checks (default: 1.0).
351
+ timeout: Maximum seconds to wait for results (default: 60.0).
352
+
353
+ Returns:
354
+ ServiceMapDependencyResult with all dependencies.
355
+
356
+ Raises:
357
+ TimeoutError: If results are not ready within timeout.
358
+
359
+ Note:
360
+ Large queries can return up to 64,000 dependencies (640 pages).
361
+ The default rate limit is 100 requests per minute per operation.
362
+ Contact Honeycomb support for higher limits: https://www.honeycomb.io/support
363
+ """
364
+ if not self._client.is_sync:
365
+ raise RuntimeError("Use get_async() for async mode, or pass sync=True to client")
366
+
367
+ # Create the request
368
+ req = self.create(request, limit=limit)
369
+
370
+ # Poll until ready
371
+ start_time = time.time()
372
+ while True:
373
+ result = self.get_result(req.request_id, max_pages=max_pages)
374
+
375
+ if result.status == ServiceMapDependencyRequestStatus.READY:
376
+ return result
377
+
378
+ if result.status == ServiceMapDependencyRequestStatus.ERROR:
379
+ return result
380
+
381
+ # Check timeout
382
+ elapsed = time.time() - start_time
383
+ if elapsed >= timeout:
384
+ raise TimeoutError(
385
+ f"Service map dependencies request {req.request_id} did not complete "
386
+ f"within {timeout} seconds"
387
+ )
388
+
389
+ time.sleep(poll_interval)