moolabs 0.3.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 (1417) hide show
  1. moolabs/__init__.py +1487 -0
  2. moolabs/_dx_attribution_context.py +213 -0
  3. moolabs/_dx_attribution_db_time.py +2126 -0
  4. moolabs/_dx_attribution_db_time_transport.py +173 -0
  5. moolabs/_dx_attribution_delta.py +142 -0
  6. moolabs/_dx_attribution_deposits.py +552 -0
  7. moolabs/_dx_attribution_instrument.py +416 -0
  8. moolabs/_dx_attribution_middleware.py +541 -0
  9. moolabs/_dx_attribution_propagate.py +509 -0
  10. moolabs/_dx_attribution_signal_transport.py +232 -0
  11. moolabs/_dx_attribution_signals.py +927 -0
  12. moolabs/_dx_buffer.py +429 -0
  13. moolabs/_dx_client.py +726 -0
  14. moolabs/_dx_exceptions.py +84 -0
  15. moolabs/_dx_namespaces.py +1780 -0
  16. moolabs/_dx_pagination.py +131 -0
  17. moolabs/_dx_routing.py +276 -0
  18. moolabs/_dx_urls.py +629 -0
  19. moolabs/_dx_webhooks.py +82 -0
  20. moolabs/api/__init__.py +121 -0
  21. moolabs/api/account_team_api.py +1444 -0
  22. moolabs/api/accounts_api.py +4950 -0
  23. moolabs/api/acute_analytics_api.py +5750 -0
  24. moolabs/api/acute_integrations_api.py +3449 -0
  25. moolabs/api/admin_api.py +3347 -0
  26. moolabs/api/alerts_api.py +1626 -0
  27. moolabs/api/allocation_rules_api.py +1720 -0
  28. moolabs/api/analytics_api.py +3204 -0
  29. moolabs/api/app_custom_invoicing_api.py +952 -0
  30. moolabs/api/app_stripe_api.py +958 -0
  31. moolabs/api/apps_api.py +3064 -0
  32. moolabs/api/arc_admin_api.py +8773 -0
  33. moolabs/api/arc_communications_api.py +1991 -0
  34. moolabs/api/arc_portal_api.py +1737 -0
  35. moolabs/api/arc_webhooks_api.py +2087 -0
  36. moolabs/api/attribution_allocation_api.py +2345 -0
  37. moolabs/api/attribution_api.py +1717 -0
  38. moolabs/api/attribution_customer_keys_api.py +600 -0
  39. moolabs/api/attribution_db_time_api.py +918 -0
  40. moolabs/api/attribution_opencost_api.py +1372 -0
  41. moolabs/api/attribution_readouts_api.py +393 -0
  42. moolabs/api/attribution_signals_api.py +315 -0
  43. moolabs/api/auto_topup_api.py +3095 -0
  44. moolabs/api/batch_api.py +6714 -0
  45. moolabs/api/billing_api.py +300 -0
  46. moolabs/api/bom_api.py +2769 -0
  47. moolabs/api/budgets_api.py +2112 -0
  48. moolabs/api/buyer_quotes_api.py +2007 -0
  49. moolabs/api/cases_api.py +5075 -0
  50. moolabs/api/cash_credits_api.py +1548 -0
  51. moolabs/api/chat_api.py +3101 -0
  52. moolabs/api/clause_packs_api.py +2785 -0
  53. moolabs/api/cloud_billing_api.py +1747 -0
  54. moolabs/api/contract_editor_api.py +3384 -0
  55. moolabs/api/cost_events_api.py +1732 -0
  56. moolabs/api/credit_memos_api.py +3478 -0
  57. moolabs/api/customers_api.py +3931 -0
  58. moolabs/api/dashboard_api.py +771 -0
  59. moolabs/api/debug_api.py +300 -0
  60. moolabs/api/default_api.py +526 -0
  61. moolabs/api/disputes_api.py +3586 -0
  62. moolabs/api/dunning_templates_api.py +8737 -0
  63. moolabs/api/email_provider_api.py +526 -0
  64. moolabs/api/entitlements_api.py +9846 -0
  65. moolabs/api/escalations_api.py +2541 -0
  66. moolabs/api/events_api.py +1125 -0
  67. moolabs/api/fx_rates_api.py +1452 -0
  68. moolabs/api/governance_api.py +4402 -0
  69. moolabs/api/grants_api.py +1370 -0
  70. moolabs/api/handoffs_api.py +2138 -0
  71. moolabs/api/health_api.py +281 -0
  72. moolabs/api/homepage_api.py +305 -0
  73. moolabs/api/integrations_api.py +3374 -0
  74. moolabs/api/internal_api.py +7145 -0
  75. moolabs/api/internal_credit_memos_api.py +914 -0
  76. moolabs/api/internal_grants_api.py +1000 -0
  77. moolabs/api/internal_period_settlements_api.py +657 -0
  78. moolabs/api/internal_plan_pricing_api.py +326 -0
  79. moolabs/api/internal_subscriptions_api.py +326 -0
  80. moolabs/api/ledger_api.py +1483 -0
  81. moolabs/api/lookup_information_api.py +587 -0
  82. moolabs/api/mapping_rules_api.py +1782 -0
  83. moolabs/api/mappings_api.py +632 -0
  84. moolabs/api/margin_simulation_api.py +595 -0
  85. moolabs/api/margins_api.py +2301 -0
  86. moolabs/api/meter_billing_api.py +7419 -0
  87. moolabs/api/meter_portal_api.py +1368 -0
  88. moolabs/api/meter_subscriptions_api.py +4358 -0
  89. moolabs/api/meters_api.py +3707 -0
  90. moolabs/api/monitoring_api.py +561 -0
  91. moolabs/api/moolabs_api.py +1182 -0
  92. moolabs/api/moometer_proxy_api.py +1357 -0
  93. moolabs/api/netsuite_sync_api.py +2180 -0
  94. moolabs/api/notes_api.py +1425 -0
  95. moolabs/api/notifications_api.py +4490 -0
  96. moolabs/api/ops_api.py +315 -0
  97. moolabs/api/outbox_api.py +653 -0
  98. moolabs/api/payments_api.py +2889 -0
  99. moolabs/api/performance_api.py +2471 -0
  100. moolabs/api/plan_pricing_api.py +3409 -0
  101. moolabs/api/plans_api.py +2197 -0
  102. moolabs/api/pools_api.py +2358 -0
  103. moolabs/api/portal_api.py +1103 -0
  104. moolabs/api/product_catalog_api.py +7644 -0
  105. moolabs/api/promises_api.py +2814 -0
  106. moolabs/api/quote_agents_api.py +2036 -0
  107. moolabs/api/quote_contract_webhooks_api.py +327 -0
  108. moolabs/api/quote_contracts_api.py +2551 -0
  109. moolabs/api/quote_sessions_api.py +881 -0
  110. moolabs/api/quotes_api.py +12880 -0
  111. moolabs/api/rate_cards_api.py +578 -0
  112. moolabs/api/rate_catalog_api.py +2120 -0
  113. moolabs/api/rate_schedules_api.py +1224 -0
  114. moolabs/api/rating_api.py +617 -0
  115. moolabs/api/reconstruction_api.py +1281 -0
  116. moolabs/api/remittances_api.py +1521 -0
  117. moolabs/api/reports_api.py +722 -0
  118. moolabs/api/rollover_api.py +313 -0
  119. moolabs/api/sdk_ingest_api.py +312 -0
  120. moolabs/api/snapshots_api.py +1218 -0
  121. moolabs/api/state_projection_api.py +961 -0
  122. moolabs/api/steering_api.py +1862 -0
  123. moolabs/api/subjects_api.py +1160 -0
  124. moolabs/api/subscription_overrides_api.py +579 -0
  125. moolabs/api/subscriptions_api.py +1200 -0
  126. moolabs/api/tasks_api.py +1509 -0
  127. moolabs/api/tenant_api.py +22395 -0
  128. moolabs/api/tenant_config_api.py +282 -0
  129. moolabs/api/topup_api.py +632 -0
  130. moolabs/api/unpriced_api.py +933 -0
  131. moolabs/api/usage_api.py +999 -0
  132. moolabs/api/variance_api.py +1327 -0
  133. moolabs/api/wallets_api.py +3787 -0
  134. moolabs/api/webhooks_api.py +281 -0
  135. moolabs/api/well_known_api.py +278 -0
  136. moolabs/api/word_addin_api.py +623 -0
  137. moolabs/api_client.py +797 -0
  138. moolabs/api_response.py +21 -0
  139. moolabs/configuration.py +620 -0
  140. moolabs/exceptions.py +199 -0
  141. moolabs/models/__init__.py +1286 -0
  142. moolabs/models/account_create.py +114 -0
  143. moolabs/models/account_filter_options_response.py +97 -0
  144. moolabs/models/account_invoice_list_response.py +95 -0
  145. moolabs/models/account_list_item_response.py +152 -0
  146. moolabs/models/account_list_item_response_subsidiaries_inner.py +152 -0
  147. moolabs/models/account_list_response.py +101 -0
  148. moolabs/models/account_overview_bucket_response.py +91 -0
  149. moolabs/models/account_overview_response.py +106 -0
  150. moolabs/models/account_response.py +132 -0
  151. moolabs/models/account_segment_row.py +91 -0
  152. moolabs/models/account_subsidiary_option.py +89 -0
  153. moolabs/models/account_summary.py +97 -0
  154. moolabs/models/account_team_member_in.py +97 -0
  155. moolabs/models/account_team_member_out.py +101 -0
  156. moolabs/models/account_team_member_patch.py +97 -0
  157. moolabs/models/account_team_role.py +39 -0
  158. moolabs/models/account_update.py +106 -0
  159. moolabs/models/action_kind.py +45 -0
  160. moolabs/models/acute_approve_request.py +87 -0
  161. moolabs/models/acute_demo_seed_lifecycle_request.py +103 -0
  162. moolabs/models/acute_http_validation_error.py +95 -0
  163. moolabs/models/acute_validation_error.py +99 -0
  164. moolabs/models/add_contract_participant_request.py +107 -0
  165. moolabs/models/addon.py +178 -0
  166. moolabs/models/addon1.py +115 -0
  167. moolabs/models/addon2.py +95 -0
  168. moolabs/models/addon_create.py +123 -0
  169. moolabs/models/addon_instance_type.py +37 -0
  170. moolabs/models/addon_order_by.py +40 -0
  171. moolabs/models/addon_paginated_response.py +101 -0
  172. moolabs/models/addon_replace_update.py +105 -0
  173. moolabs/models/addon_status.py +38 -0
  174. moolabs/models/address.py +110 -0
  175. moolabs/models/adjusted_total.py +152 -0
  176. moolabs/models/adjustment_amount.py +152 -0
  177. moolabs/models/aging_bucket_detail.py +93 -0
  178. moolabs/models/aging_report_response.py +106 -0
  179. moolabs/models/alb_bootstrap_response.py +89 -0
  180. moolabs/models/alb_connector_config.py +128 -0
  181. moolabs/models/alb_connector_health_response.py +112 -0
  182. moolabs/models/alb_connector_list_response.py +138 -0
  183. moolabs/models/alb_load_balancer_config.py +111 -0
  184. moolabs/models/alb_route_rule.py +107 -0
  185. moolabs/models/alb_source_config.py +123 -0
  186. moolabs/models/alb_source_health_response.py +93 -0
  187. moolabs/models/alb_status_patch_request.py +94 -0
  188. moolabs/models/alb_status_patch_response.py +94 -0
  189. moolabs/models/alb_target_group_config.py +103 -0
  190. moolabs/models/algorithm_breakdown_item.py +89 -0
  191. moolabs/models/algorithm_info.py +93 -0
  192. moolabs/models/alignment.py +87 -0
  193. moolabs/models/allocate_credits_request.py +95 -0
  194. moolabs/models/allocation_coverage_response.py +157 -0
  195. moolabs/models/allocation_fact_page_response.py +97 -0
  196. moolabs/models/allocation_fact_response.py +146 -0
  197. moolabs/models/allocation_key.py +91 -0
  198. moolabs/models/allocation_rule_create.py +114 -0
  199. moolabs/models/allocation_rule_response.py +113 -0
  200. moolabs/models/allocation_rule_update.py +111 -0
  201. moolabs/models/allocation_run_create_request.py +100 -0
  202. moolabs/models/allocation_run_create_response.py +142 -0
  203. moolabs/models/allocation_run_open_cost_snapshot_response.py +120 -0
  204. moolabs/models/allocation_run_readout_response.py +110 -0
  205. moolabs/models/allocation_run_response.py +133 -0
  206. moolabs/models/allocations_list_response.py +97 -0
  207. moolabs/models/amount.py +152 -0
  208. moolabs/models/amount1.py +152 -0
  209. moolabs/models/api_key_item.py +103 -0
  210. moolabs/models/app.py +164 -0
  211. moolabs/models/app_api_v1_auto_topup_router_trigger_response.py +108 -0
  212. moolabs/models/app_api_v1_fx_rates_router_fx_rate_response.py +104 -0
  213. moolabs/models/app_api_v1_integrations_netsuite_sync_router_trigger_response.py +89 -0
  214. moolabs/models/app_api_v1_internal_subscription_sync_schemas_subscription_sync_request.py +123 -0
  215. moolabs/models/app_api_v1_portal_router_create_portal_token_request.py +92 -0
  216. moolabs/models/app_api_v1_quotes_schemas_quote_settings_response.py +91 -0
  217. moolabs/models/app_api_v1_quotes_schemas_update_quote_settings_request.py +89 -0
  218. moolabs/models/app_api_v1_subscriptions_router_subscription_sync_request.py +125 -0
  219. moolabs/models/app_api_v1_tenant_access_router_create_portal_token_request.py +101 -0
  220. moolabs/models/app_api_v1_tenant_fx_rates_router_fx_rate_response.py +93 -0
  221. moolabs/models/app_api_v1_tenant_quote_settings_router_quote_settings_response.py +89 -0
  222. moolabs/models/app_api_v1_tenant_quote_settings_router_update_quote_settings_request.py +87 -0
  223. moolabs/models/app_capability.py +102 -0
  224. moolabs/models/app_capability_type.py +40 -0
  225. moolabs/models/app_paginated_response.py +101 -0
  226. moolabs/models/app_reference.py +95 -0
  227. moolabs/models/app_replace_update.py +164 -0
  228. moolabs/models/app_status.py +37 -0
  229. moolabs/models/app_type.py +38 -0
  230. moolabs/models/apply_credit_request.py +92 -0
  231. moolabs/models/approval_action_request.py +88 -0
  232. moolabs/models/approval_action_response.py +95 -0
  233. moolabs/models/approval_policy_response.py +91 -0
  234. moolabs/models/approve_request.py +88 -0
  235. moolabs/models/approve_response.py +91 -0
  236. moolabs/models/approver_in.py +95 -0
  237. moolabs/models/arc_demo_seed_lifecycle_request.py +103 -0
  238. moolabs/models/arc_dunning_permission_grant_request.py +96 -0
  239. moolabs/models/arc_dunning_permission_revoke_request.py +90 -0
  240. moolabs/models/arc_dunning_template_admin_grant_request.py +90 -0
  241. moolabs/models/arc_dunning_template_admin_grant_response.py +115 -0
  242. moolabs/models/arc_dunning_template_admin_revoke_request.py +88 -0
  243. moolabs/models/arc_dunning_template_admin_user_dto.py +107 -0
  244. moolabs/models/arc_dunning_template_admin_user_grant_dto.py +105 -0
  245. moolabs/models/arc_dunning_template_admin_users_response.py +110 -0
  246. moolabs/models/arc_http_validation_error.py +95 -0
  247. moolabs/models/arc_transaction_request.py +110 -0
  248. moolabs/models/arc_validation_error.py +99 -0
  249. moolabs/models/ask_customer_request.py +97 -0
  250. moolabs/models/ask_customer_response.py +91 -0
  251. moolabs/models/ask_moo_redline_request.py +98 -0
  252. moolabs/models/attribution_allocation_error_detail.py +94 -0
  253. moolabs/models/attribution_allocation_error_response.py +91 -0
  254. moolabs/models/attribution_completeness_response.py +97 -0
  255. moolabs/models/attribution_signal_conflict_detail.py +94 -0
  256. moolabs/models/attribution_signal_conflict_response.py +91 -0
  257. moolabs/models/attribution_signal_delta.py +98 -0
  258. moolabs/models/attribution_signal_request.py +123 -0
  259. moolabs/models/attribution_signal_response.py +96 -0
  260. moolabs/models/audit_request.py +91 -0
  261. moolabs/models/auto_topup_activity_item.py +104 -0
  262. moolabs/models/auto_topup_activity_response.py +97 -0
  263. moolabs/models/auto_topup_rule_response.py +114 -0
  264. moolabs/models/availability.py +43 -0
  265. moolabs/models/backfill_candidate.py +97 -0
  266. moolabs/models/backfill_malformed_disputes_request.py +87 -0
  267. moolabs/models/backfill_malformed_disputes_response.py +101 -0
  268. moolabs/models/balance_history_window.py +99 -0
  269. moolabs/models/basis.py +37 -0
  270. moolabs/models/batch_ingest_request.py +96 -0
  271. moolabs/models/batch_wallet_state_request.py +105 -0
  272. moolabs/models/batch_wallet_state_request_item.py +91 -0
  273. moolabs/models/batch_wallet_state_response.py +97 -0
  274. moolabs/models/batch_wallets_by_subjects_request.py +88 -0
  275. moolabs/models/billing_customer_profile.py +109 -0
  276. moolabs/models/billing_discount_percentage.py +100 -0
  277. moolabs/models/billing_discount_reason.py +164 -0
  278. moolabs/models/billing_discount_usage.py +107 -0
  279. moolabs/models/billing_discounts.py +97 -0
  280. moolabs/models/billing_import_request.py +105 -0
  281. moolabs/models/billing_import_response.py +104 -0
  282. moolabs/models/billing_invoice_customer_extended_details.py +116 -0
  283. moolabs/models/billing_party.py +110 -0
  284. moolabs/models/billing_party_replace_update.py +106 -0
  285. moolabs/models/billing_party_tax_identity.py +88 -0
  286. moolabs/models/billing_profile.py +140 -0
  287. moolabs/models/billing_profile_app_references.py +107 -0
  288. moolabs/models/billing_profile_apps.py +107 -0
  289. moolabs/models/billing_profile_apps_create.py +113 -0
  290. moolabs/models/billing_profile_apps_or_reference.py +148 -0
  291. moolabs/models/billing_profile_create.py +112 -0
  292. moolabs/models/billing_profile_customer_override.py +116 -0
  293. moolabs/models/billing_profile_customer_override_create.py +98 -0
  294. moolabs/models/billing_profile_customer_override_expand.py +37 -0
  295. moolabs/models/billing_profile_customer_override_order_by.py +40 -0
  296. moolabs/models/billing_profile_customer_override_with_details.py +113 -0
  297. moolabs/models/billing_profile_customer_override_with_details_paginated_response.py +101 -0
  298. moolabs/models/billing_profile_expand.py +36 -0
  299. moolabs/models/billing_profile_order_by.py +39 -0
  300. moolabs/models/billing_profile_paginated_response.py +101 -0
  301. moolabs/models/billing_profile_replace_update_with_workflow.py +106 -0
  302. moolabs/models/billing_tenant_settings_out.py +89 -0
  303. moolabs/models/billing_tenant_settings_update.py +88 -0
  304. moolabs/models/billing_workflow.py +109 -0
  305. moolabs/models/billing_workflow_collection_alignment.py +150 -0
  306. moolabs/models/billing_workflow_collection_alignment_anchored.py +100 -0
  307. moolabs/models/billing_workflow_collection_alignment_subscription.py +94 -0
  308. moolabs/models/billing_workflow_collection_settings.py +93 -0
  309. moolabs/models/billing_workflow_create.py +109 -0
  310. moolabs/models/billing_workflow_invoicing_settings.py +99 -0
  311. moolabs/models/billing_workflow_payment_settings.py +88 -0
  312. moolabs/models/billing_workflow_tax_settings.py +89 -0
  313. moolabs/models/bom_component_in.py +105 -0
  314. moolabs/models/bom_component_out.py +109 -0
  315. moolabs/models/bom_create_request.py +107 -0
  316. moolabs/models/bom_out.py +127 -0
  317. moolabs/models/bom_update_request.py +103 -0
  318. moolabs/models/bom_variance_out.py +115 -0
  319. moolabs/models/breakdown_response.py +124 -0
  320. moolabs/models/breakdown_row.py +121 -0
  321. moolabs/models/breakdown_row_kind.py +39 -0
  322. moolabs/models/budget_alert_response.py +107 -0
  323. moolabs/models/budget_amount.py +152 -0
  324. moolabs/models/budget_amount1.py +152 -0
  325. moolabs/models/budget_create.py +110 -0
  326. moolabs/models/budget_pace_status.py +38 -0
  327. moolabs/models/budget_response.py +113 -0
  328. moolabs/models/budget_status_item.py +105 -0
  329. moolabs/models/budget_update.py +107 -0
  330. moolabs/models/budget_with_utilization.py +119 -0
  331. moolabs/models/bulk_action_request.py +92 -0
  332. moolabs/models/bulk_replay_request.py +92 -0
  333. moolabs/models/buyer_accept_request.py +95 -0
  334. moolabs/models/buyer_otp_request_response.py +91 -0
  335. moolabs/models/buyer_otp_verify_request.py +95 -0
  336. moolabs/models/buyer_otp_verify_response.py +89 -0
  337. moolabs/models/buyer_quote_line_item.py +103 -0
  338. moolabs/models/buyer_quote_pricing.py +93 -0
  339. moolabs/models/buyer_quote_projection.py +133 -0
  340. moolabs/models/buyer_reject_request.py +88 -0
  341. moolabs/models/buyer_request_changes_request.py +94 -0
  342. moolabs/models/buyer_request_changes_response.py +93 -0
  343. moolabs/models/buyer_requested_changes.py +90 -0
  344. moolabs/models/cancel_subscription_request.py +91 -0
  345. moolabs/models/card_type.py +37 -0
  346. moolabs/models/case_create.py +112 -0
  347. moolabs/models/case_escalate_request.py +90 -0
  348. moolabs/models/case_invoice_create.py +127 -0
  349. moolabs/models/case_invoice_response.py +150 -0
  350. moolabs/models/case_list_item_response.py +171 -0
  351. moolabs/models/case_list_response.py +101 -0
  352. moolabs/models/case_pause_request.py +91 -0
  353. moolabs/models/case_response.py +169 -0
  354. moolabs/models/case_update.py +102 -0
  355. moolabs/models/case_write_off_request.py +90 -0
  356. moolabs/models/cash_app_config_update_request.py +96 -0
  357. moolabs/models/cei_response.py +102 -0
  358. moolabs/models/change_item.py +101 -0
  359. moolabs/models/channel_policy_schema.py +112 -0
  360. moolabs/models/channel_preference_create.py +99 -0
  361. moolabs/models/channel_preference_response.py +106 -0
  362. moolabs/models/channel_preference_update.py +95 -0
  363. moolabs/models/channel_preferences_response.py +95 -0
  364. moolabs/models/chat_feedback_in.py +91 -0
  365. moolabs/models/chat_message_in.py +89 -0
  366. moolabs/models/chat_request.py +101 -0
  367. moolabs/models/check_trigger_request.py +88 -0
  368. moolabs/models/checkout_session_custom_text_after_submit_params.py +109 -0
  369. moolabs/models/checkout_session_custom_text_after_submit_params_after_submit.py +88 -0
  370. moolabs/models/checkout_session_custom_text_after_submit_params_shipping_address.py +88 -0
  371. moolabs/models/checkout_session_custom_text_after_submit_params_submit.py +88 -0
  372. moolabs/models/checkout_session_custom_text_after_submit_params_terms_of_service_acceptance.py +88 -0
  373. moolabs/models/checkout_session_ui_mode.py +37 -0
  374. moolabs/models/clause_citations.py +91 -0
  375. moolabs/models/clause_family.py +129 -0
  376. moolabs/models/clause_finding.py +110 -0
  377. moolabs/models/clause_pack.py +118 -0
  378. moolabs/models/clause_position.py +91 -0
  379. moolabs/models/client_app_start_response.py +87 -0
  380. moolabs/models/cloud_cost_row_input.py +105 -0
  381. moolabs/models/cloud_provider.py +38 -0
  382. moolabs/models/cloud_provider_data_through.py +116 -0
  383. moolabs/models/cloud_provider_quality_axis.py +107 -0
  384. moolabs/models/cloud_temporal_coverage_summary.py +114 -0
  385. moolabs/models/collection_method.py +37 -0
  386. moolabs/models/commercial_basis.py +39 -0
  387. moolabs/models/commercial_overrides.py +113 -0
  388. moolabs/models/commercial_overrides_input.py +115 -0
  389. moolabs/models/commercial_overrides_payload.py +113 -0
  390. moolabs/models/communication_create.py +110 -0
  391. moolabs/models/communication_list_response.py +101 -0
  392. moolabs/models/communication_response.py +138 -0
  393. moolabs/models/comparison_mode.py +37 -0
  394. moolabs/models/completeness_response.py +105 -0
  395. moolabs/models/component_coverage_response.py +123 -0
  396. moolabs/models/compute_variance_request.py +96 -0
  397. moolabs/models/compute_variance_response.py +105 -0
  398. moolabs/models/config_upload_gap_out.py +89 -0
  399. moolabs/models/config_upload_response.py +109 -0
  400. moolabs/models/config_upload_summary_out.py +95 -0
  401. moolabs/models/connector_config_response.py +93 -0
  402. moolabs/models/connector_health_response.py +102 -0
  403. moolabs/models/connector_item.py +105 -0
  404. moolabs/models/contact_create.py +100 -0
  405. moolabs/models/contact_list_response.py +101 -0
  406. moolabs/models/contact_response.py +134 -0
  407. moolabs/models/contact_update.py +102 -0
  408. moolabs/models/contract_document_response.py +104 -0
  409. moolabs/models/contract_event_response.py +108 -0
  410. moolabs/models/contract_inbound_message_response.py +106 -0
  411. moolabs/models/contract_participant_response.py +131 -0
  412. moolabs/models/contract_segment_response.py +95 -0
  413. moolabs/models/contract_thread_response.py +115 -0
  414. moolabs/models/contract_thread_snapshot_response.py +121 -0
  415. moolabs/models/contract_upload_detail_response.py +103 -0
  416. moolabs/models/contract_version_response.py +128 -0
  417. moolabs/models/contributor_item.py +123 -0
  418. moolabs/models/contributor_kind.py +38 -0
  419. moolabs/models/contributor_query_request.py +146 -0
  420. moolabs/models/contributor_response.py +174 -0
  421. moolabs/models/cost.py +152 -0
  422. moolabs/models/cost_adjustment_create.py +131 -0
  423. moolabs/models/cost_adjustment_response.py +102 -0
  424. moolabs/models/cost_driver_rule_create_request.py +158 -0
  425. moolabs/models/cost_driver_rule_response.py +126 -0
  426. moolabs/models/cost_driver_rule_update_request.py +100 -0
  427. moolabs/models/cost_event_detail_response.py +132 -0
  428. moolabs/models/cost_event_ingest.py +177 -0
  429. moolabs/models/cost_event_response.py +122 -0
  430. moolabs/models/cost_event_summary_item.py +103 -0
  431. moolabs/models/cost_event_summary_request.py +88 -0
  432. moolabs/models/cost_event_summary_response.py +95 -0
  433. moolabs/models/cost_explorer_response.py +155 -0
  434. moolabs/models/cost_scope.py +37 -0
  435. moolabs/models/coverage_snapshot_response.py +114 -0
  436. moolabs/models/cpu_core_hours.py +152 -0
  437. moolabs/models/cpu_cost_weight.py +152 -0
  438. moolabs/models/create_allocation_run_api422_response.py +147 -0
  439. moolabs/models/create_api_key_request.py +89 -0
  440. moolabs/models/create_api_key_response.py +105 -0
  441. moolabs/models/create_auto_topup_rule_request.py +106 -0
  442. moolabs/models/create_checkout_session_tax_id_collection.py +90 -0
  443. moolabs/models/create_checkout_session_tax_id_collection_required.py +37 -0
  444. moolabs/models/create_contract_thread_request.py +87 -0
  445. moolabs/models/create_credit_request.py +97 -0
  446. moolabs/models/create_fx_rate_request.py +103 -0
  447. moolabs/models/create_grant_request.py +136 -0
  448. moolabs/models/create_mapping_request.py +91 -0
  449. moolabs/models/create_matrix_price_row_request.py +91 -0
  450. moolabs/models/create_matrix_price_row_response.py +89 -0
  451. moolabs/models/create_portal_token_response.py +91 -0
  452. moolabs/models/create_quote_redline_request.py +103 -0
  453. moolabs/models/create_quote_request.py +119 -0
  454. moolabs/models/create_quote_template_request.py +102 -0
  455. moolabs/models/create_rate_card_request.py +105 -0
  456. moolabs/models/create_reconstruction_run_request.py +101 -0
  457. moolabs/models/create_session_response.py +97 -0
  458. moolabs/models/create_snapshot_request.py +98 -0
  459. moolabs/models/create_stripe_checkout_session_billing_address_collection.py +37 -0
  460. moolabs/models/create_stripe_checkout_session_consent_collection.py +97 -0
  461. moolabs/models/create_stripe_checkout_session_consent_collection_payment_method_reuse_agreement.py +88 -0
  462. moolabs/models/create_stripe_checkout_session_consent_collection_payment_method_reuse_agreement_position.py +37 -0
  463. moolabs/models/create_stripe_checkout_session_consent_collection_promotions.py +37 -0
  464. moolabs/models/create_stripe_checkout_session_consent_collection_terms_of_service.py +37 -0
  465. moolabs/models/create_stripe_checkout_session_customer_update.py +92 -0
  466. moolabs/models/create_stripe_checkout_session_customer_update_behavior.py +37 -0
  467. moolabs/models/create_stripe_checkout_session_redirect_on_completion.py +38 -0
  468. moolabs/models/create_stripe_checkout_session_request.py +112 -0
  469. moolabs/models/create_stripe_checkout_session_request_customer.py +163 -0
  470. moolabs/models/create_stripe_checkout_session_request_options.py +147 -0
  471. moolabs/models/create_stripe_checkout_session_result.py +139 -0
  472. moolabs/models/create_stripe_customer_portal_session_params.py +91 -0
  473. moolabs/models/create_threshold_request.py +99 -0
  474. moolabs/models/create_value_recognition_request.py +100 -0
  475. moolabs/models/create_wallet_request.py +106 -0
  476. moolabs/models/credit_config.py +119 -0
  477. moolabs/models/credit_config_payload.py +135 -0
  478. moolabs/models/credit_cost_ratio_item.py +93 -0
  479. moolabs/models/credit_cost_ratio_response.py +101 -0
  480. moolabs/models/credit_memo_apply_request.py +90 -0
  481. moolabs/models/credit_memo_create.py +104 -0
  482. moolabs/models/credit_memo_create_internal.py +114 -0
  483. moolabs/models/credit_memo_create_public.py +108 -0
  484. moolabs/models/credit_memo_item.py +102 -0
  485. moolabs/models/credit_memo_line_in.py +90 -0
  486. moolabs/models/credit_memo_list_response.py +101 -0
  487. moolabs/models/credit_memo_out.py +138 -0
  488. moolabs/models/credit_memo_response.py +124 -0
  489. moolabs/models/credit_memo_update.py +94 -0
  490. moolabs/models/credit_note_original_invoice_ref.py +114 -0
  491. moolabs/models/credit_override.py +87 -0
  492. moolabs/models/credit_override_input.py +101 -0
  493. moolabs/models/credit_override_payload.py +100 -0
  494. moolabs/models/crm_quote_context_request.py +94 -0
  495. moolabs/models/crm_quote_context_response.py +101 -0
  496. moolabs/models/crm_quote_draft_request.py +98 -0
  497. moolabs/models/crm_quote_draft_response.py +107 -0
  498. moolabs/models/crm_quote_record_card_response.py +97 -0
  499. moolabs/models/crm_surface_response.py +97 -0
  500. moolabs/models/currency.py +101 -0
  501. moolabs/models/current.py +152 -0
  502. moolabs/models/custom_invoicing_app.py +142 -0
  503. moolabs/models/custom_invoicing_app_replace_update.py +105 -0
  504. moolabs/models/custom_invoicing_customer_app_data.py +117 -0
  505. moolabs/models/custom_invoicing_draft_synchronized_request.py +91 -0
  506. moolabs/models/custom_invoicing_finalized_invoicing_request.py +91 -0
  507. moolabs/models/custom_invoicing_finalized_payment_request.py +87 -0
  508. moolabs/models/custom_invoicing_finalized_request.py +97 -0
  509. moolabs/models/custom_invoicing_line_discount_external_id_mapping.py +97 -0
  510. moolabs/models/custom_invoicing_line_external_id_mapping.py +97 -0
  511. moolabs/models/custom_invoicing_payment_trigger.py +41 -0
  512. moolabs/models/custom_invoicing_sync_result.py +110 -0
  513. moolabs/models/custom_invoicing_tax_config.py +87 -0
  514. moolabs/models/custom_invoicing_update_payment_status_request.py +92 -0
  515. moolabs/models/custom_plan_input.py +136 -0
  516. moolabs/models/custom_subscription_change.py +119 -0
  517. moolabs/models/custom_subscription_create.py +153 -0
  518. moolabs/models/customer.py +172 -0
  519. moolabs/models/customer_access.py +102 -0
  520. moolabs/models/customer_app_data.py +164 -0
  521. moolabs/models/customer_app_data_create_or_update_item.py +164 -0
  522. moolabs/models/customer_app_data_paginated_response.py +101 -0
  523. moolabs/models/customer_cost_item.py +95 -0
  524. moolabs/models/customer_create.py +120 -0
  525. moolabs/models/customer_expand.py +36 -0
  526. moolabs/models/customer_id.py +95 -0
  527. moolabs/models/customer_item.py +114 -0
  528. moolabs/models/customer_key.py +87 -0
  529. moolabs/models/customer_key_page_response.py +101 -0
  530. moolabs/models/customer_key_put_request.py +103 -0
  531. moolabs/models/customer_key_response.py +94 -0
  532. moolabs/models/customer_margin_item.py +99 -0
  533. moolabs/models/customer_margin_response.py +101 -0
  534. moolabs/models/customer_order_by.py +38 -0
  535. moolabs/models/customer_paginated_response.py +101 -0
  536. moolabs/models/customer_replace_update.py +120 -0
  537. moolabs/models/customer_subscription_order_by.py +37 -0
  538. moolabs/models/customer_upsert_request.py +102 -0
  539. moolabs/models/customer_usage_attribution.py +88 -0
  540. moolabs/models/danger_request.py +89 -0
  541. moolabs/models/dashboard_meta.py +172 -0
  542. moolabs/models/dashboard_overview_response.py +115 -0
  543. moolabs/models/data_through.py +115 -0
  544. moolabs/models/db_time_coverage_response.py +154 -0
  545. moolabs/models/db_time_evidence_batch_readback_response.py +135 -0
  546. moolabs/models/db_time_evidence_batch_request.py +147 -0
  547. moolabs/models/db_time_evidence_batch_response.py +100 -0
  548. moolabs/models/db_time_evidence_conflict_detail.py +94 -0
  549. moolabs/models/db_time_evidence_conflict_response.py +91 -0
  550. moolabs/models/db_time_evidence_not_found_detail.py +94 -0
  551. moolabs/models/db_time_evidence_not_found_response.py +91 -0
  552. moolabs/models/db_time_observation_request.py +131 -0
  553. moolabs/models/db_time_readout_quality_response.py +103 -0
  554. moolabs/models/deal_context.py +97 -0
  555. moolabs/models/deal_context_rule.py +105 -0
  556. moolabs/models/decision_item.py +131 -0
  557. moolabs/models/decision_kind.py +46 -0
  558. moolabs/models/decision_overview_response.py +172 -0
  559. moolabs/models/decision_queue_response.py +115 -0
  560. moolabs/models/decision_reason_code.py +53 -0
  561. moolabs/models/delta.py +152 -0
  562. moolabs/models/delta_pct.py +152 -0
  563. moolabs/models/demo_seed_acute_history_baseline_request.py +106 -0
  564. moolabs/models/demo_seed_acute_tenant_registration_request.py +114 -0
  565. moolabs/models/demo_seed_agent_report_baseline_request.py +106 -0
  566. moolabs/models/demo_seed_arc_invoice_ref.py +107 -0
  567. moolabs/models/demo_seed_arc_portfolio_baseline_request.py +121 -0
  568. moolabs/models/demo_seed_catalog_baseline_request.py +108 -0
  569. moolabs/models/demo_seed_customer_portfolio_baseline_request.py +103 -0
  570. moolabs/models/demo_seed_integration_crm_baseline_request.py +106 -0
  571. moolabs/models/demo_seed_integration_finance_baseline_request.py +106 -0
  572. moolabs/models/demo_seed_integration_netsuite_baseline_request.py +106 -0
  573. moolabs/models/demo_seed_integration_webhook_baseline_request.py +106 -0
  574. moolabs/models/demo_seed_invoice_payment_baseline_request.py +106 -0
  575. moolabs/models/demo_seed_isolation_canary_baseline_request.py +106 -0
  576. moolabs/models/demo_seed_lifecycle_request.py +103 -0
  577. moolabs/models/demo_seed_quote_contract_baseline_request.py +106 -0
  578. moolabs/models/demo_seed_security_credentials_baseline_request.py +106 -0
  579. moolabs/models/demo_seed_settings_baseline_request.py +106 -0
  580. moolabs/models/demo_seed_subscription_baseline_request.py +106 -0
  581. moolabs/models/demo_seed_tenant_config_baseline_request.py +119 -0
  582. moolabs/models/demo_seed_usage_baseline_request.py +106 -0
  583. moolabs/models/derive_request.py +94 -0
  584. moolabs/models/dimension.py +39 -0
  585. moolabs/models/dimension_coverage_response.py +102 -0
  586. moolabs/models/disclosure_policy_response.py +93 -0
  587. moolabs/models/disclosure_policy_update_request.py +102 -0
  588. moolabs/models/discount_percentage.py +87 -0
  589. moolabs/models/discount_reason_maximum_spend.py +94 -0
  590. moolabs/models/discount_reason_ratecard_percentage.py +109 -0
  591. moolabs/models/discount_reason_ratecard_usage.py +116 -0
  592. moolabs/models/discount_usage.py +95 -0
  593. moolabs/models/discounts.py +97 -0
  594. moolabs/models/dismiss_refinement_request.py +87 -0
  595. moolabs/models/dispute_approval_request.py +88 -0
  596. moolabs/models/dispute_list_response.py +101 -0
  597. moolabs/models/dispute_resolve_request.py +92 -0
  598. moolabs/models/dispute_response.py +134 -0
  599. moolabs/models/dispute_summary_response.py +104 -0
  600. moolabs/models/dispute_update_request.py +102 -0
  601. moolabs/models/dns_record.py +119 -0
  602. moolabs/models/domain_response.py +95 -0
  603. moolabs/models/domain_update.py +87 -0
  604. moolabs/models/draft_lock_request.py +88 -0
  605. moolabs/models/draft_lock_response.py +97 -0
  606. moolabs/models/draft_save_request.py +114 -0
  607. moolabs/models/draft_unlock_request.py +90 -0
  608. moolabs/models/driver_item.py +122 -0
  609. moolabs/models/dry_run_request.py +89 -0
  610. moolabs/models/dry_run_response.py +97 -0
  611. moolabs/models/dso_response.py +100 -0
  612. moolabs/models/dynamic_price_with_commitments.py +131 -0
  613. moolabs/models/economics_summary.py +114 -0
  614. moolabs/models/edit_subscription_add_item.py +102 -0
  615. moolabs/models/edit_subscription_add_phase.py +100 -0
  616. moolabs/models/edit_subscription_remove_item.py +98 -0
  617. moolabs/models/edit_subscription_remove_phase.py +99 -0
  618. moolabs/models/edit_subscription_stretch_phase.py +98 -0
  619. moolabs/models/edit_subscription_unschedule_edit.py +94 -0
  620. moolabs/models/effective_permission_grant_dto.py +105 -0
  621. moolabs/models/effective_permissions_response.py +129 -0
  622. moolabs/models/email_config_out.py +188 -0
  623. moolabs/models/email_config_upsert.py +111 -0
  624. moolabs/models/email_context.py +44 -0
  625. moolabs/models/email_message_status.py +42 -0
  626. moolabs/models/email_provider.py +37 -0
  627. moolabs/models/email_provider_identity.py +157 -0
  628. moolabs/models/email_provider_identity_list.py +108 -0
  629. moolabs/models/email_provider_operator_upsert.py +131 -0
  630. moolabs/models/email_provider_route.py +128 -0
  631. moolabs/models/email_provider_route_list.py +108 -0
  632. moolabs/models/enable_tier3_response.py +93 -0
  633. moolabs/models/endpoints_response.py +89 -0
  634. moolabs/models/entitlement.py +164 -0
  635. moolabs/models/entitlement_boolean.py +168 -0
  636. moolabs/models/entitlement_boolean_create_inputs.py +127 -0
  637. moolabs/models/entitlement_boolean_v2.py +170 -0
  638. moolabs/models/entitlement_create_inputs.py +164 -0
  639. moolabs/models/entitlement_grant.py +148 -0
  640. moolabs/models/entitlement_grant_create_input.py +111 -0
  641. moolabs/models/entitlement_grant_create_input_v2.py +113 -0
  642. moolabs/models/entitlement_grant_v2.py +148 -0
  643. moolabs/models/entitlement_metered.py +190 -0
  644. moolabs/models/entitlement_metered_create_inputs.py +143 -0
  645. moolabs/models/entitlement_metered_v2.py +196 -0
  646. moolabs/models/entitlement_metered_v2_create_inputs.py +157 -0
  647. moolabs/models/entitlement_order_by.py +37 -0
  648. moolabs/models/entitlement_override.py +89 -0
  649. moolabs/models/entitlement_override_input.py +95 -0
  650. moolabs/models/entitlement_override_payload.py +93 -0
  651. moolabs/models/entitlement_paginated_response.py +101 -0
  652. moolabs/models/entitlement_payload.py +103 -0
  653. moolabs/models/entitlement_static.py +170 -0
  654. moolabs/models/entitlement_static_create_inputs.py +129 -0
  655. moolabs/models/entitlement_static_v2.py +172 -0
  656. moolabs/models/entitlement_type.py +38 -0
  657. moolabs/models/entitlement_v2.py +164 -0
  658. moolabs/models/entitlement_v2_create_inputs.py +164 -0
  659. moolabs/models/entitlement_v2_paginated_response.py +101 -0
  660. moolabs/models/entitlement_value.py +109 -0
  661. moolabs/models/error_extension.py +110 -0
  662. moolabs/models/escalate_request.py +90 -0
  663. moolabs/models/escalate_response.py +91 -0
  664. moolabs/models/escalation_action_request.py +90 -0
  665. moolabs/models/escalation_action_response.py +91 -0
  666. moolabs/models/escalation_create.py +97 -0
  667. moolabs/models/escalation_dismiss_request.py +90 -0
  668. moolabs/models/escalation_list_response.py +101 -0
  669. moolabs/models/escalation_resolve_request.py +87 -0
  670. moolabs/models/escalation_response.py +112 -0
  671. moolabs/models/escalation_update.py +93 -0
  672. moolabs/models/event.py +115 -0
  673. moolabs/models/event_delivery_attempt_response.py +101 -0
  674. moolabs/models/evidence_create_request.py +96 -0
  675. moolabs/models/evidence_kind.py +39 -0
  676. moolabs/models/evidence_list_response.py +97 -0
  677. moolabs/models/evidence_response.py +106 -0
  678. moolabs/models/evidence_review_request.py +90 -0
  679. moolabs/models/evidence_window.py +37 -0
  680. moolabs/models/exchange_rate.py +152 -0
  681. moolabs/models/expiration_duration.py +40 -0
  682. moolabs/models/expiration_period.py +91 -0
  683. moolabs/models/explorer_alias_hint.py +104 -0
  684. moolabs/models/explorer_alias_hint1.py +110 -0
  685. moolabs/models/explorer_alias_kind.py +39 -0
  686. moolabs/models/explorer_breakdown_page.py +166 -0
  687. moolabs/models/explorer_breakdown_row.py +200 -0
  688. moolabs/models/explorer_cloud_provider_quality_axis.py +107 -0
  689. moolabs/models/explorer_cloud_temporal_coverage_summary.py +115 -0
  690. moolabs/models/explorer_contributor_kind.py +40 -0
  691. moolabs/models/explorer_contributor_query_request.py +190 -0
  692. moolabs/models/explorer_contributor_response.py +201 -0
  693. moolabs/models/explorer_contributor_row.py +177 -0
  694. moolabs/models/explorer_cost_event_status.py +39 -0
  695. moolabs/models/explorer_dimension.py +40 -0
  696. moolabs/models/explorer_effective_sort.py +107 -0
  697. moolabs/models/explorer_effective_sort_field.py +41 -0
  698. moolabs/models/explorer_evidence_kind.py +41 -0
  699. moolabs/models/explorer_evidence_role.py +37 -0
  700. moolabs/models/explorer_excluded_event_count.py +104 -0
  701. moolabs/models/explorer_excluded_event_reason.py +38 -0
  702. moolabs/models/explorer_exposure_summary.py +124 -0
  703. moolabs/models/explorer_measure_source.py +40 -0
  704. moolabs/models/explorer_meta.py +196 -0
  705. moolabs/models/explorer_quality_axis.py +117 -0
  706. moolabs/models/explorer_quality_caveat_code.py +45 -0
  707. moolabs/models/explorer_quality_summary.py +151 -0
  708. moolabs/models/explorer_query_request.py +184 -0
  709. moolabs/models/explorer_request_detail_event.py +134 -0
  710. moolabs/models/explorer_request_detail_line.py +133 -0
  711. moolabs/models/explorer_request_detail_query_request.py +201 -0
  712. moolabs/models/explorer_request_detail_response.py +205 -0
  713. moolabs/models/explorer_request_detail_result_cap.py +125 -0
  714. moolabs/models/explorer_request_distribution.py +109 -0
  715. moolabs/models/explorer_request_query_request.py +190 -0
  716. moolabs/models/explorer_search.py +111 -0
  717. moolabs/models/explorer_selection_result.py +107 -0
  718. moolabs/models/explorer_selection_row.py +185 -0
  719. moolabs/models/explorer_selection_status.py +39 -0
  720. moolabs/models/explorer_sort.py +104 -0
  721. moolabs/models/explorer_sort1.py +116 -0
  722. moolabs/models/explorer_sort_fallback_reason.py +39 -0
  723. moolabs/models/explorer_sort_field.py +40 -0
  724. moolabs/models/explorer_source_scope.py +38 -0
  725. moolabs/models/explorer_summary.py +134 -0
  726. moolabs/models/explorer_trend_point.py +124 -0
  727. moolabs/models/explorer_usage_history_evidence.py +110 -0
  728. moolabs/models/explorer_usage_history_source.py +38 -0
  729. moolabs/models/feature.py +156 -0
  730. moolabs/models/feature_contributor_customer.py +91 -0
  731. moolabs/models/feature_contributor_model.py +93 -0
  732. moolabs/models/feature_contributor_request.py +91 -0
  733. moolabs/models/feature_contributors_response.py +121 -0
  734. moolabs/models/feature_cost_item.py +97 -0
  735. moolabs/models/feature_create_inputs.py +128 -0
  736. moolabs/models/feature_flag_item.py +97 -0
  737. moolabs/models/feature_flag_update.py +87 -0
  738. moolabs/models/feature_margin_item.py +101 -0
  739. moolabs/models/feature_margin_response.py +101 -0
  740. moolabs/models/feature_meta.py +97 -0
  741. moolabs/models/feature_order_by.py +40 -0
  742. moolabs/models/feature_override_request.py +93 -0
  743. moolabs/models/feature_paginated_response.py +101 -0
  744. moolabs/models/feature_pool.py +99 -0
  745. moolabs/models/feature_pool_payload.py +107 -0
  746. moolabs/models/feature_price_request.py +93 -0
  747. moolabs/models/feature_pricing_input.py +120 -0
  748. moolabs/models/filter_id_exact.py +88 -0
  749. moolabs/models/filter_string.py +129 -0
  750. moolabs/models/filter_time.py +114 -0
  751. moolabs/models/finance_summary.py +143 -0
  752. moolabs/models/first_pass_redline_request.py +88 -0
  753. moolabs/models/first_pass_redline_response.py +89 -0
  754. moolabs/models/flag_disputed_request.py +92 -0
  755. moolabs/models/flag_disputed_response.py +97 -0
  756. moolabs/models/flat_price.py +104 -0
  757. moolabs/models/flat_price_with_payment_term.py +107 -0
  758. moolabs/models/flatamount.py +152 -0
  759. moolabs/models/freshness_axis.py +121 -0
  760. moolabs/models/freshness_source.py +40 -0
  761. moolabs/models/fx_rate_to_reporting.py +153 -0
  762. moolabs/models/fx_rates_list_response.py +97 -0
  763. moolabs/models/gate_status_response.py +105 -0
  764. moolabs/models/get_fx_rate_request.py +92 -0
  765. moolabs/models/get_matrix_price_rows_response.py +107 -0
  766. moolabs/models/google_chat_quote_response.py +89 -0
  767. moolabs/models/grant_activation_request.py +122 -0
  768. moolabs/models/grant_burn_down_history_segment.py +125 -0
  769. moolabs/models/grant_order_by.py +38 -0
  770. moolabs/models/grant_paginated_response.py +101 -0
  771. moolabs/models/grant_plan_change_request.py +126 -0
  772. moolabs/models/grant_renewal_request.py +122 -0
  773. moolabs/models/grant_response.py +128 -0
  774. moolabs/models/grant_source_type.py +40 -0
  775. moolabs/models/grant_usage_record.py +97 -0
  776. moolabs/models/grant_v2_paginated_response.py +101 -0
  777. moolabs/models/grants_list_response.py +99 -0
  778. moolabs/models/handoff_create_request.py +92 -0
  779. moolabs/models/helicone_config_request.py +92 -0
  780. moolabs/models/homepage_response.py +107 -0
  781. moolabs/models/hosted_checkout_settlement_ptp_response.py +100 -0
  782. moolabs/models/hosted_checkout_settlement_request.py +109 -0
  783. moolabs/models/hosted_checkout_settlement_response.py +97 -0
  784. moolabs/models/http_validation_error.py +95 -0
  785. moolabs/models/hub_spot_connect_request.py +91 -0
  786. moolabs/models/id_resource.py +97 -0
  787. moolabs/models/identity_scope.py +39 -0
  788. moolabs/models/identity_scope_coverage_response.py +96 -0
  789. moolabs/models/import_batch_detail_response.py +105 -0
  790. moolabs/models/import_batch_detail_row.py +111 -0
  791. moolabs/models/import_batch_request.py +112 -0
  792. moolabs/models/import_batch_response.py +101 -0
  793. moolabs/models/import_batch_summary.py +111 -0
  794. moolabs/models/import_dispute_item.py +122 -0
  795. moolabs/models/import_disputes_request.py +96 -0
  796. moolabs/models/import_invoice_item.py +133 -0
  797. moolabs/models/import_invoices_request.py +96 -0
  798. moolabs/models/import_promise_item.py +155 -0
  799. moolabs/models/import_promises_request.py +96 -0
  800. moolabs/models/inbound_email_attachment.py +91 -0
  801. moolabs/models/inbound_email_payload.py +103 -0
  802. moolabs/models/inbound_email_process_response.py +97 -0
  803. moolabs/models/ingest_events_body.py +150 -0
  804. moolabs/models/ingest_health.py +97 -0
  805. moolabs/models/ingested_event.py +111 -0
  806. moolabs/models/ingested_event_cursor_paginated_response.py +98 -0
  807. moolabs/models/initialamount.py +152 -0
  808. moolabs/models/insight_card.py +111 -0
  809. moolabs/models/install_method.py +38 -0
  810. moolabs/models/integration_update.py +89 -0
  811. moolabs/models/invalidate_portal_token_request.py +89 -0
  812. moolabs/models/invalidate_portal_tokens_request.py +89 -0
  813. moolabs/models/invoice.py +249 -0
  814. moolabs/models/invoice_allocation_out.py +103 -0
  815. moolabs/models/invoice_app_external_ids.py +97 -0
  816. moolabs/models/invoice_available_action_details.py +89 -0
  817. moolabs/models/invoice_available_actions.py +132 -0
  818. moolabs/models/invoice_detailed_line.py +244 -0
  819. moolabs/models/invoice_detailed_line_cost_category.py +37 -0
  820. moolabs/models/invoice_detailed_line_rate_card.py +116 -0
  821. moolabs/models/invoice_document_ref_type.py +36 -0
  822. moolabs/models/invoice_expand.py +38 -0
  823. moolabs/models/invoice_generic_document_ref.py +98 -0
  824. moolabs/models/invoice_item.py +112 -0
  825. moolabs/models/invoice_line.py +296 -0
  826. moolabs/models/invoice_line_amount_discount.py +141 -0
  827. moolabs/models/invoice_line_app_external_ids.py +93 -0
  828. moolabs/models/invoice_line_discounts.py +105 -0
  829. moolabs/models/invoice_line_managed_by.py +38 -0
  830. moolabs/models/invoice_line_out.py +99 -0
  831. moolabs/models/invoice_line_replace_update.py +143 -0
  832. moolabs/models/invoice_line_status.py +38 -0
  833. moolabs/models/invoice_line_subscription_reference.py +115 -0
  834. moolabs/models/invoice_line_tax_behavior.py +37 -0
  835. moolabs/models/invoice_line_tax_item.py +117 -0
  836. moolabs/models/invoice_line_usage_discount.py +155 -0
  837. moolabs/models/invoice_order_by.py +41 -0
  838. moolabs/models/invoice_paginated_response.py +101 -0
  839. moolabs/models/invoice_payment_terms.py +91 -0
  840. moolabs/models/invoice_pending_line_create.py +131 -0
  841. moolabs/models/invoice_pending_line_create_input.py +105 -0
  842. moolabs/models/invoice_pending_line_create_response.py +107 -0
  843. moolabs/models/invoice_pending_lines_action_filters_input.py +88 -0
  844. moolabs/models/invoice_pending_lines_action_input.py +106 -0
  845. moolabs/models/invoice_reference.py +101 -0
  846. moolabs/models/invoice_replace_update.py +117 -0
  847. moolabs/models/invoice_simulation_input.py +107 -0
  848. moolabs/models/invoice_simulation_line.py +164 -0
  849. moolabs/models/invoice_status.py +44 -0
  850. moolabs/models/invoice_status_details.py +103 -0
  851. moolabs/models/invoice_totals.py +163 -0
  852. moolabs/models/invoice_type.py +37 -0
  853. moolabs/models/invoice_upsert_request.py +112 -0
  854. moolabs/models/invoice_usage_based_rate_card.py +116 -0
  855. moolabs/models/invoice_workflow_invoicing_settings_replace_update.py +97 -0
  856. moolabs/models/invoice_workflow_replace_update.py +91 -0
  857. moolabs/models/invoice_workflow_settings.py +111 -0
  858. moolabs/models/invoice_workflow_settings_replace_update.py +97 -0
  859. moolabs/models/issue_after_reset.py +90 -0
  860. moolabs/models/jurisdiction_profile_response.py +102 -0
  861. moolabs/models/jurisdiction_resolution_request.py +92 -0
  862. moolabs/models/kill_switch_request.py +87 -0
  863. moolabs/models/langfuse_config_request.py +92 -0
  864. moolabs/models/lesson_action_request.py +89 -0
  865. moolabs/models/level_in.py +91 -0
  866. moolabs/models/lifecycle_event_request.py +97 -0
  867. moolabs/models/line_item_create.py +118 -0
  868. moolabs/models/line_total.py +153 -0
  869. moolabs/models/link_net_suite_account_request.py +89 -0
  870. moolabs/models/list_auto_topup_rules_response.py +97 -0
  871. moolabs/models/list_connectors200_response_inner.py +148 -0
  872. moolabs/models/list_entitlements_result.py +151 -0
  873. moolabs/models/list_events_v2_filter_param.py +123 -0
  874. moolabs/models/list_features_result.py +151 -0
  875. moolabs/models/list_grants_get200_response.py +151 -0
  876. moolabs/models/mapping_response.py +97 -0
  877. moolabs/models/mapping_rule_create.py +105 -0
  878. moolabs/models/mapping_rule_response.py +118 -0
  879. moolabs/models/mapping_rule_update.py +103 -0
  880. moolabs/models/margin_snapshot_response.py +131 -0
  881. moolabs/models/marketplace_app_api_key_install_request.py +91 -0
  882. moolabs/models/marketplace_install_request_payload.py +89 -0
  883. moolabs/models/marketplace_install_response.py +94 -0
  884. moolabs/models/marketplace_listing.py +105 -0
  885. moolabs/models/marketplace_listing_paginated_response.py +101 -0
  886. moolabs/models/matrix_price_row.py +91 -0
  887. moolabs/models/measure.py +146 -0
  888. moolabs/models/measure_kind.py +41 -0
  889. moolabs/models/measure_usage_from.py +151 -0
  890. moolabs/models/measure_usage_from_preset.py +37 -0
  891. moolabs/models/merge_remittances_request.py +89 -0
  892. moolabs/models/meter.py +176 -0
  893. moolabs/models/meter_aggregation.py +42 -0
  894. moolabs/models/meter_create.py +113 -0
  895. moolabs/models/meter_mapping_item.py +95 -0
  896. moolabs/models/meter_order_by.py +40 -0
  897. moolabs/models/meter_query_request.py +121 -0
  898. moolabs/models/meter_query_result.py +103 -0
  899. moolabs/models/meter_query_row.py +98 -0
  900. moolabs/models/meter_test_event_request.py +87 -0
  901. moolabs/models/meter_test_event_response.py +93 -0
  902. moolabs/models/meter_update.py +94 -0
  903. moolabs/models/meter_usage_summary_item.py +103 -0
  904. moolabs/models/meter_usage_summary_response.py +95 -0
  905. moolabs/models/meter_validation_error.py +101 -0
  906. moolabs/models/migrate_subscription_request.py +105 -0
  907. moolabs/models/model_cost_item.py +95 -0
  908. moolabs/models/net_suite_connect_request.py +103 -0
  909. moolabs/models/net_suite_cutover_guard_request.py +87 -0
  910. moolabs/models/net_suite_m2_m_finalize_request.py +87 -0
  911. moolabs/models/net_suite_m2_m_setup_request.py +101 -0
  912. moolabs/models/net_suite_managed_portal_backfill_cancel_request.py +87 -0
  913. moolabs/models/net_suite_managed_portal_backfill_request.py +89 -0
  914. moolabs/models/net_suite_managed_portal_backfill_run_request.py +90 -0
  915. moolabs/models/net_suite_managed_portal_mapping_delete_request.py +91 -0
  916. moolabs/models/net_suite_managed_portal_mapping_request.py +97 -0
  917. moolabs/models/net_suite_managed_portal_protection_ack_request.py +89 -0
  918. moolabs/models/next_action_type.py +41 -0
  919. moolabs/models/note_create.py +94 -0
  920. moolabs/models/note_list_response.py +101 -0
  921. moolabs/models/note_response.py +104 -0
  922. moolabs/models/notification_channel_meta.py +100 -0
  923. moolabs/models/notification_channel_order_by.py +39 -0
  924. moolabs/models/notification_channel_paginated_response.py +101 -0
  925. moolabs/models/notification_channel_type.py +36 -0
  926. moolabs/models/notification_channel_webhook.py +145 -0
  927. moolabs/models/notification_channel_webhook_create_request.py +117 -0
  928. moolabs/models/notification_event.py +137 -0
  929. moolabs/models/notification_event_balance_threshold_payload.py +121 -0
  930. moolabs/models/notification_event_balance_threshold_payload_data.py +133 -0
  931. moolabs/models/notification_event_delivery_attempt.py +103 -0
  932. moolabs/models/notification_event_delivery_status.py +125 -0
  933. moolabs/models/notification_event_delivery_status_state.py +40 -0
  934. moolabs/models/notification_event_entitlement_value_payload_base.py +125 -0
  935. moolabs/models/notification_event_invoice_created_payload.py +121 -0
  936. moolabs/models/notification_event_invoice_updated_payload.py +121 -0
  937. moolabs/models/notification_event_order_by.py +37 -0
  938. moolabs/models/notification_event_paginated_response.py +101 -0
  939. moolabs/models/notification_event_payload.py +178 -0
  940. moolabs/models/notification_event_resend_request.py +88 -0
  941. moolabs/models/notification_event_reset_payload.py +121 -0
  942. moolabs/models/notification_event_type.py +39 -0
  943. moolabs/models/notification_rule.py +178 -0
  944. moolabs/models/notification_rule_balance_threshold.py +159 -0
  945. moolabs/models/notification_rule_balance_threshold_create_request.py +115 -0
  946. moolabs/models/notification_rule_balance_threshold_value.py +90 -0
  947. moolabs/models/notification_rule_balance_threshold_value_type.py +40 -0
  948. moolabs/models/notification_rule_create_request.py +178 -0
  949. moolabs/models/notification_rule_entitlement_reset.py +149 -0
  950. moolabs/models/notification_rule_entitlement_reset_create_request.py +105 -0
  951. moolabs/models/notification_rule_invoice_created.py +139 -0
  952. moolabs/models/notification_rule_invoice_created_create_request.py +103 -0
  953. moolabs/models/notification_rule_invoice_updated.py +139 -0
  954. moolabs/models/notification_rule_invoice_updated_create_request.py +103 -0
  955. moolabs/models/notification_rule_order_by.py +39 -0
  956. moolabs/models/notification_rule_paginated_response.py +101 -0
  957. moolabs/models/notify_channel.py +89 -0
  958. moolabs/models/o_auth2_authorization_code_grant_error_type.py +42 -0
  959. moolabs/models/observation_out.py +103 -0
  960. moolabs/models/observed_total_cost.py +153 -0
  961. moolabs/models/open_cost_cluster_binding.py +115 -0
  962. moolabs/models/open_cost_dedicated_namespace.py +104 -0
  963. moolabs/models/open_cost_installation_create_request.py +122 -0
  964. moolabs/models/open_cost_installation_create_response.py +116 -0
  965. moolabs/models/open_cost_installation_response.py +114 -0
  966. moolabs/models/open_cost_snapshot_request.py +139 -0
  967. moolabs/models/open_cost_snapshot_response.py +125 -0
  968. moolabs/models/open_cost_trust_policy.py +145 -0
  969. moolabs/models/open_cost_wire_row.py +140 -0
  970. moolabs/models/open_from_scope_request.py +98 -0
  971. moolabs/models/operations_summary.py +120 -0
  972. moolabs/models/opt_out_request.py +90 -0
  973. moolabs/models/opt_out_response.py +93 -0
  974. moolabs/models/org_role.py +152 -0
  975. moolabs/models/original_total.py +152 -0
  976. moolabs/models/otlp_ingest_response.py +91 -0
  977. moolabs/models/overall_freshness.py +116 -0
  978. moolabs/models/overdraft_settings.py +93 -0
  979. moolabs/models/overdraft_settings_payload.py +93 -0
  980. moolabs/models/override_first_ingress_request.py +94 -0
  981. moolabs/models/override_request.py +90 -0
  982. moolabs/models/override_response.py +91 -0
  983. moolabs/models/overview_response.py +109 -0
  984. moolabs/models/pack_provenance.py +101 -0
  985. moolabs/models/package_price_with_commitments.py +137 -0
  986. moolabs/models/paginated_credit_memos.py +97 -0
  987. moolabs/models/paginated_customers.py +99 -0
  988. moolabs/models/paginated_invoices.py +97 -0
  989. moolabs/models/paginated_payments.py +97 -0
  990. moolabs/models/paginated_sync_runs.py +97 -0
  991. moolabs/models/patch_quote_agent_policy_request.py +98 -0
  992. moolabs/models/patch_rows_request.py +95 -0
  993. moolabs/models/patch_session_request.py +107 -0
  994. moolabs/models/payment_allocation_response.py +104 -0
  995. moolabs/models/payment_create.py +109 -0
  996. moolabs/models/payment_due_date.py +124 -0
  997. moolabs/models/payment_failed_request.py +101 -0
  998. moolabs/models/payment_failed_response.py +93 -0
  999. moolabs/models/payment_instructions_response.py +95 -0
  1000. moolabs/models/payment_instructions_update_request.py +90 -0
  1001. moolabs/models/payment_item.py +104 -0
  1002. moolabs/models/payment_link_request.py +105 -0
  1003. moolabs/models/payment_link_response.py +89 -0
  1004. moolabs/models/payment_list_response.py +101 -0
  1005. moolabs/models/payment_match_request.py +90 -0
  1006. moolabs/models/payment_response.py +136 -0
  1007. moolabs/models/payment_reversal_request.py +90 -0
  1008. moolabs/models/payment_succeeded_request.py +103 -0
  1009. moolabs/models/payment_succeeded_response.py +97 -0
  1010. moolabs/models/payment_term_due_date.py +113 -0
  1011. moolabs/models/payment_term_instant.py +102 -0
  1012. moolabs/models/payment_terms.py +148 -0
  1013. moolabs/models/pending_provider_confirmation_reconcile_request.py +88 -0
  1014. moolabs/models/pending_sns_confirmation_out.py +102 -0
  1015. moolabs/models/period.py +90 -0
  1016. moolabs/models/period_settlement_out.py +143 -0
  1017. moolabs/models/period_window.py +103 -0
  1018. moolabs/models/persona.py +39 -0
  1019. moolabs/models/plan.py +191 -0
  1020. moolabs/models/plan_addon.py +126 -0
  1021. moolabs/models/plan_addon_create.py +101 -0
  1022. moolabs/models/plan_addon_order_by.py +40 -0
  1023. moolabs/models/plan_addon_paginated_response.py +101 -0
  1024. moolabs/models/plan_addon_replace_update.py +91 -0
  1025. moolabs/models/plan_amend_request.py +103 -0
  1026. moolabs/models/plan_cost_item.py +97 -0
  1027. moolabs/models/plan_create.py +140 -0
  1028. moolabs/models/plan_create_request.py +103 -0
  1029. moolabs/models/plan_order_by.py +40 -0
  1030. moolabs/models/plan_paginated_response.py +101 -0
  1031. moolabs/models/plan_phase.py +113 -0
  1032. moolabs/models/plan_pricing_input.py +103 -0
  1033. moolabs/models/plan_pricing_sync_request.py +105 -0
  1034. moolabs/models/plan_pricing_view.py +107 -0
  1035. moolabs/models/plan_ref_payload.py +91 -0
  1036. moolabs/models/plan_reference.py +106 -0
  1037. moolabs/models/plan_reference_input.py +97 -0
  1038. moolabs/models/plan_replace_update.py +122 -0
  1039. moolabs/models/plan_status.py +39 -0
  1040. moolabs/models/plan_subscription_change.py +153 -0
  1041. moolabs/models/plan_subscription_create.py +167 -0
  1042. moolabs/models/policy_update_request.py +94 -0
  1043. moolabs/models/pool_notification_config_request.py +87 -0
  1044. moolabs/models/pooloverrides_value.py +152 -0
  1045. moolabs/models/portal_case_response.py +108 -0
  1046. moolabs/models/portal_channel_preference_request.py +100 -0
  1047. moolabs/models/portal_dispute_request.py +94 -0
  1048. moolabs/models/portal_dispute_response.py +102 -0
  1049. moolabs/models/portal_invoice_response.py +124 -0
  1050. moolabs/models/portal_payment_intent_response.py +91 -0
  1051. moolabs/models/portal_payment_request.py +102 -0
  1052. moolabs/models/portal_preferences_request.py +113 -0
  1053. moolabs/models/portal_preferences_response.py +87 -0
  1054. moolabs/models/portal_promise_to_pay_response.py +106 -0
  1055. moolabs/models/portal_ptp_request.py +95 -0
  1056. moolabs/models/portal_token.py +121 -0
  1057. moolabs/models/portal_token_item.py +97 -0
  1058. moolabs/models/preview_resolution_request.py +89 -0
  1059. moolabs/models/preview_resolution_response.py +101 -0
  1060. moolabs/models/preview_template_request.py +102 -0
  1061. moolabs/models/preview_template_response.py +95 -0
  1062. moolabs/models/preview_trace_entry.py +97 -0
  1063. moolabs/models/previous.py +152 -0
  1064. moolabs/models/price_payment_term.py +37 -0
  1065. moolabs/models/price_session_response.py +109 -0
  1066. moolabs/models/price_tier.py +110 -0
  1067. moolabs/models/price_tier_payload.py +103 -0
  1068. moolabs/models/pricing_override_input.py +100 -0
  1069. moolabs/models/pricing_result.py +100 -0
  1070. moolabs/models/pricing_snapshot_response.py +109 -0
  1071. moolabs/models/pricing_tier_input.py +90 -0
  1072. moolabs/models/priority.py +38 -0
  1073. moolabs/models/pro_rating_config.py +90 -0
  1074. moolabs/models/pro_rating_mode.py +36 -0
  1075. moolabs/models/process_value_recognition_request.py +94 -0
  1076. moolabs/models/progress.py +94 -0
  1077. moolabs/models/projection_link_in.py +91 -0
  1078. moolabs/models/projection_links_request.py +98 -0
  1079. moolabs/models/projection_links_response.py +89 -0
  1080. moolabs/models/promise_response.py +112 -0
  1081. moolabs/models/promote_response.py +89 -0
  1082. moolabs/models/provider_billing_reference.py +146 -0
  1083. moolabs/models/provider_billing_reference_kind.py +37 -0
  1084. moolabs/models/provider_blocking_reason.py +115 -0
  1085. moolabs/models/provider_confirmation_repair_request.py +99 -0
  1086. moolabs/models/provider_connection_status.py +42 -0
  1087. moolabs/models/provider_identity_details.py +110 -0
  1088. moolabs/models/provider_identity_purpose.py +38 -0
  1089. moolabs/models/provider_kind.py +37 -0
  1090. moolabs/models/provider_readiness_response.py +97 -0
  1091. moolabs/models/provider_readiness_summary.py +123 -0
  1092. moolabs/models/provider_route_status.py +39 -0
  1093. moolabs/models/provider_safe_test_send_request.py +107 -0
  1094. moolabs/models/provider_safe_test_send_response.py +109 -0
  1095. moolabs/models/provider_summary.py +89 -0
  1096. moolabs/models/provider_warning.py +115 -0
  1097. moolabs/models/ptp_approval_request.py +88 -0
  1098. moolabs/models/ptp_create_request.py +103 -0
  1099. moolabs/models/ptp_fulfill_request.py +90 -0
  1100. moolabs/models/ptp_payment_link_response.py +89 -0
  1101. moolabs/models/ptp_summary_response.py +104 -0
  1102. moolabs/models/publish_plan_request.py +93 -0
  1103. moolabs/models/publish_plan_result.py +93 -0
  1104. moolabs/models/publish_template_request.py +96 -0
  1105. moolabs/models/put_account_segment_request.py +89 -0
  1106. moolabs/models/put_sku_eligibility_request.py +89 -0
  1107. moolabs/models/put_tenant_segments_request.py +89 -0
  1108. moolabs/models/quality_axis.py +116 -0
  1109. moolabs/models/quality_caveat_code.py +40 -0
  1110. moolabs/models/quality_status.py +40 -0
  1111. moolabs/models/quality_summary.py +135 -0
  1112. moolabs/models/quantity.py +153 -0
  1113. moolabs/models/quick_action.py +99 -0
  1114. moolabs/models/quick_books_connect_request.py +93 -0
  1115. moolabs/models/quick_redline_response.py +123 -0
  1116. moolabs/models/quote_agent_evaluation_response.py +106 -0
  1117. moolabs/models/quote_agent_policy_response.py +112 -0
  1118. moolabs/models/quote_agent_provenance_run_response.py +114 -0
  1119. moolabs/models/quote_agent_run_response.py +122 -0
  1120. moolabs/models/quote_approval_decision_request.py +88 -0
  1121. moolabs/models/quote_approval_response.py +107 -0
  1122. moolabs/models/quote_line_item_input.py +144 -0
  1123. moolabs/models/quote_list_response.py +101 -0
  1124. moolabs/models/quote_metrics_response.py +105 -0
  1125. moolabs/models/quote_redline_decision_request.py +88 -0
  1126. moolabs/models/quote_redline_response.py +125 -0
  1127. moolabs/models/quote_response.py +125 -0
  1128. moolabs/models/quote_template_list_response.py +95 -0
  1129. moolabs/models/quote_template_response.py +109 -0
  1130. moolabs/models/quote_version_response.py +129 -0
  1131. moolabs/models/ram_cost_weight.py +152 -0
  1132. moolabs/models/ram_gib_hours.py +152 -0
  1133. moolabs/models/rate_bulk_import_request.py +97 -0
  1134. moolabs/models/rate_bulk_import_response.py +91 -0
  1135. moolabs/models/rate_card.py +150 -0
  1136. moolabs/models/rate_card_boolean_entitlement.py +96 -0
  1137. moolabs/models/rate_card_cost_list_response.py +95 -0
  1138. moolabs/models/rate_card_cost_row.py +103 -0
  1139. moolabs/models/rate_card_discount.py +87 -0
  1140. moolabs/models/rate_card_discount_input.py +103 -0
  1141. moolabs/models/rate_card_discount_payload.py +87 -0
  1142. moolabs/models/rate_card_entitlement.py +164 -0
  1143. moolabs/models/rate_card_flat_fee.py +148 -0
  1144. moolabs/models/rate_card_metered_entitlement.py +107 -0
  1145. moolabs/models/rate_card_payload.py +103 -0
  1146. moolabs/models/rate_card_response.py +106 -0
  1147. moolabs/models/rate_card_static_entitlement.py +98 -0
  1148. moolabs/models/rate_card_usage_based.py +148 -0
  1149. moolabs/models/rate_card_usage_based_price.py +192 -0
  1150. moolabs/models/rate_catalog_create.py +117 -0
  1151. moolabs/models/rate_catalog_response.py +118 -0
  1152. moolabs/models/rate_catalog_update.py +107 -0
  1153. moolabs/models/rate_generation_list_view.py +97 -0
  1154. moolabs/models/rate_generation_view.py +98 -0
  1155. moolabs/models/rate_per_unit.py +153 -0
  1156. moolabs/models/rate_per_unit1.py +153 -0
  1157. moolabs/models/rate_schedule_list_response.py +95 -0
  1158. moolabs/models/rate_schedule_preview_response.py +105 -0
  1159. moolabs/models/rate_schedule_version_out.py +101 -0
  1160. moolabs/models/ratify_family_request.py +91 -0
  1161. moolabs/models/ratify_refinement_request.py +93 -0
  1162. moolabs/models/re_scope_request.py +89 -0
  1163. moolabs/models/readiness_summary.py +89 -0
  1164. moolabs/models/readout_page_response.py +119 -0
  1165. moolabs/models/readout_row_response.py +104 -0
  1166. moolabs/models/readout_snapshot_response.py +116 -0
  1167. moolabs/models/reallocate_request.py +90 -0
  1168. moolabs/models/reallocate_response.py +97 -0
  1169. moolabs/models/reattempt_request.py +88 -0
  1170. moolabs/models/reattempt_response.py +89 -0
  1171. moolabs/models/recall_request.py +87 -0
  1172. moolabs/models/reconcile_request.py +89 -0
  1173. moolabs/models/reconcile_response.py +95 -0
  1174. moolabs/models/reconciliation_basis.py +99 -0
  1175. moolabs/models/reconciliation_basis_out.py +95 -0
  1176. moolabs/models/reconstruction_run_response.py +95 -0
  1177. moolabs/models/record_usage_request.py +115 -0
  1178. moolabs/models/recurring_period.py +96 -0
  1179. moolabs/models/recurring_period_create_input.py +94 -0
  1180. moolabs/models/recurring_period_interval.py +151 -0
  1181. moolabs/models/recurring_period_interval_enum.py +39 -0
  1182. moolabs/models/recurring_period_v2.py +94 -0
  1183. moolabs/models/recurringamount.py +152 -0
  1184. moolabs/models/redline_summary.py +89 -0
  1185. moolabs/models/refund_credit_request.py +90 -0
  1186. moolabs/models/reject_rate_generation_request.py +87 -0
  1187. moolabs/models/remittance_create_request.py +103 -0
  1188. moolabs/models/remittance_list_response.py +101 -0
  1189. moolabs/models/remittance_response.py +120 -0
  1190. moolabs/models/remove_contract_participant_response.py +131 -0
  1191. moolabs/models/remove_phase_shifting.py +37 -0
  1192. moolabs/models/replace_levels_request.py +95 -0
  1193. moolabs/models/replay_dead_letter_request.py +89 -0
  1194. moolabs/models/report_create_request.py +105 -0
  1195. moolabs/models/report_create_response.py +139 -0
  1196. moolabs/models/reporting_line_total.py +153 -0
  1197. moolabs/models/reporting_total_cost.py +153 -0
  1198. moolabs/models/request_cost_distribution.py +127 -0
  1199. moolabs/models/request_evidence_response.py +197 -0
  1200. moolabs/models/request_evidence_row.py +154 -0
  1201. moolabs/models/request_pricing_state.py +40 -0
  1202. moolabs/models/reschedule_request.py +88 -0
  1203. moolabs/models/resend_identity_details.py +104 -0
  1204. moolabs/models/reset_entitlement_usage_input.py +92 -0
  1205. moolabs/models/resolve_unapplied_request.py +87 -0
  1206. moolabs/models/resource_map_create_request.py +103 -0
  1207. moolabs/models/resource_map_response.py +113 -0
  1208. moolabs/models/retry_unpriced_request.py +91 -0
  1209. moolabs/models/retry_unpriced_response.py +91 -0
  1210. moolabs/models/revenue_recognition_request.py +89 -0
  1211. moolabs/models/reversed_settlement_ref.py +93 -0
  1212. moolabs/models/review_quarantined_request.py +95 -0
  1213. moolabs/models/review_quarantined_response.py +95 -0
  1214. moolabs/models/revoke_api_key_request.py +87 -0
  1215. moolabs/models/revoke_portal_token_request.py +87 -0
  1216. moolabs/models/rollover_mode.py +38 -0
  1217. moolabs/models/rollover_request.py +95 -0
  1218. moolabs/models/rollover_response.py +98 -0
  1219. moolabs/models/rollovercapamount.py +152 -0
  1220. moolabs/models/rolloverpercent.py +152 -0
  1221. moolabs/models/rotate_key_request.py +88 -0
  1222. moolabs/models/rotate_key_response.py +92 -0
  1223. moolabs/models/route_update_request.py +110 -0
  1224. moolabs/models/salesforce_connect_request.py +93 -0
  1225. moolabs/models/sample_rate.py +153 -0
  1226. moolabs/models/sandbox_app.py +138 -0
  1227. moolabs/models/sandbox_app_replace_update.py +101 -0
  1228. moolabs/models/sandbox_customer_app_data.py +115 -0
  1229. moolabs/models/save_redline_edit_request.py +95 -0
  1230. moolabs/models/scenario_compare_response.py +97 -0
  1231. moolabs/models/scenario_item.py +117 -0
  1232. moolabs/models/scenario_request.py +96 -0
  1233. moolabs/models/scope_type.py +38 -0
  1234. moolabs/models/sdk_batch_ingest_request.py +96 -0
  1235. moolabs/models/sdk_batch_ingest_response.py +91 -0
  1236. moolabs/models/sdk_event.py +111 -0
  1237. moolabs/models/sdk_span.py +106 -0
  1238. moolabs/models/segment_out.py +95 -0
  1239. moolabs/models/sender_response.py +93 -0
  1240. moolabs/models/sender_update.py +93 -0
  1241. moolabs/models/ses_identity_details.py +127 -0
  1242. moolabs/models/ses_provider_scope_status.py +89 -0
  1243. moolabs/models/set_rate_card_cost_request.py +89 -0
  1244. moolabs/models/severity.py +38 -0
  1245. moolabs/models/shadow_mode_request.py +87 -0
  1246. moolabs/models/shadow_run_list_item.py +101 -0
  1247. moolabs/models/shadow_run_metrics.py +114 -0
  1248. moolabs/models/shadow_run_request.py +92 -0
  1249. moolabs/models/shadow_run_summary.py +95 -0
  1250. moolabs/models/simulate_margin_request.py +100 -0
  1251. moolabs/models/simulate_margin_response.py +115 -0
  1252. moolabs/models/simulate_out.py +103 -0
  1253. moolabs/models/sku_eligibility_list_response.py +95 -0
  1254. moolabs/models/sku_eligibility_row.py +91 -0
  1255. moolabs/models/slack_quote_command_response.py +93 -0
  1256. moolabs/models/snapshot_compute_request.py +104 -0
  1257. moolabs/models/snapshot_compute_response.py +99 -0
  1258. moolabs/models/snapshot_response.py +104 -0
  1259. moolabs/models/sns_confirmation_command_out.py +98 -0
  1260. moolabs/models/sns_confirmation_confirmed_out.py +94 -0
  1261. moolabs/models/sns_confirmation_confirmed_request.py +101 -0
  1262. moolabs/models/sns_confirmation_list_out.py +95 -0
  1263. moolabs/models/sort_direction.py +37 -0
  1264. moolabs/models/sort_order.py +37 -0
  1265. moolabs/models/spend_summary.py +114 -0
  1266. moolabs/models/stage_schema.py +117 -0
  1267. moolabs/models/strategy_create_request.py +130 -0
  1268. moolabs/models/strategy_preview_request.py +87 -0
  1269. moolabs/models/strategy_update_request.py +133 -0
  1270. moolabs/models/stripe_api_key_input.py +87 -0
  1271. moolabs/models/stripe_app.py +150 -0
  1272. moolabs/models/stripe_app_replace_update.py +103 -0
  1273. moolabs/models/stripe_checkout_session_mode.py +36 -0
  1274. moolabs/models/stripe_customer_app_data.py +119 -0
  1275. moolabs/models/stripe_customer_app_data_base.py +89 -0
  1276. moolabs/models/stripe_customer_app_data_create_or_update_item.py +111 -0
  1277. moolabs/models/stripe_customer_portal_session.py +102 -0
  1278. moolabs/models/stripe_tax_config.py +95 -0
  1279. moolabs/models/stripe_webhook_event.py +99 -0
  1280. moolabs/models/stripe_webhook_event_data.py +92 -0
  1281. moolabs/models/stripe_webhook_response.py +118 -0
  1282. moolabs/models/subject.py +122 -0
  1283. moolabs/models/subject_upsert.py +98 -0
  1284. moolabs/models/subscription.py +201 -0
  1285. moolabs/models/subscription_activate_request.py +101 -0
  1286. moolabs/models/subscription_addon.py +167 -0
  1287. moolabs/models/subscription_addon_create.py +106 -0
  1288. moolabs/models/subscription_addon_rate_card.py +94 -0
  1289. moolabs/models/subscription_addon_timeline_segment.py +95 -0
  1290. moolabs/models/subscription_addon_update.py +100 -0
  1291. moolabs/models/subscription_alignment.py +93 -0
  1292. moolabs/models/subscription_bad_request_error_response.py +102 -0
  1293. moolabs/models/subscription_change.py +147 -0
  1294. moolabs/models/subscription_change_response_body.py +97 -0
  1295. moolabs/models/subscription_conflict_error_response.py +102 -0
  1296. moolabs/models/subscription_create.py +147 -0
  1297. moolabs/models/subscription_edit.py +102 -0
  1298. moolabs/models/subscription_edit_operation.py +206 -0
  1299. moolabs/models/subscription_error_extensions.py +95 -0
  1300. moolabs/models/subscription_expanded.py +211 -0
  1301. moolabs/models/subscription_item.py +167 -0
  1302. moolabs/models/subscription_item_included.py +97 -0
  1303. moolabs/models/subscription_item_price_override.py +111 -0
  1304. moolabs/models/subscription_item_price_override_type.py +37 -0
  1305. moolabs/models/subscription_paginated_response.py +101 -0
  1306. moolabs/models/subscription_phase_create.py +109 -0
  1307. moolabs/models/subscription_phase_expanded.py +163 -0
  1308. moolabs/models/subscription_ramp_phase.py +91 -0
  1309. moolabs/models/subscription_status.py +39 -0
  1310. moolabs/models/subscription_timing.py +151 -0
  1311. moolabs/models/subscription_timing_enum.py +37 -0
  1312. moolabs/models/sync_config_request.py +109 -0
  1313. moolabs/models/sync_config_response.py +111 -0
  1314. moolabs/models/sync_invoices_request.py +87 -0
  1315. moolabs/models/sync_run_item.py +102 -0
  1316. moolabs/models/synthetic_request_evidence_row.py +118 -0
  1317. moolabs/models/task_complete_request.py +92 -0
  1318. moolabs/models/task_list_response.py +101 -0
  1319. moolabs/models/task_response.py +130 -0
  1320. moolabs/models/task_update.py +93 -0
  1321. moolabs/models/tax_behavior.py +37 -0
  1322. moolabs/models/tax_config.py +100 -0
  1323. moolabs/models/template_archive_request.py +88 -0
  1324. moolabs/models/template_card_action_request.py +99 -0
  1325. moolabs/models/template_item.py +97 -0
  1326. moolabs/models/template_key_create_request.py +92 -0
  1327. moolabs/models/template_key_list_response.py +116 -0
  1328. moolabs/models/template_key_response.py +126 -0
  1329. moolabs/models/template_meta_response.py +93 -0
  1330. moolabs/models/template_preview_request.py +87 -0
  1331. moolabs/models/template_preview_response.py +101 -0
  1332. moolabs/models/template_test_send_request.py +87 -0
  1333. moolabs/models/template_test_send_response.py +93 -0
  1334. moolabs/models/template_update.py +91 -0
  1335. moolabs/models/template_version_list_response.py +95 -0
  1336. moolabs/models/template_version_response.py +143 -0
  1337. moolabs/models/tenant_config_response.py +95 -0
  1338. moolabs/models/tenant_escalation_config_out.py +97 -0
  1339. moolabs/models/tenant_escalation_config_patch.py +92 -0
  1340. moolabs/models/tenant_provision_request.py +89 -0
  1341. moolabs/models/tenant_segment_entry.py +89 -0
  1342. moolabs/models/tenant_segments_response.py +97 -0
  1343. moolabs/models/tenant_unit_economics.py +97 -0
  1344. moolabs/models/territory_in.py +89 -0
  1345. moolabs/models/test_send_request.py +104 -0
  1346. moolabs/models/test_send_response.py +93 -0
  1347. moolabs/models/tiered_price_mode.py +37 -0
  1348. moolabs/models/tiered_price_with_commitments.py +132 -0
  1349. moolabs/models/tiered_pricing_payload.py +97 -0
  1350. moolabs/models/timestamp_window.py +103 -0
  1351. moolabs/models/top_consumer.py +93 -0
  1352. moolabs/models/topup_defaults_request.py +93 -0
  1353. moolabs/models/total_cost.py +153 -0
  1354. moolabs/models/traces_response.py +95 -0
  1355. moolabs/models/trend_data_point.py +91 -0
  1356. moolabs/models/trend_point.py +116 -0
  1357. moolabs/models/trigger_request.py +87 -0
  1358. moolabs/models/ulidor_external_key.py +153 -0
  1359. moolabs/models/unapplied_cash_response.py +106 -0
  1360. moolabs/models/unavailable_reason.py +66 -0
  1361. moolabs/models/unexpected_problem_response.py +111 -0
  1362. moolabs/models/unified_price_row_input.py +99 -0
  1363. moolabs/models/unified_price_row_out.py +109 -0
  1364. moolabs/models/unit_cost.py +153 -0
  1365. moolabs/models/unit_economics.py +97 -0
  1366. moolabs/models/unit_price.py +104 -0
  1367. moolabs/models/unit_price_with_commitments.py +128 -0
  1368. moolabs/models/unitamount.py +152 -0
  1369. moolabs/models/update_approval_policy_request.py +87 -0
  1370. moolabs/models/update_auto_topup_rule_request.py +102 -0
  1371. moolabs/models/update_credit_pool_request.py +98 -0
  1372. moolabs/models/update_quote_template_request.py +102 -0
  1373. moolabs/models/update_threshold_request.py +97 -0
  1374. moolabs/models/update_wallet_settings_request.py +95 -0
  1375. moolabs/models/update_wallet_thresholds_request.py +92 -0
  1376. moolabs/models/upsert_fx_rate_request.py +92 -0
  1377. moolabs/models/upsert_provider_identity_request.py +115 -0
  1378. moolabs/models/upto.py +152 -0
  1379. moolabs/models/usage_summary_window_size.py +37 -0
  1380. moolabs/models/validate_template_request.py +116 -0
  1381. moolabs/models/validate_template_response.py +89 -0
  1382. moolabs/models/validation_error.py +99 -0
  1383. moolabs/models/validation_error_loc_inner.py +152 -0
  1384. moolabs/models/validation_issue.py +135 -0
  1385. moolabs/models/validation_issue_severity.py +37 -0
  1386. moolabs/models/validation_response.py +105 -0
  1387. moolabs/models/value_recognition_response.py +93 -0
  1388. moolabs/models/variance_decomposition_out.py +117 -0
  1389. moolabs/models/variance_summary_response.py +101 -0
  1390. moolabs/models/verification_status.py +39 -0
  1391. moolabs/models/void_grant_request.py +88 -0
  1392. moolabs/models/void_invoice_action_create.py +93 -0
  1393. moolabs/models/void_invoice_action_create_item.py +93 -0
  1394. moolabs/models/void_invoice_action_input.py +103 -0
  1395. moolabs/models/void_invoice_action_line_override.py +101 -0
  1396. moolabs/models/void_invoice_line_action_create.py +150 -0
  1397. moolabs/models/void_invoice_line_action_create_item.py +150 -0
  1398. moolabs/models/void_invoice_line_discard_action.py +94 -0
  1399. moolabs/models/void_invoice_line_pending_action_create.py +97 -0
  1400. moolabs/models/void_invoice_line_pending_action_create_item.py +97 -0
  1401. moolabs/models/volume_summary.py +114 -0
  1402. moolabs/models/wallet_owner_type.py +43 -0
  1403. moolabs/models/wallet_policy.py +38 -0
  1404. moolabs/models/wallet_response.py +112 -0
  1405. moolabs/models/wallet_state_response.py +105 -0
  1406. moolabs/models/warning_item.py +93 -0
  1407. moolabs/models/webhook_response.py +95 -0
  1408. moolabs/models/webhook_update.py +95 -0
  1409. moolabs/models/window_size.py +39 -0
  1410. moolabs/models/windowed_balance_history.py +105 -0
  1411. moolabs/models/xero_connect_request.py +91 -0
  1412. moolabs/py.typed +0 -0
  1413. moolabs/rest.py +257 -0
  1414. moolabs-0.3.0.dist-info/METADATA +31 -0
  1415. moolabs-0.3.0.dist-info/RECORD +1417 -0
  1416. moolabs-0.3.0.dist-info/WHEEL +5 -0
  1417. moolabs-0.3.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,3707 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Moolabs API
5
+
6
+ Unified Moolabs SDK. Capability-based public surface stitched from internal service specs: bff, meter, arc, acute. Customers see capability namespaces (usage, billing, collections, etc.); the SDK routes per-operation internally.
7
+
8
+ The version of the OpenAPI document: 0.3.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+ import warnings
15
+ from pydantic import validate_call, Field, StrictFloat, StrictStr, StrictInt
16
+ from typing import Any, Dict, List, Optional, Tuple, Union
17
+ from typing_extensions import Annotated
18
+
19
+ from datetime import datetime
20
+ from pydantic import Field, StrictBool, StrictStr, field_validator
21
+ from typing import Dict, List, Optional
22
+ from typing_extensions import Annotated
23
+ from moolabs.models.filter_string import FilterString
24
+ from moolabs.models.meter import Meter
25
+ from moolabs.models.meter_create import MeterCreate
26
+ from moolabs.models.meter_order_by import MeterOrderBy
27
+ from moolabs.models.meter_query_request import MeterQueryRequest
28
+ from moolabs.models.meter_query_result import MeterQueryResult
29
+ from moolabs.models.meter_test_event_request import MeterTestEventRequest
30
+ from moolabs.models.meter_test_event_response import MeterTestEventResponse
31
+ from moolabs.models.meter_update import MeterUpdate
32
+ from moolabs.models.meter_usage_summary_response import MeterUsageSummaryResponse
33
+ from moolabs.models.sort_order import SortOrder
34
+ from moolabs.models.usage_summary_window_size import UsageSummaryWindowSize
35
+ from moolabs.models.window_size import WindowSize
36
+
37
+ from moolabs.api_client import ApiClient, RequestSerialized
38
+ from moolabs.api_response import ApiResponse
39
+ from moolabs.rest import RESTResponseType
40
+
41
+
42
+ class MetersApi:
43
+ """NOTE: This class is auto generated by OpenAPI Generator
44
+ Ref: https://openapi-generator.tech
45
+
46
+ Do not edit the class manually.
47
+ """
48
+
49
+ def __init__(self, api_client=None) -> None:
50
+ if api_client is None:
51
+ api_client = ApiClient.get_default()
52
+ self.api_client = api_client
53
+
54
+
55
+ @validate_call
56
+ def create_meter(
57
+ self,
58
+ meter_create: MeterCreate,
59
+ _request_timeout: Union[
60
+ None,
61
+ Annotated[StrictFloat, Field(gt=0)],
62
+ Tuple[
63
+ Annotated[StrictFloat, Field(gt=0)],
64
+ Annotated[StrictFloat, Field(gt=0)]
65
+ ]
66
+ ] = None,
67
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
68
+ _content_type: Optional[StrictStr] = None,
69
+ _headers: Optional[Dict[StrictStr, Any]] = None,
70
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
71
+ ) -> Meter:
72
+ """Create meter
73
+
74
+ Create a meter.
75
+
76
+ :param meter_create: (required)
77
+ :type meter_create: MeterCreate
78
+ :param _request_timeout: timeout setting for this request. If one
79
+ number provided, it will be total request
80
+ timeout. It can also be a pair (tuple) of
81
+ (connection, read) timeouts.
82
+ :type _request_timeout: int, tuple(int, int), optional
83
+ :param _request_auth: set to override the auth_settings for an a single
84
+ request; this effectively ignores the
85
+ authentication in the spec for a single request.
86
+ :type _request_auth: dict, optional
87
+ :param _content_type: force content-type for the request.
88
+ :type _content_type: str, Optional
89
+ :param _headers: set to override the headers for a single
90
+ request; this effectively ignores the headers
91
+ in the spec for a single request.
92
+ :type _headers: dict, optional
93
+ :param _host_index: set to override the host_index for a single
94
+ request; this effectively ignores the host_index
95
+ in the spec for a single request.
96
+ :type _host_index: int, optional
97
+ :return: Returns the result object.
98
+ """ # noqa: E501
99
+
100
+ _param = self._create_meter_serialize(
101
+ meter_create=meter_create,
102
+ _request_auth=_request_auth,
103
+ _content_type=_content_type,
104
+ _headers=_headers,
105
+ _host_index=_host_index
106
+ )
107
+
108
+ _response_types_map: Dict[str, Optional[str]] = {
109
+ '201': "Meter",
110
+ '400': "UnexpectedProblemResponse",
111
+ '401': "UnexpectedProblemResponse",
112
+ '403': "UnexpectedProblemResponse",
113
+ '412': "UnexpectedProblemResponse",
114
+ '500': "UnexpectedProblemResponse",
115
+ '503': "UnexpectedProblemResponse",
116
+ }
117
+ response_data = self.api_client.call_api(
118
+ *_param,
119
+ _request_timeout=_request_timeout
120
+ )
121
+ response_data.read()
122
+ return self.api_client.response_deserialize(
123
+ response_data=response_data,
124
+ response_types_map=_response_types_map,
125
+ ).data
126
+
127
+
128
+ @validate_call
129
+ def create_meter_with_http_info(
130
+ self,
131
+ meter_create: MeterCreate,
132
+ _request_timeout: Union[
133
+ None,
134
+ Annotated[StrictFloat, Field(gt=0)],
135
+ Tuple[
136
+ Annotated[StrictFloat, Field(gt=0)],
137
+ Annotated[StrictFloat, Field(gt=0)]
138
+ ]
139
+ ] = None,
140
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
141
+ _content_type: Optional[StrictStr] = None,
142
+ _headers: Optional[Dict[StrictStr, Any]] = None,
143
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
144
+ ) -> ApiResponse[Meter]:
145
+ """Create meter
146
+
147
+ Create a meter.
148
+
149
+ :param meter_create: (required)
150
+ :type meter_create: MeterCreate
151
+ :param _request_timeout: timeout setting for this request. If one
152
+ number provided, it will be total request
153
+ timeout. It can also be a pair (tuple) of
154
+ (connection, read) timeouts.
155
+ :type _request_timeout: int, tuple(int, int), optional
156
+ :param _request_auth: set to override the auth_settings for an a single
157
+ request; this effectively ignores the
158
+ authentication in the spec for a single request.
159
+ :type _request_auth: dict, optional
160
+ :param _content_type: force content-type for the request.
161
+ :type _content_type: str, Optional
162
+ :param _headers: set to override the headers for a single
163
+ request; this effectively ignores the headers
164
+ in the spec for a single request.
165
+ :type _headers: dict, optional
166
+ :param _host_index: set to override the host_index for a single
167
+ request; this effectively ignores the host_index
168
+ in the spec for a single request.
169
+ :type _host_index: int, optional
170
+ :return: Returns the result object.
171
+ """ # noqa: E501
172
+
173
+ _param = self._create_meter_serialize(
174
+ meter_create=meter_create,
175
+ _request_auth=_request_auth,
176
+ _content_type=_content_type,
177
+ _headers=_headers,
178
+ _host_index=_host_index
179
+ )
180
+
181
+ _response_types_map: Dict[str, Optional[str]] = {
182
+ '201': "Meter",
183
+ '400': "UnexpectedProblemResponse",
184
+ '401': "UnexpectedProblemResponse",
185
+ '403': "UnexpectedProblemResponse",
186
+ '412': "UnexpectedProblemResponse",
187
+ '500': "UnexpectedProblemResponse",
188
+ '503': "UnexpectedProblemResponse",
189
+ }
190
+ response_data = self.api_client.call_api(
191
+ *_param,
192
+ _request_timeout=_request_timeout
193
+ )
194
+ response_data.read()
195
+ return self.api_client.response_deserialize(
196
+ response_data=response_data,
197
+ response_types_map=_response_types_map,
198
+ )
199
+
200
+
201
+ @validate_call
202
+ def create_meter_without_preload_content(
203
+ self,
204
+ meter_create: MeterCreate,
205
+ _request_timeout: Union[
206
+ None,
207
+ Annotated[StrictFloat, Field(gt=0)],
208
+ Tuple[
209
+ Annotated[StrictFloat, Field(gt=0)],
210
+ Annotated[StrictFloat, Field(gt=0)]
211
+ ]
212
+ ] = None,
213
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
214
+ _content_type: Optional[StrictStr] = None,
215
+ _headers: Optional[Dict[StrictStr, Any]] = None,
216
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
217
+ ) -> RESTResponseType:
218
+ """Create meter
219
+
220
+ Create a meter.
221
+
222
+ :param meter_create: (required)
223
+ :type meter_create: MeterCreate
224
+ :param _request_timeout: timeout setting for this request. If one
225
+ number provided, it will be total request
226
+ timeout. It can also be a pair (tuple) of
227
+ (connection, read) timeouts.
228
+ :type _request_timeout: int, tuple(int, int), optional
229
+ :param _request_auth: set to override the auth_settings for an a single
230
+ request; this effectively ignores the
231
+ authentication in the spec for a single request.
232
+ :type _request_auth: dict, optional
233
+ :param _content_type: force content-type for the request.
234
+ :type _content_type: str, Optional
235
+ :param _headers: set to override the headers for a single
236
+ request; this effectively ignores the headers
237
+ in the spec for a single request.
238
+ :type _headers: dict, optional
239
+ :param _host_index: set to override the host_index for a single
240
+ request; this effectively ignores the host_index
241
+ in the spec for a single request.
242
+ :type _host_index: int, optional
243
+ :return: Returns the result object.
244
+ """ # noqa: E501
245
+
246
+ _param = self._create_meter_serialize(
247
+ meter_create=meter_create,
248
+ _request_auth=_request_auth,
249
+ _content_type=_content_type,
250
+ _headers=_headers,
251
+ _host_index=_host_index
252
+ )
253
+
254
+ _response_types_map: Dict[str, Optional[str]] = {
255
+ '201': "Meter",
256
+ '400': "UnexpectedProblemResponse",
257
+ '401': "UnexpectedProblemResponse",
258
+ '403': "UnexpectedProblemResponse",
259
+ '412': "UnexpectedProblemResponse",
260
+ '500': "UnexpectedProblemResponse",
261
+ '503': "UnexpectedProblemResponse",
262
+ }
263
+ response_data = self.api_client.call_api(
264
+ *_param,
265
+ _request_timeout=_request_timeout
266
+ )
267
+ return response_data.response
268
+
269
+
270
+ def _create_meter_serialize(
271
+ self,
272
+ meter_create,
273
+ _request_auth,
274
+ _content_type,
275
+ _headers,
276
+ _host_index,
277
+ ) -> RequestSerialized:
278
+
279
+ _host = None
280
+
281
+ _collection_formats: Dict[str, str] = {
282
+ }
283
+
284
+ _path_params: Dict[str, str] = {}
285
+ _query_params: List[Tuple[str, str]] = []
286
+ _header_params: Dict[str, Optional[str]] = _headers or {}
287
+ _form_params: List[Tuple[str, str]] = []
288
+ _files: Dict[
289
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
290
+ ] = {}
291
+ _body_params: Optional[bytes] = None
292
+
293
+ # process the path parameters
294
+ # process the query parameters
295
+ # process the header parameters
296
+ # process the form parameters
297
+ # process the body parameter
298
+ if meter_create is not None:
299
+ _body_params = meter_create
300
+
301
+
302
+ # set the HTTP header `Accept`
303
+ if 'Accept' not in _header_params:
304
+ _header_params['Accept'] = self.api_client.select_header_accept(
305
+ [
306
+ 'application/json',
307
+ 'application/problem+json'
308
+ ]
309
+ )
310
+
311
+ # set the HTTP header `Content-Type`
312
+ if _content_type:
313
+ _header_params['Content-Type'] = _content_type
314
+ else:
315
+ _default_content_type = (
316
+ self.api_client.select_header_content_type(
317
+ [
318
+ 'application/json'
319
+ ]
320
+ )
321
+ )
322
+ if _default_content_type is not None:
323
+ _header_params['Content-Type'] = _default_content_type
324
+
325
+ # authentication setting
326
+ _auth_settings: List[str] = [
327
+ 'CloudTokenAuth'
328
+ ]
329
+
330
+ return self.api_client.param_serialize(
331
+ method='POST',
332
+ resource_path='/api/v1/meters',
333
+ path_params=_path_params,
334
+ query_params=_query_params,
335
+ header_params=_header_params,
336
+ body=_body_params,
337
+ post_params=_form_params,
338
+ files=_files,
339
+ auth_settings=_auth_settings,
340
+ collection_formats=_collection_formats,
341
+ _host=_host,
342
+ _request_auth=_request_auth
343
+ )
344
+
345
+
346
+
347
+
348
+ @validate_call
349
+ def delete_meter(
350
+ self,
351
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
352
+ _request_timeout: Union[
353
+ None,
354
+ Annotated[StrictFloat, Field(gt=0)],
355
+ Tuple[
356
+ Annotated[StrictFloat, Field(gt=0)],
357
+ Annotated[StrictFloat, Field(gt=0)]
358
+ ]
359
+ ] = None,
360
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
361
+ _content_type: Optional[StrictStr] = None,
362
+ _headers: Optional[Dict[StrictStr, Any]] = None,
363
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
364
+ ) -> None:
365
+ """Delete meter
366
+
367
+ Delete a meter.
368
+
369
+ :param meter_id_or_slug: (required)
370
+ :type meter_id_or_slug: str
371
+ :param _request_timeout: timeout setting for this request. If one
372
+ number provided, it will be total request
373
+ timeout. It can also be a pair (tuple) of
374
+ (connection, read) timeouts.
375
+ :type _request_timeout: int, tuple(int, int), optional
376
+ :param _request_auth: set to override the auth_settings for an a single
377
+ request; this effectively ignores the
378
+ authentication in the spec for a single request.
379
+ :type _request_auth: dict, optional
380
+ :param _content_type: force content-type for the request.
381
+ :type _content_type: str, Optional
382
+ :param _headers: set to override the headers for a single
383
+ request; this effectively ignores the headers
384
+ in the spec for a single request.
385
+ :type _headers: dict, optional
386
+ :param _host_index: set to override the host_index for a single
387
+ request; this effectively ignores the host_index
388
+ in the spec for a single request.
389
+ :type _host_index: int, optional
390
+ :return: Returns the result object.
391
+ """ # noqa: E501
392
+
393
+ _param = self._delete_meter_serialize(
394
+ meter_id_or_slug=meter_id_or_slug,
395
+ _request_auth=_request_auth,
396
+ _content_type=_content_type,
397
+ _headers=_headers,
398
+ _host_index=_host_index
399
+ )
400
+
401
+ _response_types_map: Dict[str, Optional[str]] = {
402
+ '204': None,
403
+ '400': "UnexpectedProblemResponse",
404
+ '401': "UnexpectedProblemResponse",
405
+ '403': "UnexpectedProblemResponse",
406
+ '412': "UnexpectedProblemResponse",
407
+ '500': "UnexpectedProblemResponse",
408
+ '503': "UnexpectedProblemResponse",
409
+ }
410
+ response_data = self.api_client.call_api(
411
+ *_param,
412
+ _request_timeout=_request_timeout
413
+ )
414
+ response_data.read()
415
+ return self.api_client.response_deserialize(
416
+ response_data=response_data,
417
+ response_types_map=_response_types_map,
418
+ ).data
419
+
420
+
421
+ @validate_call
422
+ def delete_meter_with_http_info(
423
+ self,
424
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
425
+ _request_timeout: Union[
426
+ None,
427
+ Annotated[StrictFloat, Field(gt=0)],
428
+ Tuple[
429
+ Annotated[StrictFloat, Field(gt=0)],
430
+ Annotated[StrictFloat, Field(gt=0)]
431
+ ]
432
+ ] = None,
433
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
434
+ _content_type: Optional[StrictStr] = None,
435
+ _headers: Optional[Dict[StrictStr, Any]] = None,
436
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
437
+ ) -> ApiResponse[None]:
438
+ """Delete meter
439
+
440
+ Delete a meter.
441
+
442
+ :param meter_id_or_slug: (required)
443
+ :type meter_id_or_slug: str
444
+ :param _request_timeout: timeout setting for this request. If one
445
+ number provided, it will be total request
446
+ timeout. It can also be a pair (tuple) of
447
+ (connection, read) timeouts.
448
+ :type _request_timeout: int, tuple(int, int), optional
449
+ :param _request_auth: set to override the auth_settings for an a single
450
+ request; this effectively ignores the
451
+ authentication in the spec for a single request.
452
+ :type _request_auth: dict, optional
453
+ :param _content_type: force content-type for the request.
454
+ :type _content_type: str, Optional
455
+ :param _headers: set to override the headers for a single
456
+ request; this effectively ignores the headers
457
+ in the spec for a single request.
458
+ :type _headers: dict, optional
459
+ :param _host_index: set to override the host_index for a single
460
+ request; this effectively ignores the host_index
461
+ in the spec for a single request.
462
+ :type _host_index: int, optional
463
+ :return: Returns the result object.
464
+ """ # noqa: E501
465
+
466
+ _param = self._delete_meter_serialize(
467
+ meter_id_or_slug=meter_id_or_slug,
468
+ _request_auth=_request_auth,
469
+ _content_type=_content_type,
470
+ _headers=_headers,
471
+ _host_index=_host_index
472
+ )
473
+
474
+ _response_types_map: Dict[str, Optional[str]] = {
475
+ '204': None,
476
+ '400': "UnexpectedProblemResponse",
477
+ '401': "UnexpectedProblemResponse",
478
+ '403': "UnexpectedProblemResponse",
479
+ '412': "UnexpectedProblemResponse",
480
+ '500': "UnexpectedProblemResponse",
481
+ '503': "UnexpectedProblemResponse",
482
+ }
483
+ response_data = self.api_client.call_api(
484
+ *_param,
485
+ _request_timeout=_request_timeout
486
+ )
487
+ response_data.read()
488
+ return self.api_client.response_deserialize(
489
+ response_data=response_data,
490
+ response_types_map=_response_types_map,
491
+ )
492
+
493
+
494
+ @validate_call
495
+ def delete_meter_without_preload_content(
496
+ self,
497
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
498
+ _request_timeout: Union[
499
+ None,
500
+ Annotated[StrictFloat, Field(gt=0)],
501
+ Tuple[
502
+ Annotated[StrictFloat, Field(gt=0)],
503
+ Annotated[StrictFloat, Field(gt=0)]
504
+ ]
505
+ ] = None,
506
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
507
+ _content_type: Optional[StrictStr] = None,
508
+ _headers: Optional[Dict[StrictStr, Any]] = None,
509
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
510
+ ) -> RESTResponseType:
511
+ """Delete meter
512
+
513
+ Delete a meter.
514
+
515
+ :param meter_id_or_slug: (required)
516
+ :type meter_id_or_slug: str
517
+ :param _request_timeout: timeout setting for this request. If one
518
+ number provided, it will be total request
519
+ timeout. It can also be a pair (tuple) of
520
+ (connection, read) timeouts.
521
+ :type _request_timeout: int, tuple(int, int), optional
522
+ :param _request_auth: set to override the auth_settings for an a single
523
+ request; this effectively ignores the
524
+ authentication in the spec for a single request.
525
+ :type _request_auth: dict, optional
526
+ :param _content_type: force content-type for the request.
527
+ :type _content_type: str, Optional
528
+ :param _headers: set to override the headers for a single
529
+ request; this effectively ignores the headers
530
+ in the spec for a single request.
531
+ :type _headers: dict, optional
532
+ :param _host_index: set to override the host_index for a single
533
+ request; this effectively ignores the host_index
534
+ in the spec for a single request.
535
+ :type _host_index: int, optional
536
+ :return: Returns the result object.
537
+ """ # noqa: E501
538
+
539
+ _param = self._delete_meter_serialize(
540
+ meter_id_or_slug=meter_id_or_slug,
541
+ _request_auth=_request_auth,
542
+ _content_type=_content_type,
543
+ _headers=_headers,
544
+ _host_index=_host_index
545
+ )
546
+
547
+ _response_types_map: Dict[str, Optional[str]] = {
548
+ '204': None,
549
+ '400': "UnexpectedProblemResponse",
550
+ '401': "UnexpectedProblemResponse",
551
+ '403': "UnexpectedProblemResponse",
552
+ '412': "UnexpectedProblemResponse",
553
+ '500': "UnexpectedProblemResponse",
554
+ '503': "UnexpectedProblemResponse",
555
+ }
556
+ response_data = self.api_client.call_api(
557
+ *_param,
558
+ _request_timeout=_request_timeout
559
+ )
560
+ return response_data.response
561
+
562
+
563
+ def _delete_meter_serialize(
564
+ self,
565
+ meter_id_or_slug,
566
+ _request_auth,
567
+ _content_type,
568
+ _headers,
569
+ _host_index,
570
+ ) -> RequestSerialized:
571
+
572
+ _host = None
573
+
574
+ _collection_formats: Dict[str, str] = {
575
+ }
576
+
577
+ _path_params: Dict[str, str] = {}
578
+ _query_params: List[Tuple[str, str]] = []
579
+ _header_params: Dict[str, Optional[str]] = _headers or {}
580
+ _form_params: List[Tuple[str, str]] = []
581
+ _files: Dict[
582
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
583
+ ] = {}
584
+ _body_params: Optional[bytes] = None
585
+
586
+ # process the path parameters
587
+ if meter_id_or_slug is not None:
588
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
589
+ # process the query parameters
590
+ # process the header parameters
591
+ # process the form parameters
592
+ # process the body parameter
593
+
594
+
595
+ # set the HTTP header `Accept`
596
+ if 'Accept' not in _header_params:
597
+ _header_params['Accept'] = self.api_client.select_header_accept(
598
+ [
599
+ 'application/problem+json'
600
+ ]
601
+ )
602
+
603
+
604
+ # authentication setting
605
+ _auth_settings: List[str] = [
606
+ 'CloudTokenAuth'
607
+ ]
608
+
609
+ return self.api_client.param_serialize(
610
+ method='DELETE',
611
+ resource_path='/api/v1/meters/{meterIdOrSlug}',
612
+ path_params=_path_params,
613
+ query_params=_query_params,
614
+ header_params=_header_params,
615
+ body=_body_params,
616
+ post_params=_form_params,
617
+ files=_files,
618
+ auth_settings=_auth_settings,
619
+ collection_formats=_collection_formats,
620
+ _host=_host,
621
+ _request_auth=_request_auth
622
+ )
623
+
624
+
625
+
626
+
627
+ @validate_call
628
+ def get_meter(
629
+ self,
630
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
631
+ _request_timeout: Union[
632
+ None,
633
+ Annotated[StrictFloat, Field(gt=0)],
634
+ Tuple[
635
+ Annotated[StrictFloat, Field(gt=0)],
636
+ Annotated[StrictFloat, Field(gt=0)]
637
+ ]
638
+ ] = None,
639
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
640
+ _content_type: Optional[StrictStr] = None,
641
+ _headers: Optional[Dict[StrictStr, Any]] = None,
642
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
643
+ ) -> Meter:
644
+ """Get meter
645
+
646
+ Get a meter by ID or slug.
647
+
648
+ :param meter_id_or_slug: (required)
649
+ :type meter_id_or_slug: str
650
+ :param _request_timeout: timeout setting for this request. If one
651
+ number provided, it will be total request
652
+ timeout. It can also be a pair (tuple) of
653
+ (connection, read) timeouts.
654
+ :type _request_timeout: int, tuple(int, int), optional
655
+ :param _request_auth: set to override the auth_settings for an a single
656
+ request; this effectively ignores the
657
+ authentication in the spec for a single request.
658
+ :type _request_auth: dict, optional
659
+ :param _content_type: force content-type for the request.
660
+ :type _content_type: str, Optional
661
+ :param _headers: set to override the headers for a single
662
+ request; this effectively ignores the headers
663
+ in the spec for a single request.
664
+ :type _headers: dict, optional
665
+ :param _host_index: set to override the host_index for a single
666
+ request; this effectively ignores the host_index
667
+ in the spec for a single request.
668
+ :type _host_index: int, optional
669
+ :return: Returns the result object.
670
+ """ # noqa: E501
671
+
672
+ _param = self._get_meter_serialize(
673
+ meter_id_or_slug=meter_id_or_slug,
674
+ _request_auth=_request_auth,
675
+ _content_type=_content_type,
676
+ _headers=_headers,
677
+ _host_index=_host_index
678
+ )
679
+
680
+ _response_types_map: Dict[str, Optional[str]] = {
681
+ '200': "Meter",
682
+ '400': "UnexpectedProblemResponse",
683
+ '401': "UnexpectedProblemResponse",
684
+ '403': "UnexpectedProblemResponse",
685
+ '404': "UnexpectedProblemResponse",
686
+ '412': "UnexpectedProblemResponse",
687
+ '500': "UnexpectedProblemResponse",
688
+ '503': "UnexpectedProblemResponse",
689
+ }
690
+ response_data = self.api_client.call_api(
691
+ *_param,
692
+ _request_timeout=_request_timeout
693
+ )
694
+ response_data.read()
695
+ return self.api_client.response_deserialize(
696
+ response_data=response_data,
697
+ response_types_map=_response_types_map,
698
+ ).data
699
+
700
+
701
+ @validate_call
702
+ def get_meter_with_http_info(
703
+ self,
704
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
705
+ _request_timeout: Union[
706
+ None,
707
+ Annotated[StrictFloat, Field(gt=0)],
708
+ Tuple[
709
+ Annotated[StrictFloat, Field(gt=0)],
710
+ Annotated[StrictFloat, Field(gt=0)]
711
+ ]
712
+ ] = None,
713
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
714
+ _content_type: Optional[StrictStr] = None,
715
+ _headers: Optional[Dict[StrictStr, Any]] = None,
716
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
717
+ ) -> ApiResponse[Meter]:
718
+ """Get meter
719
+
720
+ Get a meter by ID or slug.
721
+
722
+ :param meter_id_or_slug: (required)
723
+ :type meter_id_or_slug: str
724
+ :param _request_timeout: timeout setting for this request. If one
725
+ number provided, it will be total request
726
+ timeout. It can also be a pair (tuple) of
727
+ (connection, read) timeouts.
728
+ :type _request_timeout: int, tuple(int, int), optional
729
+ :param _request_auth: set to override the auth_settings for an a single
730
+ request; this effectively ignores the
731
+ authentication in the spec for a single request.
732
+ :type _request_auth: dict, optional
733
+ :param _content_type: force content-type for the request.
734
+ :type _content_type: str, Optional
735
+ :param _headers: set to override the headers for a single
736
+ request; this effectively ignores the headers
737
+ in the spec for a single request.
738
+ :type _headers: dict, optional
739
+ :param _host_index: set to override the host_index for a single
740
+ request; this effectively ignores the host_index
741
+ in the spec for a single request.
742
+ :type _host_index: int, optional
743
+ :return: Returns the result object.
744
+ """ # noqa: E501
745
+
746
+ _param = self._get_meter_serialize(
747
+ meter_id_or_slug=meter_id_or_slug,
748
+ _request_auth=_request_auth,
749
+ _content_type=_content_type,
750
+ _headers=_headers,
751
+ _host_index=_host_index
752
+ )
753
+
754
+ _response_types_map: Dict[str, Optional[str]] = {
755
+ '200': "Meter",
756
+ '400': "UnexpectedProblemResponse",
757
+ '401': "UnexpectedProblemResponse",
758
+ '403': "UnexpectedProblemResponse",
759
+ '404': "UnexpectedProblemResponse",
760
+ '412': "UnexpectedProblemResponse",
761
+ '500': "UnexpectedProblemResponse",
762
+ '503': "UnexpectedProblemResponse",
763
+ }
764
+ response_data = self.api_client.call_api(
765
+ *_param,
766
+ _request_timeout=_request_timeout
767
+ )
768
+ response_data.read()
769
+ return self.api_client.response_deserialize(
770
+ response_data=response_data,
771
+ response_types_map=_response_types_map,
772
+ )
773
+
774
+
775
+ @validate_call
776
+ def get_meter_without_preload_content(
777
+ self,
778
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
779
+ _request_timeout: Union[
780
+ None,
781
+ Annotated[StrictFloat, Field(gt=0)],
782
+ Tuple[
783
+ Annotated[StrictFloat, Field(gt=0)],
784
+ Annotated[StrictFloat, Field(gt=0)]
785
+ ]
786
+ ] = None,
787
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
788
+ _content_type: Optional[StrictStr] = None,
789
+ _headers: Optional[Dict[StrictStr, Any]] = None,
790
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
791
+ ) -> RESTResponseType:
792
+ """Get meter
793
+
794
+ Get a meter by ID or slug.
795
+
796
+ :param meter_id_or_slug: (required)
797
+ :type meter_id_or_slug: str
798
+ :param _request_timeout: timeout setting for this request. If one
799
+ number provided, it will be total request
800
+ timeout. It can also be a pair (tuple) of
801
+ (connection, read) timeouts.
802
+ :type _request_timeout: int, tuple(int, int), optional
803
+ :param _request_auth: set to override the auth_settings for an a single
804
+ request; this effectively ignores the
805
+ authentication in the spec for a single request.
806
+ :type _request_auth: dict, optional
807
+ :param _content_type: force content-type for the request.
808
+ :type _content_type: str, Optional
809
+ :param _headers: set to override the headers for a single
810
+ request; this effectively ignores the headers
811
+ in the spec for a single request.
812
+ :type _headers: dict, optional
813
+ :param _host_index: set to override the host_index for a single
814
+ request; this effectively ignores the host_index
815
+ in the spec for a single request.
816
+ :type _host_index: int, optional
817
+ :return: Returns the result object.
818
+ """ # noqa: E501
819
+
820
+ _param = self._get_meter_serialize(
821
+ meter_id_or_slug=meter_id_or_slug,
822
+ _request_auth=_request_auth,
823
+ _content_type=_content_type,
824
+ _headers=_headers,
825
+ _host_index=_host_index
826
+ )
827
+
828
+ _response_types_map: Dict[str, Optional[str]] = {
829
+ '200': "Meter",
830
+ '400': "UnexpectedProblemResponse",
831
+ '401': "UnexpectedProblemResponse",
832
+ '403': "UnexpectedProblemResponse",
833
+ '404': "UnexpectedProblemResponse",
834
+ '412': "UnexpectedProblemResponse",
835
+ '500': "UnexpectedProblemResponse",
836
+ '503': "UnexpectedProblemResponse",
837
+ }
838
+ response_data = self.api_client.call_api(
839
+ *_param,
840
+ _request_timeout=_request_timeout
841
+ )
842
+ return response_data.response
843
+
844
+
845
+ def _get_meter_serialize(
846
+ self,
847
+ meter_id_or_slug,
848
+ _request_auth,
849
+ _content_type,
850
+ _headers,
851
+ _host_index,
852
+ ) -> RequestSerialized:
853
+
854
+ _host = None
855
+
856
+ _collection_formats: Dict[str, str] = {
857
+ }
858
+
859
+ _path_params: Dict[str, str] = {}
860
+ _query_params: List[Tuple[str, str]] = []
861
+ _header_params: Dict[str, Optional[str]] = _headers or {}
862
+ _form_params: List[Tuple[str, str]] = []
863
+ _files: Dict[
864
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
865
+ ] = {}
866
+ _body_params: Optional[bytes] = None
867
+
868
+ # process the path parameters
869
+ if meter_id_or_slug is not None:
870
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
871
+ # process the query parameters
872
+ # process the header parameters
873
+ # process the form parameters
874
+ # process the body parameter
875
+
876
+
877
+ # set the HTTP header `Accept`
878
+ if 'Accept' not in _header_params:
879
+ _header_params['Accept'] = self.api_client.select_header_accept(
880
+ [
881
+ 'application/json',
882
+ 'application/problem+json'
883
+ ]
884
+ )
885
+
886
+
887
+ # authentication setting
888
+ _auth_settings: List[str] = [
889
+ 'CloudTokenAuth'
890
+ ]
891
+
892
+ return self.api_client.param_serialize(
893
+ method='GET',
894
+ resource_path='/api/v1/meters/{meterIdOrSlug}',
895
+ path_params=_path_params,
896
+ query_params=_query_params,
897
+ header_params=_header_params,
898
+ body=_body_params,
899
+ post_params=_form_params,
900
+ files=_files,
901
+ auth_settings=_auth_settings,
902
+ collection_formats=_collection_formats,
903
+ _host=_host,
904
+ _request_auth=_request_auth
905
+ )
906
+
907
+
908
+
909
+
910
+ @validate_call
911
+ def get_usage_summary(
912
+ self,
913
+ subject: Annotated[StrictStr, Field(description="The subject to query usage for (required).")],
914
+ var_from: Annotated[datetime, Field(description="Start of the time range (RFC 3339, required).")],
915
+ to: Annotated[datetime, Field(description="End of the time range (RFC 3339, required).")],
916
+ window_size: Annotated[Optional[UsageSummaryWindowSize], Field(description="Window size for breakdown. Omit for totals only.")] = None,
917
+ meter_slugs: Annotated[Optional[List[StrictStr]], Field(description="Filter to specific meter slugs. Omit to query all meters.")] = None,
918
+ _request_timeout: Union[
919
+ None,
920
+ Annotated[StrictFloat, Field(gt=0)],
921
+ Tuple[
922
+ Annotated[StrictFloat, Field(gt=0)],
923
+ Annotated[StrictFloat, Field(gt=0)]
924
+ ]
925
+ ] = None,
926
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
927
+ _content_type: Optional[StrictStr] = None,
928
+ _headers: Optional[Dict[StrictStr, Any]] = None,
929
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
930
+ ) -> MeterUsageSummaryResponse:
931
+ """Get multi-meter usage summary
932
+
933
+ Returns usage across all meters for a subject in a single query. Reads from pre-aggregated materialized views. Meters with unsupported aggregation types (MIN, MAX, UNIQUE_COUNT, LATEST) are omitted until the aggregation table is extended.
934
+
935
+ :param subject: The subject to query usage for (required). (required)
936
+ :type subject: str
937
+ :param var_from: Start of the time range (RFC 3339, required). (required)
938
+ :type var_from: datetime
939
+ :param to: End of the time range (RFC 3339, required). (required)
940
+ :type to: datetime
941
+ :param window_size: Window size for breakdown. Omit for totals only.
942
+ :type window_size: UsageSummaryWindowSize
943
+ :param meter_slugs: Filter to specific meter slugs. Omit to query all meters.
944
+ :type meter_slugs: List[str]
945
+ :param _request_timeout: timeout setting for this request. If one
946
+ number provided, it will be total request
947
+ timeout. It can also be a pair (tuple) of
948
+ (connection, read) timeouts.
949
+ :type _request_timeout: int, tuple(int, int), optional
950
+ :param _request_auth: set to override the auth_settings for an a single
951
+ request; this effectively ignores the
952
+ authentication in the spec for a single request.
953
+ :type _request_auth: dict, optional
954
+ :param _content_type: force content-type for the request.
955
+ :type _content_type: str, Optional
956
+ :param _headers: set to override the headers for a single
957
+ request; this effectively ignores the headers
958
+ in the spec for a single request.
959
+ :type _headers: dict, optional
960
+ :param _host_index: set to override the host_index for a single
961
+ request; this effectively ignores the host_index
962
+ in the spec for a single request.
963
+ :type _host_index: int, optional
964
+ :return: Returns the result object.
965
+ """ # noqa: E501
966
+
967
+ _param = self._get_usage_summary_serialize(
968
+ subject=subject,
969
+ var_from=var_from,
970
+ to=to,
971
+ window_size=window_size,
972
+ meter_slugs=meter_slugs,
973
+ _request_auth=_request_auth,
974
+ _content_type=_content_type,
975
+ _headers=_headers,
976
+ _host_index=_host_index
977
+ )
978
+
979
+ _response_types_map: Dict[str, Optional[str]] = {
980
+ '200': "MeterUsageSummaryResponse",
981
+ '400': "UnexpectedProblemResponse",
982
+ '401': "UnexpectedProblemResponse",
983
+ '403': "UnexpectedProblemResponse",
984
+ '412': "UnexpectedProblemResponse",
985
+ '500': "UnexpectedProblemResponse",
986
+ '503': "UnexpectedProblemResponse",
987
+ }
988
+ response_data = self.api_client.call_api(
989
+ *_param,
990
+ _request_timeout=_request_timeout
991
+ )
992
+ response_data.read()
993
+ return self.api_client.response_deserialize(
994
+ response_data=response_data,
995
+ response_types_map=_response_types_map,
996
+ ).data
997
+
998
+
999
+ @validate_call
1000
+ def get_usage_summary_with_http_info(
1001
+ self,
1002
+ subject: Annotated[StrictStr, Field(description="The subject to query usage for (required).")],
1003
+ var_from: Annotated[datetime, Field(description="Start of the time range (RFC 3339, required).")],
1004
+ to: Annotated[datetime, Field(description="End of the time range (RFC 3339, required).")],
1005
+ window_size: Annotated[Optional[UsageSummaryWindowSize], Field(description="Window size for breakdown. Omit for totals only.")] = None,
1006
+ meter_slugs: Annotated[Optional[List[StrictStr]], Field(description="Filter to specific meter slugs. Omit to query all meters.")] = None,
1007
+ _request_timeout: Union[
1008
+ None,
1009
+ Annotated[StrictFloat, Field(gt=0)],
1010
+ Tuple[
1011
+ Annotated[StrictFloat, Field(gt=0)],
1012
+ Annotated[StrictFloat, Field(gt=0)]
1013
+ ]
1014
+ ] = None,
1015
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1016
+ _content_type: Optional[StrictStr] = None,
1017
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1018
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1019
+ ) -> ApiResponse[MeterUsageSummaryResponse]:
1020
+ """Get multi-meter usage summary
1021
+
1022
+ Returns usage across all meters for a subject in a single query. Reads from pre-aggregated materialized views. Meters with unsupported aggregation types (MIN, MAX, UNIQUE_COUNT, LATEST) are omitted until the aggregation table is extended.
1023
+
1024
+ :param subject: The subject to query usage for (required). (required)
1025
+ :type subject: str
1026
+ :param var_from: Start of the time range (RFC 3339, required). (required)
1027
+ :type var_from: datetime
1028
+ :param to: End of the time range (RFC 3339, required). (required)
1029
+ :type to: datetime
1030
+ :param window_size: Window size for breakdown. Omit for totals only.
1031
+ :type window_size: UsageSummaryWindowSize
1032
+ :param meter_slugs: Filter to specific meter slugs. Omit to query all meters.
1033
+ :type meter_slugs: List[str]
1034
+ :param _request_timeout: timeout setting for this request. If one
1035
+ number provided, it will be total request
1036
+ timeout. It can also be a pair (tuple) of
1037
+ (connection, read) timeouts.
1038
+ :type _request_timeout: int, tuple(int, int), optional
1039
+ :param _request_auth: set to override the auth_settings for an a single
1040
+ request; this effectively ignores the
1041
+ authentication in the spec for a single request.
1042
+ :type _request_auth: dict, optional
1043
+ :param _content_type: force content-type for the request.
1044
+ :type _content_type: str, Optional
1045
+ :param _headers: set to override the headers for a single
1046
+ request; this effectively ignores the headers
1047
+ in the spec for a single request.
1048
+ :type _headers: dict, optional
1049
+ :param _host_index: set to override the host_index for a single
1050
+ request; this effectively ignores the host_index
1051
+ in the spec for a single request.
1052
+ :type _host_index: int, optional
1053
+ :return: Returns the result object.
1054
+ """ # noqa: E501
1055
+
1056
+ _param = self._get_usage_summary_serialize(
1057
+ subject=subject,
1058
+ var_from=var_from,
1059
+ to=to,
1060
+ window_size=window_size,
1061
+ meter_slugs=meter_slugs,
1062
+ _request_auth=_request_auth,
1063
+ _content_type=_content_type,
1064
+ _headers=_headers,
1065
+ _host_index=_host_index
1066
+ )
1067
+
1068
+ _response_types_map: Dict[str, Optional[str]] = {
1069
+ '200': "MeterUsageSummaryResponse",
1070
+ '400': "UnexpectedProblemResponse",
1071
+ '401': "UnexpectedProblemResponse",
1072
+ '403': "UnexpectedProblemResponse",
1073
+ '412': "UnexpectedProblemResponse",
1074
+ '500': "UnexpectedProblemResponse",
1075
+ '503': "UnexpectedProblemResponse",
1076
+ }
1077
+ response_data = self.api_client.call_api(
1078
+ *_param,
1079
+ _request_timeout=_request_timeout
1080
+ )
1081
+ response_data.read()
1082
+ return self.api_client.response_deserialize(
1083
+ response_data=response_data,
1084
+ response_types_map=_response_types_map,
1085
+ )
1086
+
1087
+
1088
+ @validate_call
1089
+ def get_usage_summary_without_preload_content(
1090
+ self,
1091
+ subject: Annotated[StrictStr, Field(description="The subject to query usage for (required).")],
1092
+ var_from: Annotated[datetime, Field(description="Start of the time range (RFC 3339, required).")],
1093
+ to: Annotated[datetime, Field(description="End of the time range (RFC 3339, required).")],
1094
+ window_size: Annotated[Optional[UsageSummaryWindowSize], Field(description="Window size for breakdown. Omit for totals only.")] = None,
1095
+ meter_slugs: Annotated[Optional[List[StrictStr]], Field(description="Filter to specific meter slugs. Omit to query all meters.")] = None,
1096
+ _request_timeout: Union[
1097
+ None,
1098
+ Annotated[StrictFloat, Field(gt=0)],
1099
+ Tuple[
1100
+ Annotated[StrictFloat, Field(gt=0)],
1101
+ Annotated[StrictFloat, Field(gt=0)]
1102
+ ]
1103
+ ] = None,
1104
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1105
+ _content_type: Optional[StrictStr] = None,
1106
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1107
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1108
+ ) -> RESTResponseType:
1109
+ """Get multi-meter usage summary
1110
+
1111
+ Returns usage across all meters for a subject in a single query. Reads from pre-aggregated materialized views. Meters with unsupported aggregation types (MIN, MAX, UNIQUE_COUNT, LATEST) are omitted until the aggregation table is extended.
1112
+
1113
+ :param subject: The subject to query usage for (required). (required)
1114
+ :type subject: str
1115
+ :param var_from: Start of the time range (RFC 3339, required). (required)
1116
+ :type var_from: datetime
1117
+ :param to: End of the time range (RFC 3339, required). (required)
1118
+ :type to: datetime
1119
+ :param window_size: Window size for breakdown. Omit for totals only.
1120
+ :type window_size: UsageSummaryWindowSize
1121
+ :param meter_slugs: Filter to specific meter slugs. Omit to query all meters.
1122
+ :type meter_slugs: List[str]
1123
+ :param _request_timeout: timeout setting for this request. If one
1124
+ number provided, it will be total request
1125
+ timeout. It can also be a pair (tuple) of
1126
+ (connection, read) timeouts.
1127
+ :type _request_timeout: int, tuple(int, int), optional
1128
+ :param _request_auth: set to override the auth_settings for an a single
1129
+ request; this effectively ignores the
1130
+ authentication in the spec for a single request.
1131
+ :type _request_auth: dict, optional
1132
+ :param _content_type: force content-type for the request.
1133
+ :type _content_type: str, Optional
1134
+ :param _headers: set to override the headers for a single
1135
+ request; this effectively ignores the headers
1136
+ in the spec for a single request.
1137
+ :type _headers: dict, optional
1138
+ :param _host_index: set to override the host_index for a single
1139
+ request; this effectively ignores the host_index
1140
+ in the spec for a single request.
1141
+ :type _host_index: int, optional
1142
+ :return: Returns the result object.
1143
+ """ # noqa: E501
1144
+
1145
+ _param = self._get_usage_summary_serialize(
1146
+ subject=subject,
1147
+ var_from=var_from,
1148
+ to=to,
1149
+ window_size=window_size,
1150
+ meter_slugs=meter_slugs,
1151
+ _request_auth=_request_auth,
1152
+ _content_type=_content_type,
1153
+ _headers=_headers,
1154
+ _host_index=_host_index
1155
+ )
1156
+
1157
+ _response_types_map: Dict[str, Optional[str]] = {
1158
+ '200': "MeterUsageSummaryResponse",
1159
+ '400': "UnexpectedProblemResponse",
1160
+ '401': "UnexpectedProblemResponse",
1161
+ '403': "UnexpectedProblemResponse",
1162
+ '412': "UnexpectedProblemResponse",
1163
+ '500': "UnexpectedProblemResponse",
1164
+ '503': "UnexpectedProblemResponse",
1165
+ }
1166
+ response_data = self.api_client.call_api(
1167
+ *_param,
1168
+ _request_timeout=_request_timeout
1169
+ )
1170
+ return response_data.response
1171
+
1172
+
1173
+ def _get_usage_summary_serialize(
1174
+ self,
1175
+ subject,
1176
+ var_from,
1177
+ to,
1178
+ window_size,
1179
+ meter_slugs,
1180
+ _request_auth,
1181
+ _content_type,
1182
+ _headers,
1183
+ _host_index,
1184
+ ) -> RequestSerialized:
1185
+
1186
+ _host = None
1187
+
1188
+ _collection_formats: Dict[str, str] = {
1189
+ 'meterSlugs': 'multi',
1190
+ }
1191
+
1192
+ _path_params: Dict[str, str] = {}
1193
+ _query_params: List[Tuple[str, str]] = []
1194
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1195
+ _form_params: List[Tuple[str, str]] = []
1196
+ _files: Dict[
1197
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1198
+ ] = {}
1199
+ _body_params: Optional[bytes] = None
1200
+
1201
+ # process the path parameters
1202
+ # process the query parameters
1203
+ if subject is not None:
1204
+
1205
+ _query_params.append(('subject', subject))
1206
+
1207
+ if var_from is not None:
1208
+ if isinstance(var_from, datetime):
1209
+ _query_params.append(
1210
+ (
1211
+ 'from',
1212
+ var_from.strftime(
1213
+ self.api_client.configuration.datetime_format
1214
+ )
1215
+ )
1216
+ )
1217
+ else:
1218
+ _query_params.append(('from', var_from))
1219
+
1220
+ if to is not None:
1221
+ if isinstance(to, datetime):
1222
+ _query_params.append(
1223
+ (
1224
+ 'to',
1225
+ to.strftime(
1226
+ self.api_client.configuration.datetime_format
1227
+ )
1228
+ )
1229
+ )
1230
+ else:
1231
+ _query_params.append(('to', to))
1232
+
1233
+ if window_size is not None:
1234
+
1235
+ _query_params.append(('windowSize', window_size.value))
1236
+
1237
+ if meter_slugs is not None:
1238
+
1239
+ _query_params.append(('meterSlugs', meter_slugs))
1240
+
1241
+ # process the header parameters
1242
+ # process the form parameters
1243
+ # process the body parameter
1244
+
1245
+
1246
+ # set the HTTP header `Accept`
1247
+ if 'Accept' not in _header_params:
1248
+ _header_params['Accept'] = self.api_client.select_header_accept(
1249
+ [
1250
+ 'application/json',
1251
+ 'application/problem+json'
1252
+ ]
1253
+ )
1254
+
1255
+
1256
+ # authentication setting
1257
+ _auth_settings: List[str] = [
1258
+ 'CloudTokenAuth'
1259
+ ]
1260
+
1261
+ return self.api_client.param_serialize(
1262
+ method='GET',
1263
+ resource_path='/api/v1/usage/summary',
1264
+ path_params=_path_params,
1265
+ query_params=_query_params,
1266
+ header_params=_header_params,
1267
+ body=_body_params,
1268
+ post_params=_form_params,
1269
+ files=_files,
1270
+ auth_settings=_auth_settings,
1271
+ collection_formats=_collection_formats,
1272
+ _host=_host,
1273
+ _request_auth=_request_auth
1274
+ )
1275
+
1276
+
1277
+
1278
+
1279
+ @validate_call
1280
+ def list_meter_group_by_values(
1281
+ self,
1282
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1283
+ group_by_key: StrictStr,
1284
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1285
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1286
+ _request_timeout: Union[
1287
+ None,
1288
+ Annotated[StrictFloat, Field(gt=0)],
1289
+ Tuple[
1290
+ Annotated[StrictFloat, Field(gt=0)],
1291
+ Annotated[StrictFloat, Field(gt=0)]
1292
+ ]
1293
+ ] = None,
1294
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1295
+ _content_type: Optional[StrictStr] = None,
1296
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1297
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1298
+ ) -> List[str]:
1299
+ """List meter group by values
1300
+
1301
+ List meter group by values.
1302
+
1303
+ :param meter_id_or_slug: (required)
1304
+ :type meter_id_or_slug: str
1305
+ :param group_by_key: (required)
1306
+ :type group_by_key: str
1307
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1308
+ :type var_from: datetime
1309
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1310
+ :type to: datetime
1311
+ :param _request_timeout: timeout setting for this request. If one
1312
+ number provided, it will be total request
1313
+ timeout. It can also be a pair (tuple) of
1314
+ (connection, read) timeouts.
1315
+ :type _request_timeout: int, tuple(int, int), optional
1316
+ :param _request_auth: set to override the auth_settings for an a single
1317
+ request; this effectively ignores the
1318
+ authentication in the spec for a single request.
1319
+ :type _request_auth: dict, optional
1320
+ :param _content_type: force content-type for the request.
1321
+ :type _content_type: str, Optional
1322
+ :param _headers: set to override the headers for a single
1323
+ request; this effectively ignores the headers
1324
+ in the spec for a single request.
1325
+ :type _headers: dict, optional
1326
+ :param _host_index: set to override the host_index for a single
1327
+ request; this effectively ignores the host_index
1328
+ in the spec for a single request.
1329
+ :type _host_index: int, optional
1330
+ :return: Returns the result object.
1331
+ """ # noqa: E501
1332
+
1333
+ _param = self._list_meter_group_by_values_serialize(
1334
+ meter_id_or_slug=meter_id_or_slug,
1335
+ group_by_key=group_by_key,
1336
+ var_from=var_from,
1337
+ to=to,
1338
+ _request_auth=_request_auth,
1339
+ _content_type=_content_type,
1340
+ _headers=_headers,
1341
+ _host_index=_host_index
1342
+ )
1343
+
1344
+ _response_types_map: Dict[str, Optional[str]] = {
1345
+ '200': "List[str]",
1346
+ '400': "UnexpectedProblemResponse",
1347
+ '401': "UnexpectedProblemResponse",
1348
+ '403': "UnexpectedProblemResponse",
1349
+ '412': "UnexpectedProblemResponse",
1350
+ '500': "UnexpectedProblemResponse",
1351
+ '503': "UnexpectedProblemResponse",
1352
+ }
1353
+ response_data = self.api_client.call_api(
1354
+ *_param,
1355
+ _request_timeout=_request_timeout
1356
+ )
1357
+ response_data.read()
1358
+ return self.api_client.response_deserialize(
1359
+ response_data=response_data,
1360
+ response_types_map=_response_types_map,
1361
+ ).data
1362
+
1363
+
1364
+ @validate_call
1365
+ def list_meter_group_by_values_with_http_info(
1366
+ self,
1367
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1368
+ group_by_key: StrictStr,
1369
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1370
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1371
+ _request_timeout: Union[
1372
+ None,
1373
+ Annotated[StrictFloat, Field(gt=0)],
1374
+ Tuple[
1375
+ Annotated[StrictFloat, Field(gt=0)],
1376
+ Annotated[StrictFloat, Field(gt=0)]
1377
+ ]
1378
+ ] = None,
1379
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1380
+ _content_type: Optional[StrictStr] = None,
1381
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1382
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1383
+ ) -> ApiResponse[List[str]]:
1384
+ """List meter group by values
1385
+
1386
+ List meter group by values.
1387
+
1388
+ :param meter_id_or_slug: (required)
1389
+ :type meter_id_or_slug: str
1390
+ :param group_by_key: (required)
1391
+ :type group_by_key: str
1392
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1393
+ :type var_from: datetime
1394
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1395
+ :type to: datetime
1396
+ :param _request_timeout: timeout setting for this request. If one
1397
+ number provided, it will be total request
1398
+ timeout. It can also be a pair (tuple) of
1399
+ (connection, read) timeouts.
1400
+ :type _request_timeout: int, tuple(int, int), optional
1401
+ :param _request_auth: set to override the auth_settings for an a single
1402
+ request; this effectively ignores the
1403
+ authentication in the spec for a single request.
1404
+ :type _request_auth: dict, optional
1405
+ :param _content_type: force content-type for the request.
1406
+ :type _content_type: str, Optional
1407
+ :param _headers: set to override the headers for a single
1408
+ request; this effectively ignores the headers
1409
+ in the spec for a single request.
1410
+ :type _headers: dict, optional
1411
+ :param _host_index: set to override the host_index for a single
1412
+ request; this effectively ignores the host_index
1413
+ in the spec for a single request.
1414
+ :type _host_index: int, optional
1415
+ :return: Returns the result object.
1416
+ """ # noqa: E501
1417
+
1418
+ _param = self._list_meter_group_by_values_serialize(
1419
+ meter_id_or_slug=meter_id_or_slug,
1420
+ group_by_key=group_by_key,
1421
+ var_from=var_from,
1422
+ to=to,
1423
+ _request_auth=_request_auth,
1424
+ _content_type=_content_type,
1425
+ _headers=_headers,
1426
+ _host_index=_host_index
1427
+ )
1428
+
1429
+ _response_types_map: Dict[str, Optional[str]] = {
1430
+ '200': "List[str]",
1431
+ '400': "UnexpectedProblemResponse",
1432
+ '401': "UnexpectedProblemResponse",
1433
+ '403': "UnexpectedProblemResponse",
1434
+ '412': "UnexpectedProblemResponse",
1435
+ '500': "UnexpectedProblemResponse",
1436
+ '503': "UnexpectedProblemResponse",
1437
+ }
1438
+ response_data = self.api_client.call_api(
1439
+ *_param,
1440
+ _request_timeout=_request_timeout
1441
+ )
1442
+ response_data.read()
1443
+ return self.api_client.response_deserialize(
1444
+ response_data=response_data,
1445
+ response_types_map=_response_types_map,
1446
+ )
1447
+
1448
+
1449
+ @validate_call
1450
+ def list_meter_group_by_values_without_preload_content(
1451
+ self,
1452
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1453
+ group_by_key: StrictStr,
1454
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1455
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1456
+ _request_timeout: Union[
1457
+ None,
1458
+ Annotated[StrictFloat, Field(gt=0)],
1459
+ Tuple[
1460
+ Annotated[StrictFloat, Field(gt=0)],
1461
+ Annotated[StrictFloat, Field(gt=0)]
1462
+ ]
1463
+ ] = None,
1464
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1465
+ _content_type: Optional[StrictStr] = None,
1466
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1467
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1468
+ ) -> RESTResponseType:
1469
+ """List meter group by values
1470
+
1471
+ List meter group by values.
1472
+
1473
+ :param meter_id_or_slug: (required)
1474
+ :type meter_id_or_slug: str
1475
+ :param group_by_key: (required)
1476
+ :type group_by_key: str
1477
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to 24 hours ago. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1478
+ :type var_from: datetime
1479
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1480
+ :type to: datetime
1481
+ :param _request_timeout: timeout setting for this request. If one
1482
+ number provided, it will be total request
1483
+ timeout. It can also be a pair (tuple) of
1484
+ (connection, read) timeouts.
1485
+ :type _request_timeout: int, tuple(int, int), optional
1486
+ :param _request_auth: set to override the auth_settings for an a single
1487
+ request; this effectively ignores the
1488
+ authentication in the spec for a single request.
1489
+ :type _request_auth: dict, optional
1490
+ :param _content_type: force content-type for the request.
1491
+ :type _content_type: str, Optional
1492
+ :param _headers: set to override the headers for a single
1493
+ request; this effectively ignores the headers
1494
+ in the spec for a single request.
1495
+ :type _headers: dict, optional
1496
+ :param _host_index: set to override the host_index for a single
1497
+ request; this effectively ignores the host_index
1498
+ in the spec for a single request.
1499
+ :type _host_index: int, optional
1500
+ :return: Returns the result object.
1501
+ """ # noqa: E501
1502
+
1503
+ _param = self._list_meter_group_by_values_serialize(
1504
+ meter_id_or_slug=meter_id_or_slug,
1505
+ group_by_key=group_by_key,
1506
+ var_from=var_from,
1507
+ to=to,
1508
+ _request_auth=_request_auth,
1509
+ _content_type=_content_type,
1510
+ _headers=_headers,
1511
+ _host_index=_host_index
1512
+ )
1513
+
1514
+ _response_types_map: Dict[str, Optional[str]] = {
1515
+ '200': "List[str]",
1516
+ '400': "UnexpectedProblemResponse",
1517
+ '401': "UnexpectedProblemResponse",
1518
+ '403': "UnexpectedProblemResponse",
1519
+ '412': "UnexpectedProblemResponse",
1520
+ '500': "UnexpectedProblemResponse",
1521
+ '503': "UnexpectedProblemResponse",
1522
+ }
1523
+ response_data = self.api_client.call_api(
1524
+ *_param,
1525
+ _request_timeout=_request_timeout
1526
+ )
1527
+ return response_data.response
1528
+
1529
+
1530
+ def _list_meter_group_by_values_serialize(
1531
+ self,
1532
+ meter_id_or_slug,
1533
+ group_by_key,
1534
+ var_from,
1535
+ to,
1536
+ _request_auth,
1537
+ _content_type,
1538
+ _headers,
1539
+ _host_index,
1540
+ ) -> RequestSerialized:
1541
+
1542
+ _host = None
1543
+
1544
+ _collection_formats: Dict[str, str] = {
1545
+ }
1546
+
1547
+ _path_params: Dict[str, str] = {}
1548
+ _query_params: List[Tuple[str, str]] = []
1549
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1550
+ _form_params: List[Tuple[str, str]] = []
1551
+ _files: Dict[
1552
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1553
+ ] = {}
1554
+ _body_params: Optional[bytes] = None
1555
+
1556
+ # process the path parameters
1557
+ if meter_id_or_slug is not None:
1558
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
1559
+ if group_by_key is not None:
1560
+ _path_params['groupByKey'] = group_by_key
1561
+ # process the query parameters
1562
+ if var_from is not None:
1563
+ if isinstance(var_from, datetime):
1564
+ _query_params.append(
1565
+ (
1566
+ 'from',
1567
+ var_from.strftime(
1568
+ self.api_client.configuration.datetime_format
1569
+ )
1570
+ )
1571
+ )
1572
+ else:
1573
+ _query_params.append(('from', var_from))
1574
+
1575
+ if to is not None:
1576
+ if isinstance(to, datetime):
1577
+ _query_params.append(
1578
+ (
1579
+ 'to',
1580
+ to.strftime(
1581
+ self.api_client.configuration.datetime_format
1582
+ )
1583
+ )
1584
+ )
1585
+ else:
1586
+ _query_params.append(('to', to))
1587
+
1588
+ # process the header parameters
1589
+ # process the form parameters
1590
+ # process the body parameter
1591
+
1592
+
1593
+ # set the HTTP header `Accept`
1594
+ if 'Accept' not in _header_params:
1595
+ _header_params['Accept'] = self.api_client.select_header_accept(
1596
+ [
1597
+ 'application/json',
1598
+ 'application/problem+json'
1599
+ ]
1600
+ )
1601
+
1602
+
1603
+ # authentication setting
1604
+ _auth_settings: List[str] = [
1605
+ 'CloudTokenAuth'
1606
+ ]
1607
+
1608
+ return self.api_client.param_serialize(
1609
+ method='GET',
1610
+ resource_path='/api/v1/meters/{meterIdOrSlug}/group-by/{groupByKey}/values',
1611
+ path_params=_path_params,
1612
+ query_params=_query_params,
1613
+ header_params=_header_params,
1614
+ body=_body_params,
1615
+ post_params=_form_params,
1616
+ files=_files,
1617
+ auth_settings=_auth_settings,
1618
+ collection_formats=_collection_formats,
1619
+ _host=_host,
1620
+ _request_auth=_request_auth
1621
+ )
1622
+
1623
+
1624
+
1625
+
1626
+ @validate_call
1627
+ def list_meter_subjects(
1628
+ self,
1629
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1630
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1631
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1632
+ _request_timeout: Union[
1633
+ None,
1634
+ Annotated[StrictFloat, Field(gt=0)],
1635
+ Tuple[
1636
+ Annotated[StrictFloat, Field(gt=0)],
1637
+ Annotated[StrictFloat, Field(gt=0)]
1638
+ ]
1639
+ ] = None,
1640
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1641
+ _content_type: Optional[StrictStr] = None,
1642
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1643
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1644
+ ) -> List[str]:
1645
+ """List meter subjects
1646
+
1647
+ List subjects for a meter.
1648
+
1649
+ :param meter_id_or_slug: (required)
1650
+ :type meter_id_or_slug: str
1651
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1652
+ :type var_from: datetime
1653
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1654
+ :type to: datetime
1655
+ :param _request_timeout: timeout setting for this request. If one
1656
+ number provided, it will be total request
1657
+ timeout. It can also be a pair (tuple) of
1658
+ (connection, read) timeouts.
1659
+ :type _request_timeout: int, tuple(int, int), optional
1660
+ :param _request_auth: set to override the auth_settings for an a single
1661
+ request; this effectively ignores the
1662
+ authentication in the spec for a single request.
1663
+ :type _request_auth: dict, optional
1664
+ :param _content_type: force content-type for the request.
1665
+ :type _content_type: str, Optional
1666
+ :param _headers: set to override the headers for a single
1667
+ request; this effectively ignores the headers
1668
+ in the spec for a single request.
1669
+ :type _headers: dict, optional
1670
+ :param _host_index: set to override the host_index for a single
1671
+ request; this effectively ignores the host_index
1672
+ in the spec for a single request.
1673
+ :type _host_index: int, optional
1674
+ :return: Returns the result object.
1675
+ """ # noqa: E501
1676
+
1677
+ _param = self._list_meter_subjects_serialize(
1678
+ meter_id_or_slug=meter_id_or_slug,
1679
+ var_from=var_from,
1680
+ to=to,
1681
+ _request_auth=_request_auth,
1682
+ _content_type=_content_type,
1683
+ _headers=_headers,
1684
+ _host_index=_host_index
1685
+ )
1686
+
1687
+ _response_types_map: Dict[str, Optional[str]] = {
1688
+ '200': "List[str]",
1689
+ '400': "UnexpectedProblemResponse",
1690
+ '401': "UnexpectedProblemResponse",
1691
+ '403': "UnexpectedProblemResponse",
1692
+ '412': "UnexpectedProblemResponse",
1693
+ '500': "UnexpectedProblemResponse",
1694
+ '503': "UnexpectedProblemResponse",
1695
+ }
1696
+ response_data = self.api_client.call_api(
1697
+ *_param,
1698
+ _request_timeout=_request_timeout
1699
+ )
1700
+ response_data.read()
1701
+ return self.api_client.response_deserialize(
1702
+ response_data=response_data,
1703
+ response_types_map=_response_types_map,
1704
+ ).data
1705
+
1706
+
1707
+ @validate_call
1708
+ def list_meter_subjects_with_http_info(
1709
+ self,
1710
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1711
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1712
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1713
+ _request_timeout: Union[
1714
+ None,
1715
+ Annotated[StrictFloat, Field(gt=0)],
1716
+ Tuple[
1717
+ Annotated[StrictFloat, Field(gt=0)],
1718
+ Annotated[StrictFloat, Field(gt=0)]
1719
+ ]
1720
+ ] = None,
1721
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1722
+ _content_type: Optional[StrictStr] = None,
1723
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1724
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1725
+ ) -> ApiResponse[List[str]]:
1726
+ """List meter subjects
1727
+
1728
+ List subjects for a meter.
1729
+
1730
+ :param meter_id_or_slug: (required)
1731
+ :type meter_id_or_slug: str
1732
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1733
+ :type var_from: datetime
1734
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1735
+ :type to: datetime
1736
+ :param _request_timeout: timeout setting for this request. If one
1737
+ number provided, it will be total request
1738
+ timeout. It can also be a pair (tuple) of
1739
+ (connection, read) timeouts.
1740
+ :type _request_timeout: int, tuple(int, int), optional
1741
+ :param _request_auth: set to override the auth_settings for an a single
1742
+ request; this effectively ignores the
1743
+ authentication in the spec for a single request.
1744
+ :type _request_auth: dict, optional
1745
+ :param _content_type: force content-type for the request.
1746
+ :type _content_type: str, Optional
1747
+ :param _headers: set to override the headers for a single
1748
+ request; this effectively ignores the headers
1749
+ in the spec for a single request.
1750
+ :type _headers: dict, optional
1751
+ :param _host_index: set to override the host_index for a single
1752
+ request; this effectively ignores the host_index
1753
+ in the spec for a single request.
1754
+ :type _host_index: int, optional
1755
+ :return: Returns the result object.
1756
+ """ # noqa: E501
1757
+
1758
+ _param = self._list_meter_subjects_serialize(
1759
+ meter_id_or_slug=meter_id_or_slug,
1760
+ var_from=var_from,
1761
+ to=to,
1762
+ _request_auth=_request_auth,
1763
+ _content_type=_content_type,
1764
+ _headers=_headers,
1765
+ _host_index=_host_index
1766
+ )
1767
+
1768
+ _response_types_map: Dict[str, Optional[str]] = {
1769
+ '200': "List[str]",
1770
+ '400': "UnexpectedProblemResponse",
1771
+ '401': "UnexpectedProblemResponse",
1772
+ '403': "UnexpectedProblemResponse",
1773
+ '412': "UnexpectedProblemResponse",
1774
+ '500': "UnexpectedProblemResponse",
1775
+ '503': "UnexpectedProblemResponse",
1776
+ }
1777
+ response_data = self.api_client.call_api(
1778
+ *_param,
1779
+ _request_timeout=_request_timeout
1780
+ )
1781
+ response_data.read()
1782
+ return self.api_client.response_deserialize(
1783
+ response_data=response_data,
1784
+ response_types_map=_response_types_map,
1785
+ )
1786
+
1787
+
1788
+ @validate_call
1789
+ def list_meter_subjects_without_preload_content(
1790
+ self,
1791
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
1792
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
1793
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
1794
+ _request_timeout: Union[
1795
+ None,
1796
+ Annotated[StrictFloat, Field(gt=0)],
1797
+ Tuple[
1798
+ Annotated[StrictFloat, Field(gt=0)],
1799
+ Annotated[StrictFloat, Field(gt=0)]
1800
+ ]
1801
+ ] = None,
1802
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1803
+ _content_type: Optional[StrictStr] = None,
1804
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1805
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1806
+ ) -> RESTResponseType:
1807
+ """List meter subjects
1808
+
1809
+ List subjects for a meter.
1810
+
1811
+ :param meter_id_or_slug: (required)
1812
+ :type meter_id_or_slug: str
1813
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. Defaults to the beginning of time. For example: ?from=2025-01-01T00%3A00%3A00.000Z
1814
+ :type var_from: datetime
1815
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
1816
+ :type to: datetime
1817
+ :param _request_timeout: timeout setting for this request. If one
1818
+ number provided, it will be total request
1819
+ timeout. It can also be a pair (tuple) of
1820
+ (connection, read) timeouts.
1821
+ :type _request_timeout: int, tuple(int, int), optional
1822
+ :param _request_auth: set to override the auth_settings for an a single
1823
+ request; this effectively ignores the
1824
+ authentication in the spec for a single request.
1825
+ :type _request_auth: dict, optional
1826
+ :param _content_type: force content-type for the request.
1827
+ :type _content_type: str, Optional
1828
+ :param _headers: set to override the headers for a single
1829
+ request; this effectively ignores the headers
1830
+ in the spec for a single request.
1831
+ :type _headers: dict, optional
1832
+ :param _host_index: set to override the host_index for a single
1833
+ request; this effectively ignores the host_index
1834
+ in the spec for a single request.
1835
+ :type _host_index: int, optional
1836
+ :return: Returns the result object.
1837
+ """ # noqa: E501
1838
+
1839
+ _param = self._list_meter_subjects_serialize(
1840
+ meter_id_or_slug=meter_id_or_slug,
1841
+ var_from=var_from,
1842
+ to=to,
1843
+ _request_auth=_request_auth,
1844
+ _content_type=_content_type,
1845
+ _headers=_headers,
1846
+ _host_index=_host_index
1847
+ )
1848
+
1849
+ _response_types_map: Dict[str, Optional[str]] = {
1850
+ '200': "List[str]",
1851
+ '400': "UnexpectedProblemResponse",
1852
+ '401': "UnexpectedProblemResponse",
1853
+ '403': "UnexpectedProblemResponse",
1854
+ '412': "UnexpectedProblemResponse",
1855
+ '500': "UnexpectedProblemResponse",
1856
+ '503': "UnexpectedProblemResponse",
1857
+ }
1858
+ response_data = self.api_client.call_api(
1859
+ *_param,
1860
+ _request_timeout=_request_timeout
1861
+ )
1862
+ return response_data.response
1863
+
1864
+
1865
+ def _list_meter_subjects_serialize(
1866
+ self,
1867
+ meter_id_or_slug,
1868
+ var_from,
1869
+ to,
1870
+ _request_auth,
1871
+ _content_type,
1872
+ _headers,
1873
+ _host_index,
1874
+ ) -> RequestSerialized:
1875
+
1876
+ _host = None
1877
+
1878
+ _collection_formats: Dict[str, str] = {
1879
+ }
1880
+
1881
+ _path_params: Dict[str, str] = {}
1882
+ _query_params: List[Tuple[str, str]] = []
1883
+ _header_params: Dict[str, Optional[str]] = _headers or {}
1884
+ _form_params: List[Tuple[str, str]] = []
1885
+ _files: Dict[
1886
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
1887
+ ] = {}
1888
+ _body_params: Optional[bytes] = None
1889
+
1890
+ # process the path parameters
1891
+ if meter_id_or_slug is not None:
1892
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
1893
+ # process the query parameters
1894
+ if var_from is not None:
1895
+ if isinstance(var_from, datetime):
1896
+ _query_params.append(
1897
+ (
1898
+ 'from',
1899
+ var_from.strftime(
1900
+ self.api_client.configuration.datetime_format
1901
+ )
1902
+ )
1903
+ )
1904
+ else:
1905
+ _query_params.append(('from', var_from))
1906
+
1907
+ if to is not None:
1908
+ if isinstance(to, datetime):
1909
+ _query_params.append(
1910
+ (
1911
+ 'to',
1912
+ to.strftime(
1913
+ self.api_client.configuration.datetime_format
1914
+ )
1915
+ )
1916
+ )
1917
+ else:
1918
+ _query_params.append(('to', to))
1919
+
1920
+ # process the header parameters
1921
+ # process the form parameters
1922
+ # process the body parameter
1923
+
1924
+
1925
+ # set the HTTP header `Accept`
1926
+ if 'Accept' not in _header_params:
1927
+ _header_params['Accept'] = self.api_client.select_header_accept(
1928
+ [
1929
+ 'application/json',
1930
+ 'application/problem+json'
1931
+ ]
1932
+ )
1933
+
1934
+
1935
+ # authentication setting
1936
+ _auth_settings: List[str] = [
1937
+ 'CloudTokenAuth'
1938
+ ]
1939
+
1940
+ return self.api_client.param_serialize(
1941
+ method='GET',
1942
+ resource_path='/api/v1/meters/{meterIdOrSlug}/subjects',
1943
+ path_params=_path_params,
1944
+ query_params=_query_params,
1945
+ header_params=_header_params,
1946
+ body=_body_params,
1947
+ post_params=_form_params,
1948
+ files=_files,
1949
+ auth_settings=_auth_settings,
1950
+ collection_formats=_collection_formats,
1951
+ _host=_host,
1952
+ _request_auth=_request_auth
1953
+ )
1954
+
1955
+
1956
+
1957
+
1958
+ @validate_call
1959
+ def list_meters(
1960
+ self,
1961
+ page: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Page index. Default is 1.")] = None,
1962
+ page_size: Annotated[Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field(description="The maximum number of items per page. Default is 100.")] = None,
1963
+ order: Annotated[Optional[SortOrder], Field(description="The order direction.")] = None,
1964
+ order_by: Annotated[Optional[MeterOrderBy], Field(description="The order by field.")] = None,
1965
+ include_deleted: Annotated[Optional[StrictBool], Field(description="Include deleted meters.")] = None,
1966
+ _request_timeout: Union[
1967
+ None,
1968
+ Annotated[StrictFloat, Field(gt=0)],
1969
+ Tuple[
1970
+ Annotated[StrictFloat, Field(gt=0)],
1971
+ Annotated[StrictFloat, Field(gt=0)]
1972
+ ]
1973
+ ] = None,
1974
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
1975
+ _content_type: Optional[StrictStr] = None,
1976
+ _headers: Optional[Dict[StrictStr, Any]] = None,
1977
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
1978
+ ) -> List[Meter]:
1979
+ """List meters
1980
+
1981
+ List meters.
1982
+
1983
+ :param page: Page index. Default is 1.
1984
+ :type page: int
1985
+ :param page_size: The maximum number of items per page. Default is 100.
1986
+ :type page_size: int
1987
+ :param order: The order direction.
1988
+ :type order: SortOrder
1989
+ :param order_by: The order by field.
1990
+ :type order_by: MeterOrderBy
1991
+ :param include_deleted: Include deleted meters.
1992
+ :type include_deleted: bool
1993
+ :param _request_timeout: timeout setting for this request. If one
1994
+ number provided, it will be total request
1995
+ timeout. It can also be a pair (tuple) of
1996
+ (connection, read) timeouts.
1997
+ :type _request_timeout: int, tuple(int, int), optional
1998
+ :param _request_auth: set to override the auth_settings for an a single
1999
+ request; this effectively ignores the
2000
+ authentication in the spec for a single request.
2001
+ :type _request_auth: dict, optional
2002
+ :param _content_type: force content-type for the request.
2003
+ :type _content_type: str, Optional
2004
+ :param _headers: set to override the headers for a single
2005
+ request; this effectively ignores the headers
2006
+ in the spec for a single request.
2007
+ :type _headers: dict, optional
2008
+ :param _host_index: set to override the host_index for a single
2009
+ request; this effectively ignores the host_index
2010
+ in the spec for a single request.
2011
+ :type _host_index: int, optional
2012
+ :return: Returns the result object.
2013
+ """ # noqa: E501
2014
+
2015
+ _param = self._list_meters_serialize(
2016
+ page=page,
2017
+ page_size=page_size,
2018
+ order=order,
2019
+ order_by=order_by,
2020
+ include_deleted=include_deleted,
2021
+ _request_auth=_request_auth,
2022
+ _content_type=_content_type,
2023
+ _headers=_headers,
2024
+ _host_index=_host_index
2025
+ )
2026
+
2027
+ _response_types_map: Dict[str, Optional[str]] = {
2028
+ '200': "List[Meter]",
2029
+ '400': "UnexpectedProblemResponse",
2030
+ '401': "UnexpectedProblemResponse",
2031
+ '403': "UnexpectedProblemResponse",
2032
+ '412': "UnexpectedProblemResponse",
2033
+ '500': "UnexpectedProblemResponse",
2034
+ '503': "UnexpectedProblemResponse",
2035
+ }
2036
+ response_data = self.api_client.call_api(
2037
+ *_param,
2038
+ _request_timeout=_request_timeout
2039
+ )
2040
+ response_data.read()
2041
+ return self.api_client.response_deserialize(
2042
+ response_data=response_data,
2043
+ response_types_map=_response_types_map,
2044
+ ).data
2045
+
2046
+
2047
+ @validate_call
2048
+ def list_meters_with_http_info(
2049
+ self,
2050
+ page: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Page index. Default is 1.")] = None,
2051
+ page_size: Annotated[Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field(description="The maximum number of items per page. Default is 100.")] = None,
2052
+ order: Annotated[Optional[SortOrder], Field(description="The order direction.")] = None,
2053
+ order_by: Annotated[Optional[MeterOrderBy], Field(description="The order by field.")] = None,
2054
+ include_deleted: Annotated[Optional[StrictBool], Field(description="Include deleted meters.")] = None,
2055
+ _request_timeout: Union[
2056
+ None,
2057
+ Annotated[StrictFloat, Field(gt=0)],
2058
+ Tuple[
2059
+ Annotated[StrictFloat, Field(gt=0)],
2060
+ Annotated[StrictFloat, Field(gt=0)]
2061
+ ]
2062
+ ] = None,
2063
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2064
+ _content_type: Optional[StrictStr] = None,
2065
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2066
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2067
+ ) -> ApiResponse[List[Meter]]:
2068
+ """List meters
2069
+
2070
+ List meters.
2071
+
2072
+ :param page: Page index. Default is 1.
2073
+ :type page: int
2074
+ :param page_size: The maximum number of items per page. Default is 100.
2075
+ :type page_size: int
2076
+ :param order: The order direction.
2077
+ :type order: SortOrder
2078
+ :param order_by: The order by field.
2079
+ :type order_by: MeterOrderBy
2080
+ :param include_deleted: Include deleted meters.
2081
+ :type include_deleted: bool
2082
+ :param _request_timeout: timeout setting for this request. If one
2083
+ number provided, it will be total request
2084
+ timeout. It can also be a pair (tuple) of
2085
+ (connection, read) timeouts.
2086
+ :type _request_timeout: int, tuple(int, int), optional
2087
+ :param _request_auth: set to override the auth_settings for an a single
2088
+ request; this effectively ignores the
2089
+ authentication in the spec for a single request.
2090
+ :type _request_auth: dict, optional
2091
+ :param _content_type: force content-type for the request.
2092
+ :type _content_type: str, Optional
2093
+ :param _headers: set to override the headers for a single
2094
+ request; this effectively ignores the headers
2095
+ in the spec for a single request.
2096
+ :type _headers: dict, optional
2097
+ :param _host_index: set to override the host_index for a single
2098
+ request; this effectively ignores the host_index
2099
+ in the spec for a single request.
2100
+ :type _host_index: int, optional
2101
+ :return: Returns the result object.
2102
+ """ # noqa: E501
2103
+
2104
+ _param = self._list_meters_serialize(
2105
+ page=page,
2106
+ page_size=page_size,
2107
+ order=order,
2108
+ order_by=order_by,
2109
+ include_deleted=include_deleted,
2110
+ _request_auth=_request_auth,
2111
+ _content_type=_content_type,
2112
+ _headers=_headers,
2113
+ _host_index=_host_index
2114
+ )
2115
+
2116
+ _response_types_map: Dict[str, Optional[str]] = {
2117
+ '200': "List[Meter]",
2118
+ '400': "UnexpectedProblemResponse",
2119
+ '401': "UnexpectedProblemResponse",
2120
+ '403': "UnexpectedProblemResponse",
2121
+ '412': "UnexpectedProblemResponse",
2122
+ '500': "UnexpectedProblemResponse",
2123
+ '503': "UnexpectedProblemResponse",
2124
+ }
2125
+ response_data = self.api_client.call_api(
2126
+ *_param,
2127
+ _request_timeout=_request_timeout
2128
+ )
2129
+ response_data.read()
2130
+ return self.api_client.response_deserialize(
2131
+ response_data=response_data,
2132
+ response_types_map=_response_types_map,
2133
+ )
2134
+
2135
+
2136
+ @validate_call
2137
+ def list_meters_without_preload_content(
2138
+ self,
2139
+ page: Annotated[Optional[Annotated[int, Field(strict=True, ge=1)]], Field(description="Page index. Default is 1.")] = None,
2140
+ page_size: Annotated[Optional[Annotated[int, Field(le=1000, strict=True, ge=1)]], Field(description="The maximum number of items per page. Default is 100.")] = None,
2141
+ order: Annotated[Optional[SortOrder], Field(description="The order direction.")] = None,
2142
+ order_by: Annotated[Optional[MeterOrderBy], Field(description="The order by field.")] = None,
2143
+ include_deleted: Annotated[Optional[StrictBool], Field(description="Include deleted meters.")] = None,
2144
+ _request_timeout: Union[
2145
+ None,
2146
+ Annotated[StrictFloat, Field(gt=0)],
2147
+ Tuple[
2148
+ Annotated[StrictFloat, Field(gt=0)],
2149
+ Annotated[StrictFloat, Field(gt=0)]
2150
+ ]
2151
+ ] = None,
2152
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2153
+ _content_type: Optional[StrictStr] = None,
2154
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2155
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2156
+ ) -> RESTResponseType:
2157
+ """List meters
2158
+
2159
+ List meters.
2160
+
2161
+ :param page: Page index. Default is 1.
2162
+ :type page: int
2163
+ :param page_size: The maximum number of items per page. Default is 100.
2164
+ :type page_size: int
2165
+ :param order: The order direction.
2166
+ :type order: SortOrder
2167
+ :param order_by: The order by field.
2168
+ :type order_by: MeterOrderBy
2169
+ :param include_deleted: Include deleted meters.
2170
+ :type include_deleted: bool
2171
+ :param _request_timeout: timeout setting for this request. If one
2172
+ number provided, it will be total request
2173
+ timeout. It can also be a pair (tuple) of
2174
+ (connection, read) timeouts.
2175
+ :type _request_timeout: int, tuple(int, int), optional
2176
+ :param _request_auth: set to override the auth_settings for an a single
2177
+ request; this effectively ignores the
2178
+ authentication in the spec for a single request.
2179
+ :type _request_auth: dict, optional
2180
+ :param _content_type: force content-type for the request.
2181
+ :type _content_type: str, Optional
2182
+ :param _headers: set to override the headers for a single
2183
+ request; this effectively ignores the headers
2184
+ in the spec for a single request.
2185
+ :type _headers: dict, optional
2186
+ :param _host_index: set to override the host_index for a single
2187
+ request; this effectively ignores the host_index
2188
+ in the spec for a single request.
2189
+ :type _host_index: int, optional
2190
+ :return: Returns the result object.
2191
+ """ # noqa: E501
2192
+
2193
+ _param = self._list_meters_serialize(
2194
+ page=page,
2195
+ page_size=page_size,
2196
+ order=order,
2197
+ order_by=order_by,
2198
+ include_deleted=include_deleted,
2199
+ _request_auth=_request_auth,
2200
+ _content_type=_content_type,
2201
+ _headers=_headers,
2202
+ _host_index=_host_index
2203
+ )
2204
+
2205
+ _response_types_map: Dict[str, Optional[str]] = {
2206
+ '200': "List[Meter]",
2207
+ '400': "UnexpectedProblemResponse",
2208
+ '401': "UnexpectedProblemResponse",
2209
+ '403': "UnexpectedProblemResponse",
2210
+ '412': "UnexpectedProblemResponse",
2211
+ '500': "UnexpectedProblemResponse",
2212
+ '503': "UnexpectedProblemResponse",
2213
+ }
2214
+ response_data = self.api_client.call_api(
2215
+ *_param,
2216
+ _request_timeout=_request_timeout
2217
+ )
2218
+ return response_data.response
2219
+
2220
+
2221
+ def _list_meters_serialize(
2222
+ self,
2223
+ page,
2224
+ page_size,
2225
+ order,
2226
+ order_by,
2227
+ include_deleted,
2228
+ _request_auth,
2229
+ _content_type,
2230
+ _headers,
2231
+ _host_index,
2232
+ ) -> RequestSerialized:
2233
+
2234
+ _host = None
2235
+
2236
+ _collection_formats: Dict[str, str] = {
2237
+ }
2238
+
2239
+ _path_params: Dict[str, str] = {}
2240
+ _query_params: List[Tuple[str, str]] = []
2241
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2242
+ _form_params: List[Tuple[str, str]] = []
2243
+ _files: Dict[
2244
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2245
+ ] = {}
2246
+ _body_params: Optional[bytes] = None
2247
+
2248
+ # process the path parameters
2249
+ # process the query parameters
2250
+ if page is not None:
2251
+
2252
+ _query_params.append(('page', page))
2253
+
2254
+ if page_size is not None:
2255
+
2256
+ _query_params.append(('pageSize', page_size))
2257
+
2258
+ if order is not None:
2259
+
2260
+ _query_params.append(('order', order.value))
2261
+
2262
+ if order_by is not None:
2263
+
2264
+ _query_params.append(('orderBy', order_by.value))
2265
+
2266
+ if include_deleted is not None:
2267
+
2268
+ _query_params.append(('includeDeleted', include_deleted))
2269
+
2270
+ # process the header parameters
2271
+ # process the form parameters
2272
+ # process the body parameter
2273
+
2274
+
2275
+ # set the HTTP header `Accept`
2276
+ if 'Accept' not in _header_params:
2277
+ _header_params['Accept'] = self.api_client.select_header_accept(
2278
+ [
2279
+ 'application/json',
2280
+ 'application/problem+json'
2281
+ ]
2282
+ )
2283
+
2284
+
2285
+ # authentication setting
2286
+ _auth_settings: List[str] = [
2287
+ 'CloudTokenAuth'
2288
+ ]
2289
+
2290
+ return self.api_client.param_serialize(
2291
+ method='GET',
2292
+ resource_path='/api/v1/meters',
2293
+ path_params=_path_params,
2294
+ query_params=_query_params,
2295
+ header_params=_header_params,
2296
+ body=_body_params,
2297
+ post_params=_form_params,
2298
+ files=_files,
2299
+ auth_settings=_auth_settings,
2300
+ collection_formats=_collection_formats,
2301
+ _host=_host,
2302
+ _request_auth=_request_auth
2303
+ )
2304
+
2305
+
2306
+
2307
+
2308
+ @validate_call
2309
+ def query_meter(
2310
+ self,
2311
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2312
+ client_id: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True, max_length=36)]], Field(description="Client ID Useful to track progress of a query.")] = None,
2313
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
2314
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
2315
+ window_size: Annotated[Optional[WindowSize], Field(description="If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY")] = None,
2316
+ window_time_zone: Annotated[Optional[StrictStr], Field(description="The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC")] = None,
2317
+ subject: Annotated[Optional[List[StrictStr]], Field(description="Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2")] = None,
2318
+ filter_customer_id: Annotated[Optional[Annotated[List[StrictStr], Field(max_length=100)]], Field(description="Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2")] = None,
2319
+ filter_group_by: Annotated[Optional[Dict[str, Dict[str, StrictStr]]], Field(description="Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo")] = None,
2320
+ advanced_meter_group_by_filters: Annotated[Optional[Dict[str, FilterString]], Field(description="Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.")] = None,
2321
+ group_by: Annotated[Optional[List[StrictStr]], Field(description="If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model")] = None,
2322
+ _request_timeout: Union[
2323
+ None,
2324
+ Annotated[StrictFloat, Field(gt=0)],
2325
+ Tuple[
2326
+ Annotated[StrictFloat, Field(gt=0)],
2327
+ Annotated[StrictFloat, Field(gt=0)]
2328
+ ]
2329
+ ] = None,
2330
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2331
+ _content_type: Optional[StrictStr] = None,
2332
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2333
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2334
+ ) -> MeterQueryResult:
2335
+ """Query meter
2336
+
2337
+ Query meter for usage.
2338
+
2339
+ :param meter_id_or_slug: (required)
2340
+ :type meter_id_or_slug: str
2341
+ :param client_id: Client ID Useful to track progress of a query.
2342
+ :type client_id: str
2343
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z
2344
+ :type var_from: datetime
2345
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
2346
+ :type to: datetime
2347
+ :param window_size: If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY
2348
+ :type window_size: WindowSize
2349
+ :param window_time_zone: The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC
2350
+ :type window_time_zone: str
2351
+ :param subject: Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2
2352
+ :type subject: List[str]
2353
+ :param filter_customer_id: Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2
2354
+ :type filter_customer_id: List[str]
2355
+ :param filter_group_by: Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo
2356
+ :type filter_group_by: Dict[str, str]
2357
+ :param advanced_meter_group_by_filters: Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.
2358
+ :type advanced_meter_group_by_filters: Dict[str, FilterString]
2359
+ :param group_by: If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model
2360
+ :type group_by: List[str]
2361
+ :param _request_timeout: timeout setting for this request. If one
2362
+ number provided, it will be total request
2363
+ timeout. It can also be a pair (tuple) of
2364
+ (connection, read) timeouts.
2365
+ :type _request_timeout: int, tuple(int, int), optional
2366
+ :param _request_auth: set to override the auth_settings for an a single
2367
+ request; this effectively ignores the
2368
+ authentication in the spec for a single request.
2369
+ :type _request_auth: dict, optional
2370
+ :param _content_type: force content-type for the request.
2371
+ :type _content_type: str, Optional
2372
+ :param _headers: set to override the headers for a single
2373
+ request; this effectively ignores the headers
2374
+ in the spec for a single request.
2375
+ :type _headers: dict, optional
2376
+ :param _host_index: set to override the host_index for a single
2377
+ request; this effectively ignores the host_index
2378
+ in the spec for a single request.
2379
+ :type _host_index: int, optional
2380
+ :return: Returns the result object.
2381
+ """ # noqa: E501
2382
+
2383
+ _param = self._query_meter_serialize(
2384
+ meter_id_or_slug=meter_id_or_slug,
2385
+ client_id=client_id,
2386
+ var_from=var_from,
2387
+ to=to,
2388
+ window_size=window_size,
2389
+ window_time_zone=window_time_zone,
2390
+ subject=subject,
2391
+ filter_customer_id=filter_customer_id,
2392
+ filter_group_by=filter_group_by,
2393
+ advanced_meter_group_by_filters=advanced_meter_group_by_filters,
2394
+ group_by=group_by,
2395
+ _request_auth=_request_auth,
2396
+ _content_type=_content_type,
2397
+ _headers=_headers,
2398
+ _host_index=_host_index
2399
+ )
2400
+
2401
+ _response_types_map: Dict[str, Optional[str]] = {
2402
+ '200': "MeterQueryResult",
2403
+ '400': "UnexpectedProblemResponse",
2404
+ '401': "UnexpectedProblemResponse",
2405
+ '403': "UnexpectedProblemResponse",
2406
+ '404': "UnexpectedProblemResponse",
2407
+ '412': "UnexpectedProblemResponse",
2408
+ '500': "UnexpectedProblemResponse",
2409
+ '503': "UnexpectedProblemResponse",
2410
+ }
2411
+ response_data = self.api_client.call_api(
2412
+ *_param,
2413
+ _request_timeout=_request_timeout
2414
+ )
2415
+ response_data.read()
2416
+ return self.api_client.response_deserialize(
2417
+ response_data=response_data,
2418
+ response_types_map=_response_types_map,
2419
+ ).data
2420
+
2421
+
2422
+ @validate_call
2423
+ def query_meter_with_http_info(
2424
+ self,
2425
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2426
+ client_id: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True, max_length=36)]], Field(description="Client ID Useful to track progress of a query.")] = None,
2427
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
2428
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
2429
+ window_size: Annotated[Optional[WindowSize], Field(description="If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY")] = None,
2430
+ window_time_zone: Annotated[Optional[StrictStr], Field(description="The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC")] = None,
2431
+ subject: Annotated[Optional[List[StrictStr]], Field(description="Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2")] = None,
2432
+ filter_customer_id: Annotated[Optional[Annotated[List[StrictStr], Field(max_length=100)]], Field(description="Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2")] = None,
2433
+ filter_group_by: Annotated[Optional[Dict[str, Dict[str, StrictStr]]], Field(description="Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo")] = None,
2434
+ advanced_meter_group_by_filters: Annotated[Optional[Dict[str, FilterString]], Field(description="Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.")] = None,
2435
+ group_by: Annotated[Optional[List[StrictStr]], Field(description="If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model")] = None,
2436
+ _request_timeout: Union[
2437
+ None,
2438
+ Annotated[StrictFloat, Field(gt=0)],
2439
+ Tuple[
2440
+ Annotated[StrictFloat, Field(gt=0)],
2441
+ Annotated[StrictFloat, Field(gt=0)]
2442
+ ]
2443
+ ] = None,
2444
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2445
+ _content_type: Optional[StrictStr] = None,
2446
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2447
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2448
+ ) -> ApiResponse[MeterQueryResult]:
2449
+ """Query meter
2450
+
2451
+ Query meter for usage.
2452
+
2453
+ :param meter_id_or_slug: (required)
2454
+ :type meter_id_or_slug: str
2455
+ :param client_id: Client ID Useful to track progress of a query.
2456
+ :type client_id: str
2457
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z
2458
+ :type var_from: datetime
2459
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
2460
+ :type to: datetime
2461
+ :param window_size: If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY
2462
+ :type window_size: WindowSize
2463
+ :param window_time_zone: The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC
2464
+ :type window_time_zone: str
2465
+ :param subject: Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2
2466
+ :type subject: List[str]
2467
+ :param filter_customer_id: Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2
2468
+ :type filter_customer_id: List[str]
2469
+ :param filter_group_by: Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo
2470
+ :type filter_group_by: Dict[str, str]
2471
+ :param advanced_meter_group_by_filters: Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.
2472
+ :type advanced_meter_group_by_filters: Dict[str, FilterString]
2473
+ :param group_by: If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model
2474
+ :type group_by: List[str]
2475
+ :param _request_timeout: timeout setting for this request. If one
2476
+ number provided, it will be total request
2477
+ timeout. It can also be a pair (tuple) of
2478
+ (connection, read) timeouts.
2479
+ :type _request_timeout: int, tuple(int, int), optional
2480
+ :param _request_auth: set to override the auth_settings for an a single
2481
+ request; this effectively ignores the
2482
+ authentication in the spec for a single request.
2483
+ :type _request_auth: dict, optional
2484
+ :param _content_type: force content-type for the request.
2485
+ :type _content_type: str, Optional
2486
+ :param _headers: set to override the headers for a single
2487
+ request; this effectively ignores the headers
2488
+ in the spec for a single request.
2489
+ :type _headers: dict, optional
2490
+ :param _host_index: set to override the host_index for a single
2491
+ request; this effectively ignores the host_index
2492
+ in the spec for a single request.
2493
+ :type _host_index: int, optional
2494
+ :return: Returns the result object.
2495
+ """ # noqa: E501
2496
+
2497
+ _param = self._query_meter_serialize(
2498
+ meter_id_or_slug=meter_id_or_slug,
2499
+ client_id=client_id,
2500
+ var_from=var_from,
2501
+ to=to,
2502
+ window_size=window_size,
2503
+ window_time_zone=window_time_zone,
2504
+ subject=subject,
2505
+ filter_customer_id=filter_customer_id,
2506
+ filter_group_by=filter_group_by,
2507
+ advanced_meter_group_by_filters=advanced_meter_group_by_filters,
2508
+ group_by=group_by,
2509
+ _request_auth=_request_auth,
2510
+ _content_type=_content_type,
2511
+ _headers=_headers,
2512
+ _host_index=_host_index
2513
+ )
2514
+
2515
+ _response_types_map: Dict[str, Optional[str]] = {
2516
+ '200': "MeterQueryResult",
2517
+ '400': "UnexpectedProblemResponse",
2518
+ '401': "UnexpectedProblemResponse",
2519
+ '403': "UnexpectedProblemResponse",
2520
+ '404': "UnexpectedProblemResponse",
2521
+ '412': "UnexpectedProblemResponse",
2522
+ '500': "UnexpectedProblemResponse",
2523
+ '503': "UnexpectedProblemResponse",
2524
+ }
2525
+ response_data = self.api_client.call_api(
2526
+ *_param,
2527
+ _request_timeout=_request_timeout
2528
+ )
2529
+ response_data.read()
2530
+ return self.api_client.response_deserialize(
2531
+ response_data=response_data,
2532
+ response_types_map=_response_types_map,
2533
+ )
2534
+
2535
+
2536
+ @validate_call
2537
+ def query_meter_without_preload_content(
2538
+ self,
2539
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2540
+ client_id: Annotated[Optional[Annotated[str, Field(min_length=1, strict=True, max_length=36)]], Field(description="Client ID Useful to track progress of a query.")] = None,
2541
+ var_from: Annotated[Optional[datetime], Field(description="Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z")] = None,
2542
+ to: Annotated[Optional[datetime], Field(description="End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z")] = None,
2543
+ window_size: Annotated[Optional[WindowSize], Field(description="If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY")] = None,
2544
+ window_time_zone: Annotated[Optional[StrictStr], Field(description="The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC")] = None,
2545
+ subject: Annotated[Optional[List[StrictStr]], Field(description="Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2")] = None,
2546
+ filter_customer_id: Annotated[Optional[Annotated[List[StrictStr], Field(max_length=100)]], Field(description="Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2")] = None,
2547
+ filter_group_by: Annotated[Optional[Dict[str, Dict[str, StrictStr]]], Field(description="Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo")] = None,
2548
+ advanced_meter_group_by_filters: Annotated[Optional[Dict[str, FilterString]], Field(description="Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.")] = None,
2549
+ group_by: Annotated[Optional[List[StrictStr]], Field(description="If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model")] = None,
2550
+ _request_timeout: Union[
2551
+ None,
2552
+ Annotated[StrictFloat, Field(gt=0)],
2553
+ Tuple[
2554
+ Annotated[StrictFloat, Field(gt=0)],
2555
+ Annotated[StrictFloat, Field(gt=0)]
2556
+ ]
2557
+ ] = None,
2558
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2559
+ _content_type: Optional[StrictStr] = None,
2560
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2561
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2562
+ ) -> RESTResponseType:
2563
+ """Query meter
2564
+
2565
+ Query meter for usage.
2566
+
2567
+ :param meter_id_or_slug: (required)
2568
+ :type meter_id_or_slug: str
2569
+ :param client_id: Client ID Useful to track progress of a query.
2570
+ :type client_id: str
2571
+ :param var_from: Start date-time in RFC 3339 format. Inclusive. For example: ?from=2025-01-01T00%3A00%3A00.000Z
2572
+ :type var_from: datetime
2573
+ :param to: End date-time in RFC 3339 format. Inclusive. For example: ?to=2025-02-01T00%3A00%3A00.000Z
2574
+ :type to: datetime
2575
+ :param window_size: If not specified, a single usage aggregate will be returned for the entirety of the specified period for each subject and group. For example: ?windowSize=DAY
2576
+ :type window_size: WindowSize
2577
+ :param window_time_zone: The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). If not specified, the UTC timezone will be used. For example: ?windowTimeZone=UTC
2578
+ :type window_time_zone: str
2579
+ :param subject: Filtering by multiple subjects. For example: ?subject=subject-1&subject=subject-2
2580
+ :type subject: List[str]
2581
+ :param filter_customer_id: Filtering by multiple customers. For example: ?filterCustomerId=customer-1&filterCustomerId=customer-2
2582
+ :type filter_customer_id: List[str]
2583
+ :param filter_group_by: Simple filter for group bys with exact match. For example: ?filterGroupBy[vendor]=openai&filterGroupBy[model]=gpt-4-turbo
2584
+ :type filter_group_by: Dict[str, str]
2585
+ :param advanced_meter_group_by_filters: Optional advanced meter group by filters. You can use this to filter for values of the meter groupBy fields.
2586
+ :type advanced_meter_group_by_filters: Dict[str, FilterString]
2587
+ :param group_by: If not specified a single aggregate will be returned for each subject and time window. `subject` is a reserved group by value. For example: ?groupBy=subject&groupBy=model
2588
+ :type group_by: List[str]
2589
+ :param _request_timeout: timeout setting for this request. If one
2590
+ number provided, it will be total request
2591
+ timeout. It can also be a pair (tuple) of
2592
+ (connection, read) timeouts.
2593
+ :type _request_timeout: int, tuple(int, int), optional
2594
+ :param _request_auth: set to override the auth_settings for an a single
2595
+ request; this effectively ignores the
2596
+ authentication in the spec for a single request.
2597
+ :type _request_auth: dict, optional
2598
+ :param _content_type: force content-type for the request.
2599
+ :type _content_type: str, Optional
2600
+ :param _headers: set to override the headers for a single
2601
+ request; this effectively ignores the headers
2602
+ in the spec for a single request.
2603
+ :type _headers: dict, optional
2604
+ :param _host_index: set to override the host_index for a single
2605
+ request; this effectively ignores the host_index
2606
+ in the spec for a single request.
2607
+ :type _host_index: int, optional
2608
+ :return: Returns the result object.
2609
+ """ # noqa: E501
2610
+
2611
+ _param = self._query_meter_serialize(
2612
+ meter_id_or_slug=meter_id_or_slug,
2613
+ client_id=client_id,
2614
+ var_from=var_from,
2615
+ to=to,
2616
+ window_size=window_size,
2617
+ window_time_zone=window_time_zone,
2618
+ subject=subject,
2619
+ filter_customer_id=filter_customer_id,
2620
+ filter_group_by=filter_group_by,
2621
+ advanced_meter_group_by_filters=advanced_meter_group_by_filters,
2622
+ group_by=group_by,
2623
+ _request_auth=_request_auth,
2624
+ _content_type=_content_type,
2625
+ _headers=_headers,
2626
+ _host_index=_host_index
2627
+ )
2628
+
2629
+ _response_types_map: Dict[str, Optional[str]] = {
2630
+ '200': "MeterQueryResult",
2631
+ '400': "UnexpectedProblemResponse",
2632
+ '401': "UnexpectedProblemResponse",
2633
+ '403': "UnexpectedProblemResponse",
2634
+ '404': "UnexpectedProblemResponse",
2635
+ '412': "UnexpectedProblemResponse",
2636
+ '500': "UnexpectedProblemResponse",
2637
+ '503': "UnexpectedProblemResponse",
2638
+ }
2639
+ response_data = self.api_client.call_api(
2640
+ *_param,
2641
+ _request_timeout=_request_timeout
2642
+ )
2643
+ return response_data.response
2644
+
2645
+
2646
+ def _query_meter_serialize(
2647
+ self,
2648
+ meter_id_or_slug,
2649
+ client_id,
2650
+ var_from,
2651
+ to,
2652
+ window_size,
2653
+ window_time_zone,
2654
+ subject,
2655
+ filter_customer_id,
2656
+ filter_group_by,
2657
+ advanced_meter_group_by_filters,
2658
+ group_by,
2659
+ _request_auth,
2660
+ _content_type,
2661
+ _headers,
2662
+ _host_index,
2663
+ ) -> RequestSerialized:
2664
+
2665
+ _host = None
2666
+
2667
+ _collection_formats: Dict[str, str] = {
2668
+ 'subject': 'multi',
2669
+ 'filterCustomerId': 'multi',
2670
+ 'groupBy': 'multi',
2671
+ }
2672
+
2673
+ _path_params: Dict[str, str] = {}
2674
+ _query_params: List[Tuple[str, str]] = []
2675
+ _header_params: Dict[str, Optional[str]] = _headers or {}
2676
+ _form_params: List[Tuple[str, str]] = []
2677
+ _files: Dict[
2678
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
2679
+ ] = {}
2680
+ _body_params: Optional[bytes] = None
2681
+
2682
+ # process the path parameters
2683
+ if meter_id_or_slug is not None:
2684
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
2685
+ # process the query parameters
2686
+ if client_id is not None:
2687
+
2688
+ _query_params.append(('clientId', client_id))
2689
+
2690
+ if var_from is not None:
2691
+ if isinstance(var_from, datetime):
2692
+ _query_params.append(
2693
+ (
2694
+ 'from',
2695
+ var_from.strftime(
2696
+ self.api_client.configuration.datetime_format
2697
+ )
2698
+ )
2699
+ )
2700
+ else:
2701
+ _query_params.append(('from', var_from))
2702
+
2703
+ if to is not None:
2704
+ if isinstance(to, datetime):
2705
+ _query_params.append(
2706
+ (
2707
+ 'to',
2708
+ to.strftime(
2709
+ self.api_client.configuration.datetime_format
2710
+ )
2711
+ )
2712
+ )
2713
+ else:
2714
+ _query_params.append(('to', to))
2715
+
2716
+ if window_size is not None:
2717
+
2718
+ _query_params.append(('windowSize', window_size.value))
2719
+
2720
+ if window_time_zone is not None:
2721
+
2722
+ _query_params.append(('windowTimeZone', window_time_zone))
2723
+
2724
+ if subject is not None:
2725
+
2726
+ _query_params.append(('subject', subject))
2727
+
2728
+ if filter_customer_id is not None:
2729
+
2730
+ _query_params.append(('filterCustomerId', filter_customer_id))
2731
+
2732
+ if filter_group_by is not None:
2733
+
2734
+ _query_params.append(('filterGroupBy', filter_group_by))
2735
+
2736
+ if advanced_meter_group_by_filters is not None:
2737
+
2738
+ _query_params.append(('advancedMeterGroupByFilters', advanced_meter_group_by_filters))
2739
+
2740
+ if group_by is not None:
2741
+
2742
+ _query_params.append(('groupBy', group_by))
2743
+
2744
+ # process the header parameters
2745
+ # process the form parameters
2746
+ # process the body parameter
2747
+
2748
+
2749
+ # set the HTTP header `Accept`
2750
+ if 'Accept' not in _header_params:
2751
+ _header_params['Accept'] = self.api_client.select_header_accept(
2752
+ [
2753
+ 'application/json',
2754
+ 'text/csv',
2755
+ 'application/problem+json'
2756
+ ]
2757
+ )
2758
+
2759
+
2760
+ # authentication setting
2761
+ _auth_settings: List[str] = [
2762
+ 'CloudTokenAuth'
2763
+ ]
2764
+
2765
+ return self.api_client.param_serialize(
2766
+ method='GET',
2767
+ resource_path='/api/v1/meters/{meterIdOrSlug}/query',
2768
+ path_params=_path_params,
2769
+ query_params=_query_params,
2770
+ header_params=_header_params,
2771
+ body=_body_params,
2772
+ post_params=_form_params,
2773
+ files=_files,
2774
+ auth_settings=_auth_settings,
2775
+ collection_formats=_collection_formats,
2776
+ _host=_host,
2777
+ _request_auth=_request_auth
2778
+ )
2779
+
2780
+
2781
+
2782
+
2783
+ @validate_call
2784
+ def query_meter_post(
2785
+ self,
2786
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2787
+ meter_query_request: MeterQueryRequest,
2788
+ _request_timeout: Union[
2789
+ None,
2790
+ Annotated[StrictFloat, Field(gt=0)],
2791
+ Tuple[
2792
+ Annotated[StrictFloat, Field(gt=0)],
2793
+ Annotated[StrictFloat, Field(gt=0)]
2794
+ ]
2795
+ ] = None,
2796
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2797
+ _content_type: Optional[StrictStr] = None,
2798
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2799
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2800
+ ) -> MeterQueryResult:
2801
+ """Query meter
2802
+
2803
+
2804
+ :param meter_id_or_slug: (required)
2805
+ :type meter_id_or_slug: str
2806
+ :param meter_query_request: (required)
2807
+ :type meter_query_request: MeterQueryRequest
2808
+ :param _request_timeout: timeout setting for this request. If one
2809
+ number provided, it will be total request
2810
+ timeout. It can also be a pair (tuple) of
2811
+ (connection, read) timeouts.
2812
+ :type _request_timeout: int, tuple(int, int), optional
2813
+ :param _request_auth: set to override the auth_settings for an a single
2814
+ request; this effectively ignores the
2815
+ authentication in the spec for a single request.
2816
+ :type _request_auth: dict, optional
2817
+ :param _content_type: force content-type for the request.
2818
+ :type _content_type: str, Optional
2819
+ :param _headers: set to override the headers for a single
2820
+ request; this effectively ignores the headers
2821
+ in the spec for a single request.
2822
+ :type _headers: dict, optional
2823
+ :param _host_index: set to override the host_index for a single
2824
+ request; this effectively ignores the host_index
2825
+ in the spec for a single request.
2826
+ :type _host_index: int, optional
2827
+ :return: Returns the result object.
2828
+ """ # noqa: E501
2829
+
2830
+ _param = self._query_meter_post_serialize(
2831
+ meter_id_or_slug=meter_id_or_slug,
2832
+ meter_query_request=meter_query_request,
2833
+ _request_auth=_request_auth,
2834
+ _content_type=_content_type,
2835
+ _headers=_headers,
2836
+ _host_index=_host_index
2837
+ )
2838
+
2839
+ _response_types_map: Dict[str, Optional[str]] = {
2840
+ '200': "MeterQueryResult",
2841
+ '400': "UnexpectedProblemResponse",
2842
+ '401': "UnexpectedProblemResponse",
2843
+ '403': "UnexpectedProblemResponse",
2844
+ '404': "UnexpectedProblemResponse",
2845
+ '412': "UnexpectedProblemResponse",
2846
+ '500': "UnexpectedProblemResponse",
2847
+ '503': "UnexpectedProblemResponse",
2848
+ }
2849
+ response_data = self.api_client.call_api(
2850
+ *_param,
2851
+ _request_timeout=_request_timeout
2852
+ )
2853
+ response_data.read()
2854
+ return self.api_client.response_deserialize(
2855
+ response_data=response_data,
2856
+ response_types_map=_response_types_map,
2857
+ ).data
2858
+
2859
+
2860
+ @validate_call
2861
+ def query_meter_post_with_http_info(
2862
+ self,
2863
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2864
+ meter_query_request: MeterQueryRequest,
2865
+ _request_timeout: Union[
2866
+ None,
2867
+ Annotated[StrictFloat, Field(gt=0)],
2868
+ Tuple[
2869
+ Annotated[StrictFloat, Field(gt=0)],
2870
+ Annotated[StrictFloat, Field(gt=0)]
2871
+ ]
2872
+ ] = None,
2873
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2874
+ _content_type: Optional[StrictStr] = None,
2875
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2876
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2877
+ ) -> ApiResponse[MeterQueryResult]:
2878
+ """Query meter
2879
+
2880
+
2881
+ :param meter_id_or_slug: (required)
2882
+ :type meter_id_or_slug: str
2883
+ :param meter_query_request: (required)
2884
+ :type meter_query_request: MeterQueryRequest
2885
+ :param _request_timeout: timeout setting for this request. If one
2886
+ number provided, it will be total request
2887
+ timeout. It can also be a pair (tuple) of
2888
+ (connection, read) timeouts.
2889
+ :type _request_timeout: int, tuple(int, int), optional
2890
+ :param _request_auth: set to override the auth_settings for an a single
2891
+ request; this effectively ignores the
2892
+ authentication in the spec for a single request.
2893
+ :type _request_auth: dict, optional
2894
+ :param _content_type: force content-type for the request.
2895
+ :type _content_type: str, Optional
2896
+ :param _headers: set to override the headers for a single
2897
+ request; this effectively ignores the headers
2898
+ in the spec for a single request.
2899
+ :type _headers: dict, optional
2900
+ :param _host_index: set to override the host_index for a single
2901
+ request; this effectively ignores the host_index
2902
+ in the spec for a single request.
2903
+ :type _host_index: int, optional
2904
+ :return: Returns the result object.
2905
+ """ # noqa: E501
2906
+
2907
+ _param = self._query_meter_post_serialize(
2908
+ meter_id_or_slug=meter_id_or_slug,
2909
+ meter_query_request=meter_query_request,
2910
+ _request_auth=_request_auth,
2911
+ _content_type=_content_type,
2912
+ _headers=_headers,
2913
+ _host_index=_host_index
2914
+ )
2915
+
2916
+ _response_types_map: Dict[str, Optional[str]] = {
2917
+ '200': "MeterQueryResult",
2918
+ '400': "UnexpectedProblemResponse",
2919
+ '401': "UnexpectedProblemResponse",
2920
+ '403': "UnexpectedProblemResponse",
2921
+ '404': "UnexpectedProblemResponse",
2922
+ '412': "UnexpectedProblemResponse",
2923
+ '500': "UnexpectedProblemResponse",
2924
+ '503': "UnexpectedProblemResponse",
2925
+ }
2926
+ response_data = self.api_client.call_api(
2927
+ *_param,
2928
+ _request_timeout=_request_timeout
2929
+ )
2930
+ response_data.read()
2931
+ return self.api_client.response_deserialize(
2932
+ response_data=response_data,
2933
+ response_types_map=_response_types_map,
2934
+ )
2935
+
2936
+
2937
+ @validate_call
2938
+ def query_meter_post_without_preload_content(
2939
+ self,
2940
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
2941
+ meter_query_request: MeterQueryRequest,
2942
+ _request_timeout: Union[
2943
+ None,
2944
+ Annotated[StrictFloat, Field(gt=0)],
2945
+ Tuple[
2946
+ Annotated[StrictFloat, Field(gt=0)],
2947
+ Annotated[StrictFloat, Field(gt=0)]
2948
+ ]
2949
+ ] = None,
2950
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
2951
+ _content_type: Optional[StrictStr] = None,
2952
+ _headers: Optional[Dict[StrictStr, Any]] = None,
2953
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
2954
+ ) -> RESTResponseType:
2955
+ """Query meter
2956
+
2957
+
2958
+ :param meter_id_or_slug: (required)
2959
+ :type meter_id_or_slug: str
2960
+ :param meter_query_request: (required)
2961
+ :type meter_query_request: MeterQueryRequest
2962
+ :param _request_timeout: timeout setting for this request. If one
2963
+ number provided, it will be total request
2964
+ timeout. It can also be a pair (tuple) of
2965
+ (connection, read) timeouts.
2966
+ :type _request_timeout: int, tuple(int, int), optional
2967
+ :param _request_auth: set to override the auth_settings for an a single
2968
+ request; this effectively ignores the
2969
+ authentication in the spec for a single request.
2970
+ :type _request_auth: dict, optional
2971
+ :param _content_type: force content-type for the request.
2972
+ :type _content_type: str, Optional
2973
+ :param _headers: set to override the headers for a single
2974
+ request; this effectively ignores the headers
2975
+ in the spec for a single request.
2976
+ :type _headers: dict, optional
2977
+ :param _host_index: set to override the host_index for a single
2978
+ request; this effectively ignores the host_index
2979
+ in the spec for a single request.
2980
+ :type _host_index: int, optional
2981
+ :return: Returns the result object.
2982
+ """ # noqa: E501
2983
+
2984
+ _param = self._query_meter_post_serialize(
2985
+ meter_id_or_slug=meter_id_or_slug,
2986
+ meter_query_request=meter_query_request,
2987
+ _request_auth=_request_auth,
2988
+ _content_type=_content_type,
2989
+ _headers=_headers,
2990
+ _host_index=_host_index
2991
+ )
2992
+
2993
+ _response_types_map: Dict[str, Optional[str]] = {
2994
+ '200': "MeterQueryResult",
2995
+ '400': "UnexpectedProblemResponse",
2996
+ '401': "UnexpectedProblemResponse",
2997
+ '403': "UnexpectedProblemResponse",
2998
+ '404': "UnexpectedProblemResponse",
2999
+ '412': "UnexpectedProblemResponse",
3000
+ '500': "UnexpectedProblemResponse",
3001
+ '503': "UnexpectedProblemResponse",
3002
+ }
3003
+ response_data = self.api_client.call_api(
3004
+ *_param,
3005
+ _request_timeout=_request_timeout
3006
+ )
3007
+ return response_data.response
3008
+
3009
+
3010
+ def _query_meter_post_serialize(
3011
+ self,
3012
+ meter_id_or_slug,
3013
+ meter_query_request,
3014
+ _request_auth,
3015
+ _content_type,
3016
+ _headers,
3017
+ _host_index,
3018
+ ) -> RequestSerialized:
3019
+
3020
+ _host = None
3021
+
3022
+ _collection_formats: Dict[str, str] = {
3023
+ }
3024
+
3025
+ _path_params: Dict[str, str] = {}
3026
+ _query_params: List[Tuple[str, str]] = []
3027
+ _header_params: Dict[str, Optional[str]] = _headers or {}
3028
+ _form_params: List[Tuple[str, str]] = []
3029
+ _files: Dict[
3030
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
3031
+ ] = {}
3032
+ _body_params: Optional[bytes] = None
3033
+
3034
+ # process the path parameters
3035
+ if meter_id_or_slug is not None:
3036
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
3037
+ # process the query parameters
3038
+ # process the header parameters
3039
+ # process the form parameters
3040
+ # process the body parameter
3041
+ if meter_query_request is not None:
3042
+ _body_params = meter_query_request
3043
+
3044
+
3045
+ # set the HTTP header `Accept`
3046
+ if 'Accept' not in _header_params:
3047
+ _header_params['Accept'] = self.api_client.select_header_accept(
3048
+ [
3049
+ 'application/json',
3050
+ 'application/problem+json'
3051
+ ]
3052
+ )
3053
+
3054
+ # set the HTTP header `Content-Type`
3055
+ if _content_type:
3056
+ _header_params['Content-Type'] = _content_type
3057
+ else:
3058
+ _default_content_type = (
3059
+ self.api_client.select_header_content_type(
3060
+ [
3061
+ 'application/json'
3062
+ ]
3063
+ )
3064
+ )
3065
+ if _default_content_type is not None:
3066
+ _header_params['Content-Type'] = _default_content_type
3067
+
3068
+ # authentication setting
3069
+ _auth_settings: List[str] = [
3070
+ 'CloudTokenAuth'
3071
+ ]
3072
+
3073
+ return self.api_client.param_serialize(
3074
+ method='POST',
3075
+ resource_path='/api/v1/meters/{meterIdOrSlug}/query',
3076
+ path_params=_path_params,
3077
+ query_params=_query_params,
3078
+ header_params=_header_params,
3079
+ body=_body_params,
3080
+ post_params=_form_params,
3081
+ files=_files,
3082
+ auth_settings=_auth_settings,
3083
+ collection_formats=_collection_formats,
3084
+ _host=_host,
3085
+ _request_auth=_request_auth
3086
+ )
3087
+
3088
+
3089
+
3090
+
3091
+ @validate_call
3092
+ def test_meter_event(
3093
+ self,
3094
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3095
+ meter_test_event_request: MeterTestEventRequest,
3096
+ _request_timeout: Union[
3097
+ None,
3098
+ Annotated[StrictFloat, Field(gt=0)],
3099
+ Tuple[
3100
+ Annotated[StrictFloat, Field(gt=0)],
3101
+ Annotated[StrictFloat, Field(gt=0)]
3102
+ ]
3103
+ ] = None,
3104
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3105
+ _content_type: Optional[StrictStr] = None,
3106
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3107
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3108
+ ) -> MeterTestEventResponse:
3109
+ """Validate a sample event payload against the meter
3110
+
3111
+ Validate a sample event payload against the meter.
3112
+
3113
+ :param meter_id_or_slug: (required)
3114
+ :type meter_id_or_slug: str
3115
+ :param meter_test_event_request: (required)
3116
+ :type meter_test_event_request: MeterTestEventRequest
3117
+ :param _request_timeout: timeout setting for this request. If one
3118
+ number provided, it will be total request
3119
+ timeout. It can also be a pair (tuple) of
3120
+ (connection, read) timeouts.
3121
+ :type _request_timeout: int, tuple(int, int), optional
3122
+ :param _request_auth: set to override the auth_settings for an a single
3123
+ request; this effectively ignores the
3124
+ authentication in the spec for a single request.
3125
+ :type _request_auth: dict, optional
3126
+ :param _content_type: force content-type for the request.
3127
+ :type _content_type: str, Optional
3128
+ :param _headers: set to override the headers for a single
3129
+ request; this effectively ignores the headers
3130
+ in the spec for a single request.
3131
+ :type _headers: dict, optional
3132
+ :param _host_index: set to override the host_index for a single
3133
+ request; this effectively ignores the host_index
3134
+ in the spec for a single request.
3135
+ :type _host_index: int, optional
3136
+ :return: Returns the result object.
3137
+ """ # noqa: E501
3138
+
3139
+ _param = self._test_meter_event_serialize(
3140
+ meter_id_or_slug=meter_id_or_slug,
3141
+ meter_test_event_request=meter_test_event_request,
3142
+ _request_auth=_request_auth,
3143
+ _content_type=_content_type,
3144
+ _headers=_headers,
3145
+ _host_index=_host_index
3146
+ )
3147
+
3148
+ _response_types_map: Dict[str, Optional[str]] = {
3149
+ '200': "MeterTestEventResponse",
3150
+ '400': "UnexpectedProblemResponse",
3151
+ '401': "UnexpectedProblemResponse",
3152
+ '403': "UnexpectedProblemResponse",
3153
+ '404': "UnexpectedProblemResponse",
3154
+ '412': "UnexpectedProblemResponse",
3155
+ '500': "UnexpectedProblemResponse",
3156
+ '503': "UnexpectedProblemResponse",
3157
+ }
3158
+ response_data = self.api_client.call_api(
3159
+ *_param,
3160
+ _request_timeout=_request_timeout
3161
+ )
3162
+ response_data.read()
3163
+ return self.api_client.response_deserialize(
3164
+ response_data=response_data,
3165
+ response_types_map=_response_types_map,
3166
+ ).data
3167
+
3168
+
3169
+ @validate_call
3170
+ def test_meter_event_with_http_info(
3171
+ self,
3172
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3173
+ meter_test_event_request: MeterTestEventRequest,
3174
+ _request_timeout: Union[
3175
+ None,
3176
+ Annotated[StrictFloat, Field(gt=0)],
3177
+ Tuple[
3178
+ Annotated[StrictFloat, Field(gt=0)],
3179
+ Annotated[StrictFloat, Field(gt=0)]
3180
+ ]
3181
+ ] = None,
3182
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3183
+ _content_type: Optional[StrictStr] = None,
3184
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3185
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3186
+ ) -> ApiResponse[MeterTestEventResponse]:
3187
+ """Validate a sample event payload against the meter
3188
+
3189
+ Validate a sample event payload against the meter.
3190
+
3191
+ :param meter_id_or_slug: (required)
3192
+ :type meter_id_or_slug: str
3193
+ :param meter_test_event_request: (required)
3194
+ :type meter_test_event_request: MeterTestEventRequest
3195
+ :param _request_timeout: timeout setting for this request. If one
3196
+ number provided, it will be total request
3197
+ timeout. It can also be a pair (tuple) of
3198
+ (connection, read) timeouts.
3199
+ :type _request_timeout: int, tuple(int, int), optional
3200
+ :param _request_auth: set to override the auth_settings for an a single
3201
+ request; this effectively ignores the
3202
+ authentication in the spec for a single request.
3203
+ :type _request_auth: dict, optional
3204
+ :param _content_type: force content-type for the request.
3205
+ :type _content_type: str, Optional
3206
+ :param _headers: set to override the headers for a single
3207
+ request; this effectively ignores the headers
3208
+ in the spec for a single request.
3209
+ :type _headers: dict, optional
3210
+ :param _host_index: set to override the host_index for a single
3211
+ request; this effectively ignores the host_index
3212
+ in the spec for a single request.
3213
+ :type _host_index: int, optional
3214
+ :return: Returns the result object.
3215
+ """ # noqa: E501
3216
+
3217
+ _param = self._test_meter_event_serialize(
3218
+ meter_id_or_slug=meter_id_or_slug,
3219
+ meter_test_event_request=meter_test_event_request,
3220
+ _request_auth=_request_auth,
3221
+ _content_type=_content_type,
3222
+ _headers=_headers,
3223
+ _host_index=_host_index
3224
+ )
3225
+
3226
+ _response_types_map: Dict[str, Optional[str]] = {
3227
+ '200': "MeterTestEventResponse",
3228
+ '400': "UnexpectedProblemResponse",
3229
+ '401': "UnexpectedProblemResponse",
3230
+ '403': "UnexpectedProblemResponse",
3231
+ '404': "UnexpectedProblemResponse",
3232
+ '412': "UnexpectedProblemResponse",
3233
+ '500': "UnexpectedProblemResponse",
3234
+ '503': "UnexpectedProblemResponse",
3235
+ }
3236
+ response_data = self.api_client.call_api(
3237
+ *_param,
3238
+ _request_timeout=_request_timeout
3239
+ )
3240
+ response_data.read()
3241
+ return self.api_client.response_deserialize(
3242
+ response_data=response_data,
3243
+ response_types_map=_response_types_map,
3244
+ )
3245
+
3246
+
3247
+ @validate_call
3248
+ def test_meter_event_without_preload_content(
3249
+ self,
3250
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3251
+ meter_test_event_request: MeterTestEventRequest,
3252
+ _request_timeout: Union[
3253
+ None,
3254
+ Annotated[StrictFloat, Field(gt=0)],
3255
+ Tuple[
3256
+ Annotated[StrictFloat, Field(gt=0)],
3257
+ Annotated[StrictFloat, Field(gt=0)]
3258
+ ]
3259
+ ] = None,
3260
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3261
+ _content_type: Optional[StrictStr] = None,
3262
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3263
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3264
+ ) -> RESTResponseType:
3265
+ """Validate a sample event payload against the meter
3266
+
3267
+ Validate a sample event payload against the meter.
3268
+
3269
+ :param meter_id_or_slug: (required)
3270
+ :type meter_id_or_slug: str
3271
+ :param meter_test_event_request: (required)
3272
+ :type meter_test_event_request: MeterTestEventRequest
3273
+ :param _request_timeout: timeout setting for this request. If one
3274
+ number provided, it will be total request
3275
+ timeout. It can also be a pair (tuple) of
3276
+ (connection, read) timeouts.
3277
+ :type _request_timeout: int, tuple(int, int), optional
3278
+ :param _request_auth: set to override the auth_settings for an a single
3279
+ request; this effectively ignores the
3280
+ authentication in the spec for a single request.
3281
+ :type _request_auth: dict, optional
3282
+ :param _content_type: force content-type for the request.
3283
+ :type _content_type: str, Optional
3284
+ :param _headers: set to override the headers for a single
3285
+ request; this effectively ignores the headers
3286
+ in the spec for a single request.
3287
+ :type _headers: dict, optional
3288
+ :param _host_index: set to override the host_index for a single
3289
+ request; this effectively ignores the host_index
3290
+ in the spec for a single request.
3291
+ :type _host_index: int, optional
3292
+ :return: Returns the result object.
3293
+ """ # noqa: E501
3294
+
3295
+ _param = self._test_meter_event_serialize(
3296
+ meter_id_or_slug=meter_id_or_slug,
3297
+ meter_test_event_request=meter_test_event_request,
3298
+ _request_auth=_request_auth,
3299
+ _content_type=_content_type,
3300
+ _headers=_headers,
3301
+ _host_index=_host_index
3302
+ )
3303
+
3304
+ _response_types_map: Dict[str, Optional[str]] = {
3305
+ '200': "MeterTestEventResponse",
3306
+ '400': "UnexpectedProblemResponse",
3307
+ '401': "UnexpectedProblemResponse",
3308
+ '403': "UnexpectedProblemResponse",
3309
+ '404': "UnexpectedProblemResponse",
3310
+ '412': "UnexpectedProblemResponse",
3311
+ '500': "UnexpectedProblemResponse",
3312
+ '503': "UnexpectedProblemResponse",
3313
+ }
3314
+ response_data = self.api_client.call_api(
3315
+ *_param,
3316
+ _request_timeout=_request_timeout
3317
+ )
3318
+ return response_data.response
3319
+
3320
+
3321
+ def _test_meter_event_serialize(
3322
+ self,
3323
+ meter_id_or_slug,
3324
+ meter_test_event_request,
3325
+ _request_auth,
3326
+ _content_type,
3327
+ _headers,
3328
+ _host_index,
3329
+ ) -> RequestSerialized:
3330
+
3331
+ _host = None
3332
+
3333
+ _collection_formats: Dict[str, str] = {
3334
+ }
3335
+
3336
+ _path_params: Dict[str, str] = {}
3337
+ _query_params: List[Tuple[str, str]] = []
3338
+ _header_params: Dict[str, Optional[str]] = _headers or {}
3339
+ _form_params: List[Tuple[str, str]] = []
3340
+ _files: Dict[
3341
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
3342
+ ] = {}
3343
+ _body_params: Optional[bytes] = None
3344
+
3345
+ # process the path parameters
3346
+ if meter_id_or_slug is not None:
3347
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
3348
+ # process the query parameters
3349
+ # process the header parameters
3350
+ # process the form parameters
3351
+ # process the body parameter
3352
+ if meter_test_event_request is not None:
3353
+ _body_params = meter_test_event_request
3354
+
3355
+
3356
+ # set the HTTP header `Accept`
3357
+ if 'Accept' not in _header_params:
3358
+ _header_params['Accept'] = self.api_client.select_header_accept(
3359
+ [
3360
+ 'application/json',
3361
+ 'application/problem+json'
3362
+ ]
3363
+ )
3364
+
3365
+ # set the HTTP header `Content-Type`
3366
+ if _content_type:
3367
+ _header_params['Content-Type'] = _content_type
3368
+ else:
3369
+ _default_content_type = (
3370
+ self.api_client.select_header_content_type(
3371
+ [
3372
+ 'application/json'
3373
+ ]
3374
+ )
3375
+ )
3376
+ if _default_content_type is not None:
3377
+ _header_params['Content-Type'] = _default_content_type
3378
+
3379
+ # authentication setting
3380
+ _auth_settings: List[str] = [
3381
+ 'CloudTokenAuth'
3382
+ ]
3383
+
3384
+ return self.api_client.param_serialize(
3385
+ method='POST',
3386
+ resource_path='/api/v1/meters/{meterIdOrSlug}/test-event',
3387
+ path_params=_path_params,
3388
+ query_params=_query_params,
3389
+ header_params=_header_params,
3390
+ body=_body_params,
3391
+ post_params=_form_params,
3392
+ files=_files,
3393
+ auth_settings=_auth_settings,
3394
+ collection_formats=_collection_formats,
3395
+ _host=_host,
3396
+ _request_auth=_request_auth
3397
+ )
3398
+
3399
+
3400
+
3401
+
3402
+ @validate_call
3403
+ def update_meter(
3404
+ self,
3405
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3406
+ meter_update: MeterUpdate,
3407
+ _request_timeout: Union[
3408
+ None,
3409
+ Annotated[StrictFloat, Field(gt=0)],
3410
+ Tuple[
3411
+ Annotated[StrictFloat, Field(gt=0)],
3412
+ Annotated[StrictFloat, Field(gt=0)]
3413
+ ]
3414
+ ] = None,
3415
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3416
+ _content_type: Optional[StrictStr] = None,
3417
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3418
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3419
+ ) -> Meter:
3420
+ """Update meter
3421
+
3422
+ Update a meter.
3423
+
3424
+ :param meter_id_or_slug: (required)
3425
+ :type meter_id_or_slug: str
3426
+ :param meter_update: (required)
3427
+ :type meter_update: MeterUpdate
3428
+ :param _request_timeout: timeout setting for this request. If one
3429
+ number provided, it will be total request
3430
+ timeout. It can also be a pair (tuple) of
3431
+ (connection, read) timeouts.
3432
+ :type _request_timeout: int, tuple(int, int), optional
3433
+ :param _request_auth: set to override the auth_settings for an a single
3434
+ request; this effectively ignores the
3435
+ authentication in the spec for a single request.
3436
+ :type _request_auth: dict, optional
3437
+ :param _content_type: force content-type for the request.
3438
+ :type _content_type: str, Optional
3439
+ :param _headers: set to override the headers for a single
3440
+ request; this effectively ignores the headers
3441
+ in the spec for a single request.
3442
+ :type _headers: dict, optional
3443
+ :param _host_index: set to override the host_index for a single
3444
+ request; this effectively ignores the host_index
3445
+ in the spec for a single request.
3446
+ :type _host_index: int, optional
3447
+ :return: Returns the result object.
3448
+ """ # noqa: E501
3449
+
3450
+ _param = self._update_meter_serialize(
3451
+ meter_id_or_slug=meter_id_or_slug,
3452
+ meter_update=meter_update,
3453
+ _request_auth=_request_auth,
3454
+ _content_type=_content_type,
3455
+ _headers=_headers,
3456
+ _host_index=_host_index
3457
+ )
3458
+
3459
+ _response_types_map: Dict[str, Optional[str]] = {
3460
+ '200': "Meter",
3461
+ '400': "UnexpectedProblemResponse",
3462
+ '401': "UnexpectedProblemResponse",
3463
+ '403': "UnexpectedProblemResponse",
3464
+ '412': "UnexpectedProblemResponse",
3465
+ '500': "UnexpectedProblemResponse",
3466
+ '503': "UnexpectedProblemResponse",
3467
+ }
3468
+ response_data = self.api_client.call_api(
3469
+ *_param,
3470
+ _request_timeout=_request_timeout
3471
+ )
3472
+ response_data.read()
3473
+ return self.api_client.response_deserialize(
3474
+ response_data=response_data,
3475
+ response_types_map=_response_types_map,
3476
+ ).data
3477
+
3478
+
3479
+ @validate_call
3480
+ def update_meter_with_http_info(
3481
+ self,
3482
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3483
+ meter_update: MeterUpdate,
3484
+ _request_timeout: Union[
3485
+ None,
3486
+ Annotated[StrictFloat, Field(gt=0)],
3487
+ Tuple[
3488
+ Annotated[StrictFloat, Field(gt=0)],
3489
+ Annotated[StrictFloat, Field(gt=0)]
3490
+ ]
3491
+ ] = None,
3492
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3493
+ _content_type: Optional[StrictStr] = None,
3494
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3495
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3496
+ ) -> ApiResponse[Meter]:
3497
+ """Update meter
3498
+
3499
+ Update a meter.
3500
+
3501
+ :param meter_id_or_slug: (required)
3502
+ :type meter_id_or_slug: str
3503
+ :param meter_update: (required)
3504
+ :type meter_update: MeterUpdate
3505
+ :param _request_timeout: timeout setting for this request. If one
3506
+ number provided, it will be total request
3507
+ timeout. It can also be a pair (tuple) of
3508
+ (connection, read) timeouts.
3509
+ :type _request_timeout: int, tuple(int, int), optional
3510
+ :param _request_auth: set to override the auth_settings for an a single
3511
+ request; this effectively ignores the
3512
+ authentication in the spec for a single request.
3513
+ :type _request_auth: dict, optional
3514
+ :param _content_type: force content-type for the request.
3515
+ :type _content_type: str, Optional
3516
+ :param _headers: set to override the headers for a single
3517
+ request; this effectively ignores the headers
3518
+ in the spec for a single request.
3519
+ :type _headers: dict, optional
3520
+ :param _host_index: set to override the host_index for a single
3521
+ request; this effectively ignores the host_index
3522
+ in the spec for a single request.
3523
+ :type _host_index: int, optional
3524
+ :return: Returns the result object.
3525
+ """ # noqa: E501
3526
+
3527
+ _param = self._update_meter_serialize(
3528
+ meter_id_or_slug=meter_id_or_slug,
3529
+ meter_update=meter_update,
3530
+ _request_auth=_request_auth,
3531
+ _content_type=_content_type,
3532
+ _headers=_headers,
3533
+ _host_index=_host_index
3534
+ )
3535
+
3536
+ _response_types_map: Dict[str, Optional[str]] = {
3537
+ '200': "Meter",
3538
+ '400': "UnexpectedProblemResponse",
3539
+ '401': "UnexpectedProblemResponse",
3540
+ '403': "UnexpectedProblemResponse",
3541
+ '412': "UnexpectedProblemResponse",
3542
+ '500': "UnexpectedProblemResponse",
3543
+ '503': "UnexpectedProblemResponse",
3544
+ }
3545
+ response_data = self.api_client.call_api(
3546
+ *_param,
3547
+ _request_timeout=_request_timeout
3548
+ )
3549
+ response_data.read()
3550
+ return self.api_client.response_deserialize(
3551
+ response_data=response_data,
3552
+ response_types_map=_response_types_map,
3553
+ )
3554
+
3555
+
3556
+ @validate_call
3557
+ def update_meter_without_preload_content(
3558
+ self,
3559
+ meter_id_or_slug: Annotated[str, Field(min_length=1, strict=True, max_length=64)],
3560
+ meter_update: MeterUpdate,
3561
+ _request_timeout: Union[
3562
+ None,
3563
+ Annotated[StrictFloat, Field(gt=0)],
3564
+ Tuple[
3565
+ Annotated[StrictFloat, Field(gt=0)],
3566
+ Annotated[StrictFloat, Field(gt=0)]
3567
+ ]
3568
+ ] = None,
3569
+ _request_auth: Optional[Dict[StrictStr, Any]] = None,
3570
+ _content_type: Optional[StrictStr] = None,
3571
+ _headers: Optional[Dict[StrictStr, Any]] = None,
3572
+ _host_index: Annotated[StrictInt, Field(ge=0, le=0)] = 0,
3573
+ ) -> RESTResponseType:
3574
+ """Update meter
3575
+
3576
+ Update a meter.
3577
+
3578
+ :param meter_id_or_slug: (required)
3579
+ :type meter_id_or_slug: str
3580
+ :param meter_update: (required)
3581
+ :type meter_update: MeterUpdate
3582
+ :param _request_timeout: timeout setting for this request. If one
3583
+ number provided, it will be total request
3584
+ timeout. It can also be a pair (tuple) of
3585
+ (connection, read) timeouts.
3586
+ :type _request_timeout: int, tuple(int, int), optional
3587
+ :param _request_auth: set to override the auth_settings for an a single
3588
+ request; this effectively ignores the
3589
+ authentication in the spec for a single request.
3590
+ :type _request_auth: dict, optional
3591
+ :param _content_type: force content-type for the request.
3592
+ :type _content_type: str, Optional
3593
+ :param _headers: set to override the headers for a single
3594
+ request; this effectively ignores the headers
3595
+ in the spec for a single request.
3596
+ :type _headers: dict, optional
3597
+ :param _host_index: set to override the host_index for a single
3598
+ request; this effectively ignores the host_index
3599
+ in the spec for a single request.
3600
+ :type _host_index: int, optional
3601
+ :return: Returns the result object.
3602
+ """ # noqa: E501
3603
+
3604
+ _param = self._update_meter_serialize(
3605
+ meter_id_or_slug=meter_id_or_slug,
3606
+ meter_update=meter_update,
3607
+ _request_auth=_request_auth,
3608
+ _content_type=_content_type,
3609
+ _headers=_headers,
3610
+ _host_index=_host_index
3611
+ )
3612
+
3613
+ _response_types_map: Dict[str, Optional[str]] = {
3614
+ '200': "Meter",
3615
+ '400': "UnexpectedProblemResponse",
3616
+ '401': "UnexpectedProblemResponse",
3617
+ '403': "UnexpectedProblemResponse",
3618
+ '412': "UnexpectedProblemResponse",
3619
+ '500': "UnexpectedProblemResponse",
3620
+ '503': "UnexpectedProblemResponse",
3621
+ }
3622
+ response_data = self.api_client.call_api(
3623
+ *_param,
3624
+ _request_timeout=_request_timeout
3625
+ )
3626
+ return response_data.response
3627
+
3628
+
3629
+ def _update_meter_serialize(
3630
+ self,
3631
+ meter_id_or_slug,
3632
+ meter_update,
3633
+ _request_auth,
3634
+ _content_type,
3635
+ _headers,
3636
+ _host_index,
3637
+ ) -> RequestSerialized:
3638
+
3639
+ _host = None
3640
+
3641
+ _collection_formats: Dict[str, str] = {
3642
+ }
3643
+
3644
+ _path_params: Dict[str, str] = {}
3645
+ _query_params: List[Tuple[str, str]] = []
3646
+ _header_params: Dict[str, Optional[str]] = _headers or {}
3647
+ _form_params: List[Tuple[str, str]] = []
3648
+ _files: Dict[
3649
+ str, Union[str, bytes, List[str], List[bytes], List[Tuple[str, bytes]]]
3650
+ ] = {}
3651
+ _body_params: Optional[bytes] = None
3652
+
3653
+ # process the path parameters
3654
+ if meter_id_or_slug is not None:
3655
+ _path_params['meterIdOrSlug'] = meter_id_or_slug
3656
+ # process the query parameters
3657
+ # process the header parameters
3658
+ # process the form parameters
3659
+ # process the body parameter
3660
+ if meter_update is not None:
3661
+ _body_params = meter_update
3662
+
3663
+
3664
+ # set the HTTP header `Accept`
3665
+ if 'Accept' not in _header_params:
3666
+ _header_params['Accept'] = self.api_client.select_header_accept(
3667
+ [
3668
+ 'application/json',
3669
+ 'application/problem+json'
3670
+ ]
3671
+ )
3672
+
3673
+ # set the HTTP header `Content-Type`
3674
+ if _content_type:
3675
+ _header_params['Content-Type'] = _content_type
3676
+ else:
3677
+ _default_content_type = (
3678
+ self.api_client.select_header_content_type(
3679
+ [
3680
+ 'application/json'
3681
+ ]
3682
+ )
3683
+ )
3684
+ if _default_content_type is not None:
3685
+ _header_params['Content-Type'] = _default_content_type
3686
+
3687
+ # authentication setting
3688
+ _auth_settings: List[str] = [
3689
+ 'CloudTokenAuth'
3690
+ ]
3691
+
3692
+ return self.api_client.param_serialize(
3693
+ method='PUT',
3694
+ resource_path='/api/v1/meters/{meterIdOrSlug}',
3695
+ path_params=_path_params,
3696
+ query_params=_query_params,
3697
+ header_params=_header_params,
3698
+ body=_body_params,
3699
+ post_params=_form_params,
3700
+ files=_files,
3701
+ auth_settings=_auth_settings,
3702
+ collection_formats=_collection_formats,
3703
+ _host=_host,
3704
+ _request_auth=_request_auth
3705
+ )
3706
+
3707
+