samsara-api 0.0.1__py3-none-any.whl → 0.0.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (346) hide show
  1. samsara/__init__.py +298 -38
  2. samsara/alerts/configurations/client.py +25 -11
  3. samsara/alerts/configurations/raw_client.py +47 -8
  4. samsara/alerts/incidents/client.py +21 -11
  5. samsara/alerts/incidents/raw_client.py +43 -9
  6. samsara/assets/client.py +21 -11
  7. samsara/assets/location_and_speed/client.py +21 -13
  8. samsara/assets/location_and_speed/raw_client.py +53 -9
  9. samsara/assets/raw_client.py +53 -8
  10. samsara/attributes/client.py +21 -13
  11. samsara/attributes/raw_client.py +41 -8
  12. samsara/cameras/media/client.py +2 -2
  13. samsara/cameras/media/raw_client.py +2 -2
  14. samsara/cameras/media/retrieval/client.py +2 -12
  15. samsara/cameras/media/types/media_list_request_trigger_reasons_item.py +8 -1
  16. samsara/carrier_proposed_assignments/client.py +21 -11
  17. samsara/carrier_proposed_assignments/raw_client.py +43 -8
  18. samsara/client.py +15 -6
  19. samsara/coaching/driver_coach_assignments/client.py +22 -12
  20. samsara/coaching/driver_coach_assignments/raw_client.py +45 -8
  21. samsara/coaching/sessions/client.py +21 -13
  22. samsara/coaching/sessions/raw_client.py +51 -9
  23. samsara/contacts/client.py +21 -11
  24. samsara/contacts/raw_client.py +39 -8
  25. samsara/core/client_wrapper.py +2 -2
  26. samsara/defect_types/client.py +21 -11
  27. samsara/defect_types/raw_client.py +41 -9
  28. samsara/defects/client.py +124 -9
  29. samsara/defects/raw_client.py +356 -6
  30. samsara/devices/client.py +21 -11
  31. samsara/devices/raw_client.py +45 -9
  32. samsara/document_types/client.py +21 -11
  33. samsara/document_types/raw_client.py +37 -9
  34. samsara/documents/client.py +21 -11
  35. samsara/documents/raw_client.py +45 -8
  36. samsara/driver_trailer_assignments/client.py +23 -13
  37. samsara/driver_trailer_assignments/raw_client.py +43 -8
  38. samsara/drivers/__init__.py +1 -3
  39. samsara/drivers/client.py +21 -21
  40. samsara/drivers/raw_client.py +51 -8
  41. samsara/dvirs/client.py +124 -9
  42. samsara/dvirs/raw_client.py +356 -6
  43. samsara/equipment/__init__.py +2 -2
  44. samsara/equipment/client.py +23 -21
  45. samsara/equipment/locations/client.py +62 -34
  46. samsara/equipment/locations/raw_client.py +132 -27
  47. samsara/equipment/raw_client.py +45 -18
  48. samsara/equipment/stats/__init__.py +2 -2
  49. samsara/equipment/stats/client.py +81 -53
  50. samsara/equipment/stats/raw_client.py +157 -46
  51. samsara/equipment/stats/types/__init__.py +2 -2
  52. samsara/equipment/stats/types/{stats_get_request_types_item.py → stats_list_request_types_item.py} +1 -1
  53. samsara/form_submissions/client.py +46 -54
  54. samsara/form_submissions/pdf_exports/client.py +14 -22
  55. samsara/form_submissions/pdf_exports/raw_client.py +10 -18
  56. samsara/form_submissions/raw_client.py +74 -47
  57. samsara/forms/client.py +138 -0
  58. samsara/{beta → forms}/raw_client.py +37 -62
  59. samsara/function.py +99 -0
  60. samsara/gateways/client.py +21 -11
  61. samsara/gateways/raw_client.py +39 -8
  62. samsara/hos/__init__.py +3 -0
  63. samsara/hos/client.py +218 -11
  64. samsara/hos/raw_client.py +485 -8
  65. samsara/hos/types/__init__.py +7 -0
  66. samsara/hos/types/hos_daily_logs_request_driver_activation_status.py +5 -0
  67. samsara/idling/__init__.py +7 -0
  68. samsara/idling/client.py +287 -0
  69. samsara/idling/raw_client.py +521 -0
  70. samsara/idling/types/__init__.py +7 -0
  71. samsara/idling/types/idling_list_request_pto_state.py +5 -0
  72. samsara/inputs/client.py +21 -11
  73. samsara/inputs/raw_client.py +51 -9
  74. samsara/issues/client.py +27 -29
  75. samsara/issues/raw_client.py +53 -26
  76. samsara/live_shares/client.py +21 -13
  77. samsara/live_shares/raw_client.py +43 -8
  78. samsara/maintenance/service_tasks/client.py +21 -11
  79. samsara/maintenance/service_tasks/raw_client.py +41 -8
  80. samsara/maintenance/work_orders/client.py +40 -22
  81. samsara/maintenance/work_orders/raw_client.py +84 -16
  82. samsara/readings/client.py +524 -0
  83. samsara/readings/raw_client.py +1214 -0
  84. samsara/reports/drivers/fuel_energy/client.py +6 -6
  85. samsara/reports/drivers/fuel_energy/raw_client.py +2 -2
  86. samsara/reports/ifta/__init__.py +4 -4
  87. samsara/reports/ifta/vehicle/__init__.py +2 -2
  88. samsara/reports/ifta/vehicle/client.py +21 -21
  89. samsara/reports/ifta/vehicle/raw_client.py +17 -17
  90. samsara/reports/ifta/vehicle/types/__init__.py +4 -4
  91. samsara/reports/ifta/vehicle/types/{vehicle_get_request_fuel_type.py → vehicle_list_request_fuel_type.py} +1 -1
  92. samsara/reports/ifta/vehicle/types/{vehicle_get_request_month.py → vehicle_list_request_month.py} +1 -1
  93. samsara/reports/ifta/vehicle/types/vehicle_list_request_quarter.py +5 -0
  94. samsara/reports/vehicles/__init__.py +2 -2
  95. samsara/reports/vehicles/fuel_energy/__init__.py +2 -2
  96. samsara/reports/vehicles/fuel_energy/client.py +11 -11
  97. samsara/reports/vehicles/fuel_energy/raw_client.py +7 -7
  98. samsara/reports/vehicles/fuel_energy/types/__init__.py +2 -2
  99. samsara/reports/vehicles/fuel_energy/types/fuel_energy_list_request_energy_type.py +5 -0
  100. samsara/reports/vehicles/idling/client.py +27 -15
  101. samsara/reports/vehicles/idling/raw_client.py +59 -11
  102. samsara/routes/client.py +21 -11
  103. samsara/routes/raw_client.py +43 -8
  104. samsara/safety_events/audit_logs/client.py +21 -13
  105. samsara/safety_events/audit_logs/raw_client.py +39 -9
  106. samsara/safety_events/client.py +21 -11
  107. samsara/safety_events/raw_client.py +47 -9
  108. samsara/speeding_intervals/client.py +25 -17
  109. samsara/speeding_intervals/raw_client.py +55 -13
  110. samsara/tachograph/__init__.py +7 -0
  111. samsara/tachograph/client.py +44 -0
  112. samsara/{drivers/tachograph_files → tachograph/driver}/client.py +162 -15
  113. samsara/{drivers/tachograph_files → tachograph/driver}/raw_client.py +153 -4
  114. samsara/tachograph/raw_client.py +13 -0
  115. samsara/{vehicles/tachograph_files → tachograph/vehicles}/client.py +15 -15
  116. samsara/{vehicles/tachograph_files → tachograph/vehicles}/raw_client.py +4 -4
  117. samsara/tags/client.py +21 -11
  118. samsara/tags/raw_client.py +39 -8
  119. samsara/trailers/client.py +21 -11
  120. samsara/trailers/raw_client.py +43 -8
  121. samsara/training_courses/client.py +21 -11
  122. samsara/training_courses/raw_client.py +43 -9
  123. samsara/trips/client.py +21 -11
  124. samsara/trips/raw_client.py +49 -9
  125. samsara/types/__init__.py +406 -50
  126. samsara/types/advanced_idling_get_idling_events_bad_gateway_error_response_body.py +33 -0
  127. samsara/types/advanced_idling_get_idling_events_gateway_timeout_error_response_body.py +33 -0
  128. samsara/types/{hos_daily_logs_update_shipping_docs_internal_server_error_response_body.py → advanced_idling_get_idling_events_internal_server_error_response_body.py} +1 -1
  129. samsara/types/advanced_idling_get_idling_events_method_not_allowed_error_response_body.py +33 -0
  130. samsara/types/{hos_daily_logs_update_shipping_docs_not_found_error_response_body.py → advanced_idling_get_idling_events_not_found_error_response_body.py} +1 -1
  131. samsara/types/{hos_daily_logs_update_shipping_docs_not_implemented_error_response_body.py → advanced_idling_get_idling_events_not_implemented_error_response_body.py} +1 -1
  132. samsara/types/advanced_idling_get_idling_events_response_body.py +26 -0
  133. samsara/types/{hos_daily_logs_update_shipping_docs_service_unavailable_error_response_body.py → advanced_idling_get_idling_events_service_unavailable_error_response_body.py} +1 -1
  134. samsara/types/{hos_daily_logs_update_shipping_docs_gateway_timeout_error_response_body.py → advanced_idling_get_idling_events_too_many_requests_error_response_body.py} +2 -2
  135. samsara/types/advanced_idling_get_idling_events_unauthorized_error_response_body.py +33 -0
  136. samsara/types/alert_object_asset_response_body.py +63 -0
  137. samsara/types/{assets_create_asset_response_body_type.py → alert_object_asset_response_body_type.py} +1 -1
  138. samsara/types/assets_create_asset_response_body.py +2 -87
  139. samsara/types/assets_update_asset_response_body.py +2 -87
  140. samsara/types/continuous_reading_alert_threshold_response_body.py +49 -0
  141. samsara/types/continuous_reading_alert_threshold_response_body_operation.py +7 -0
  142. samsara/types/continuous_reading_alert_threshold_response_body_unit.py +62 -0
  143. samsara/types/device_response_response_body.py +1 -1
  144. samsara/types/device_response_response_body_model.py +1 -0
  145. samsara/types/dvir_defect_get_defect_bad_gateway_error_response_body.py +33 -0
  146. samsara/types/dvir_defect_get_defect_gateway_timeout_error_response_body.py +33 -0
  147. samsara/types/dvir_defect_get_defect_internal_server_error_response_body.py +33 -0
  148. samsara/types/dvir_defect_get_defect_method_not_allowed_error_response_body.py +33 -0
  149. samsara/types/dvir_defect_get_defect_not_found_error_response_body.py +33 -0
  150. samsara/types/dvir_defect_get_defect_not_implemented_error_response_body.py +33 -0
  151. samsara/types/dvir_defect_get_defect_response_body.py +91 -0
  152. samsara/types/dvir_defect_get_defect_service_unavailable_error_response_body.py +33 -0
  153. samsara/types/dvir_defect_get_defect_too_many_requests_error_response_body.py +33 -0
  154. samsara/types/dvir_defect_get_defect_unauthorized_error_response_body.py +33 -0
  155. samsara/types/dvir_get_dvir_bad_gateway_error_response_body.py +33 -0
  156. samsara/types/dvir_get_dvir_gateway_timeout_error_response_body.py +33 -0
  157. samsara/types/dvir_get_dvir_internal_server_error_response_body.py +33 -0
  158. samsara/types/dvir_get_dvir_method_not_allowed_error_response_body.py +33 -0
  159. samsara/types/dvir_get_dvir_not_found_error_response_body.py +33 -0
  160. samsara/types/dvir_get_dvir_not_implemented_error_response_body.py +33 -0
  161. samsara/types/dvir_get_dvir_response_body.py +99 -0
  162. samsara/types/dvir_get_dvir_response_body_safety_status.py +5 -0
  163. samsara/types/dvir_get_dvir_response_body_type.py +5 -0
  164. samsara/types/dvir_get_dvir_service_unavailable_error_response_body.py +33 -0
  165. samsara/types/dvir_get_dvir_too_many_requests_error_response_body.py +33 -0
  166. samsara/types/dvir_get_dvir_unauthorized_error_response_body.py +33 -0
  167. samsara/types/enum_reading_alert_threshold_response_body.py +31 -0
  168. samsara/types/enum_value_response_body.py +31 -0
  169. samsara/types/equipment_gateway_engine_seconds.py +1 -1
  170. samsara/types/equipment_gateway_j_1939_engine_seconds.py +1 -1
  171. samsara/types/equipment_obd_engine_seconds.py +1 -1
  172. samsara/types/event_location_response_body.py +31 -0
  173. samsara/types/form_submission_request_field_input_object_request_body.py +7 -1
  174. samsara/types/form_submission_request_field_input_object_request_body_type.py +3 -1
  175. samsara/types/{hos_daily_logs_update_shipping_docs_response_body.py → form_submission_request_geofence_object_request_body.py} +9 -3
  176. samsara/types/form_submission_request_geofence_value_object_request_body.py +24 -0
  177. samsara/types/form_submission_response_object_response_body.py +8 -0
  178. samsara/types/{form_template_reference_object_request_body.py → form_template_request_object_request_body.py} +6 -4
  179. samsara/types/form_template_response_object_response_body.py +74 -0
  180. samsara/types/form_template_section_object_response_body.py +47 -0
  181. samsara/types/form_templates_get_form_templates_bad_gateway_error_response_body.py +33 -0
  182. samsara/types/form_templates_get_form_templates_gateway_timeout_error_response_body.py +33 -0
  183. samsara/types/form_templates_get_form_templates_internal_server_error_response_body.py +33 -0
  184. samsara/types/form_templates_get_form_templates_method_not_allowed_error_response_body.py +33 -0
  185. samsara/types/form_templates_get_form_templates_not_found_error_response_body.py +33 -0
  186. samsara/types/form_templates_get_form_templates_not_implemented_error_response_body.py +33 -0
  187. samsara/types/form_templates_get_form_templates_response_body.py +26 -0
  188. samsara/types/form_templates_get_form_templates_service_unavailable_error_response_body.py +33 -0
  189. samsara/types/form_templates_get_form_templates_too_many_requests_error_response_body.py +33 -0
  190. samsara/types/form_templates_get_form_templates_unauthorized_error_response_body.py +33 -0
  191. samsara/types/forms_action_object_response_body.py +43 -0
  192. samsara/types/forms_action_object_response_body_type.py +7 -0
  193. samsara/types/forms_approval_config_object_response_body.py +32 -0
  194. samsara/types/forms_asset_object_response_body.py +8 -1
  195. samsara/types/forms_check_boxes_value_object_response_body.py +7 -0
  196. samsara/types/forms_condition_object_response_body.py +36 -0
  197. samsara/types/forms_condition_object_response_body_type.py +7 -0
  198. samsara/types/forms_conditional_action_object_response_body.py +30 -0
  199. samsara/types/forms_field_definition_object_response_body.py +143 -0
  200. samsara/types/forms_field_definition_object_response_body_allowed_asset_types_item.py +7 -0
  201. samsara/types/forms_field_definition_object_response_body_allowed_date_time_value_type.py +7 -0
  202. samsara/types/forms_field_definition_object_response_body_type.py +22 -0
  203. samsara/types/forms_field_input_object_response_body.py +7 -4
  204. samsara/types/forms_field_input_object_response_body_type.py +20 -0
  205. samsara/types/forms_geofence_object_response_body.py +53 -0
  206. samsara/types/forms_geofence_object_response_body_entry_type.py +5 -0
  207. samsara/types/forms_geofence_value_object_response_body.py +24 -0
  208. samsara/types/forms_multiple_choice_value_object_response_body.py +8 -1
  209. samsara/types/forms_product_submission_approval_details_object_response_body.py +26 -0
  210. samsara/types/forms_select_option_object_response_body.py +47 -0
  211. samsara/types/forms_single_approval_config_object_response_body.py +33 -0
  212. samsara/types/forms_table_cell_object_response_body.py +3 -4
  213. samsara/types/forms_table_cell_object_response_body_type.py +8 -0
  214. samsara/types/forms_table_column_object_response_body.py +3 -4
  215. samsara/types/forms_table_column_object_response_body_type.py +8 -0
  216. samsara/types/forms_table_field_definition_object_response_body.py +91 -0
  217. samsara/types/forms_table_field_definition_object_response_body_allowed_date_time_value_type.py +7 -0
  218. samsara/types/forms_table_field_definition_object_response_body_type.py +8 -0
  219. samsara/types/fuel_cost_object_response_body.py +32 -0
  220. samsara/types/fuel_cost_object_response_body_currency.py +5 -0
  221. samsara/types/fuel_volume_response_body.py +28 -0
  222. samsara/types/fuel_volume_response_body_unit.py +5 -0
  223. samsara/types/gaseous_fuel_cost_object_response_body.py +32 -0
  224. samsara/types/gaseous_fuel_cost_object_response_body_currency.py +7 -0
  225. samsara/types/gateway_details_response_response_body.py +14 -0
  226. samsara/types/harsh_event_trigger_details_object_request_body_types_item.py +1 -0
  227. samsara/types/harsh_event_trigger_details_object_response_body_types_item.py +1 -0
  228. samsara/types/idling_event_object_response_body.py +101 -0
  229. samsara/types/idling_event_object_response_body_address_type.py +17 -0
  230. samsara/types/inline_response_2005.py +24 -0
  231. samsara/types/inline_response_2006.py +24 -0
  232. samsara/types/reading_definition_response_body.py +59 -0
  233. samsara/types/reading_history_response_body.py +47 -0
  234. samsara/types/reading_snapshot_response_body.py +52 -0
  235. samsara/types/reading_trigger_continuous_value_object_request_body.py +51 -0
  236. samsara/types/reading_trigger_continuous_value_object_request_body_operation.py +7 -0
  237. samsara/types/reading_trigger_continuous_value_object_request_body_unit.py +62 -0
  238. samsara/types/reading_trigger_continuous_value_object_response_body.py +51 -0
  239. samsara/types/reading_trigger_continuous_value_object_response_body_operation.py +7 -0
  240. samsara/types/reading_trigger_continuous_value_object_response_body_unit.py +62 -0
  241. samsara/types/reading_trigger_details_object_request_body.py +48 -0
  242. samsara/types/reading_trigger_details_object_response_body.py +48 -0
  243. samsara/types/reading_trigger_details_response_body.py +38 -0
  244. samsara/types/reading_trigger_enum_value_object_request_body.py +31 -0
  245. samsara/types/reading_trigger_enum_value_object_response_body.py +31 -0
  246. samsara/types/reading_type_response_body.py +34 -0
  247. samsara/types/reading_type_response_body_data_type.py +5 -0
  248. samsara/types/readings_get_readings_history_bad_gateway_error_response_body.py +33 -0
  249. samsara/types/{hos_daily_logs_update_shipping_docs_bad_gateway_error_response_body.py → readings_get_readings_history_gateway_timeout_error_response_body.py} +2 -2
  250. samsara/types/readings_get_readings_history_internal_server_error_response_body.py +33 -0
  251. samsara/types/readings_get_readings_history_method_not_allowed_error_response_body.py +33 -0
  252. samsara/types/readings_get_readings_history_not_found_error_response_body.py +33 -0
  253. samsara/types/readings_get_readings_history_not_implemented_error_response_body.py +33 -0
  254. samsara/types/readings_get_readings_history_response_body.py +26 -0
  255. samsara/types/readings_get_readings_history_service_unavailable_error_response_body.py +33 -0
  256. samsara/types/readings_get_readings_history_too_many_requests_error_response_body.py +33 -0
  257. samsara/types/readings_get_readings_history_unauthorized_error_response_body.py +33 -0
  258. samsara/types/readings_get_readings_snapshot_bad_gateway_error_response_body.py +33 -0
  259. samsara/types/readings_get_readings_snapshot_gateway_timeout_error_response_body.py +33 -0
  260. samsara/types/readings_get_readings_snapshot_internal_server_error_response_body.py +33 -0
  261. samsara/types/readings_get_readings_snapshot_method_not_allowed_error_response_body.py +33 -0
  262. samsara/types/readings_get_readings_snapshot_not_found_error_response_body.py +33 -0
  263. samsara/types/readings_get_readings_snapshot_not_implemented_error_response_body.py +33 -0
  264. samsara/types/readings_get_readings_snapshot_response_body.py +26 -0
  265. samsara/types/readings_get_readings_snapshot_service_unavailable_error_response_body.py +33 -0
  266. samsara/types/{hos_daily_logs_update_shipping_docs_unauthorized_error_response_body.py → readings_get_readings_snapshot_too_many_requests_error_response_body.py} +2 -2
  267. samsara/types/readings_get_readings_snapshot_unauthorized_error_response_body.py +33 -0
  268. samsara/types/readings_list_readings_definitions_bad_gateway_error_response_body.py +33 -0
  269. samsara/types/{hos_daily_logs_update_shipping_docs_too_many_requests_error_response_body.py → readings_list_readings_definitions_gateway_timeout_error_response_body.py} +2 -2
  270. samsara/types/readings_list_readings_definitions_internal_server_error_response_body.py +33 -0
  271. samsara/types/readings_list_readings_definitions_method_not_allowed_error_response_body.py +33 -0
  272. samsara/types/readings_list_readings_definitions_not_found_error_response_body.py +33 -0
  273. samsara/types/readings_list_readings_definitions_not_implemented_error_response_body.py +33 -0
  274. samsara/types/readings_list_readings_definitions_response_body.py +26 -0
  275. samsara/types/readings_list_readings_definitions_service_unavailable_error_response_body.py +33 -0
  276. samsara/types/{hos_daily_logs_update_shipping_docs_method_not_allowed_error_response_body.py → readings_list_readings_definitions_too_many_requests_error_response_body.py} +2 -2
  277. samsara/types/readings_list_readings_definitions_unauthorized_error_response_body.py +33 -0
  278. samsara/types/safety_score_configuration_settings_object_response_body.py +7 -0
  279. samsara/types/single_approval_requirements_object_response_body.py +28 -0
  280. samsara/types/sudden_fuel_level_drop_response_body.py +33 -0
  281. samsara/types/sudden_fuel_level_rise_response_body.py +33 -0
  282. samsara/types/trigger_params_object_request_body.py +2 -0
  283. samsara/types/trigger_params_object_response_body.py +2 -0
  284. samsara/types/unit_response_body.py +39 -0
  285. samsara/types/unit_response_body_base_unit.py +62 -0
  286. samsara/types/unit_response_body_measurement_type.py +28 -0
  287. samsara/types/uploaded_media_object_response_body.py +1 -1
  288. samsara/types/uploaded_media_object_response_body_trigger_reason.py +8 -1
  289. samsara/types/v_1_message.py +29 -0
  290. samsara/types/v_1_message_response.py +41 -0
  291. samsara/types/v_1_message_sender.py +27 -0
  292. samsara/types/v_1_messages.py +7 -0
  293. samsara/types/v_1_messages_response.py +7 -0
  294. samsara/types/webhook_response_response_body_event_types_item.py +1 -0
  295. samsara/types/webhooks_get_webhook_response_body_event_types_item.py +1 -0
  296. samsara/types/webhooks_patch_webhook_response_body_event_types_item.py +1 -0
  297. samsara/types/webhooks_post_webhooks_response_body_event_types_item.py +1 -0
  298. samsara/types/work_order_item_object_request_body.py +1 -1
  299. samsara/types/work_order_item_object_request_body_type.py +10 -1
  300. samsara/types/work_order_item_object_response_body.py +1 -1
  301. samsara/types/work_order_item_object_response_body_type.py +10 -1
  302. samsara/types/workflow_geofence_event_response_object_response_body.py +6 -0
  303. samsara/types/workflow_incident_details_object_response_body.py +2 -0
  304. samsara/types/workflow_trigger_object_request_body.py +1 -0
  305. samsara/types/workflow_trigger_object_response_body.py +1 -0
  306. samsara/user_roles/client.py +21 -11
  307. samsara/user_roles/raw_client.py +39 -9
  308. samsara/users/client.py +21 -11
  309. samsara/users/raw_client.py +39 -8
  310. samsara/v_1_messages/__init__.py +4 -0
  311. samsara/v_1_messages/client.py +258 -0
  312. samsara/v_1_messages/raw_client.py +273 -0
  313. samsara/vehicles/__init__.py +1 -2
  314. samsara/vehicles/client.py +31 -16
  315. samsara/vehicles/immobilizer/client.py +21 -13
  316. samsara/vehicles/immobilizer/raw_client.py +43 -9
  317. samsara/vehicles/locations/client.py +60 -32
  318. samsara/vehicles/locations/raw_client.py +132 -25
  319. samsara/vehicles/raw_client.py +61 -8
  320. samsara/vehicles/stats/client.py +66 -38
  321. samsara/vehicles/stats/raw_client.py +148 -31
  322. samsara/webhooks/client.py +21 -11
  323. samsara/webhooks/raw_client.py +41 -8
  324. samsara/webhooks/types/webhooks_post_webhooks_request_body_event_types_item.py +1 -0
  325. {samsara_api-0.0.1.dist-info → samsara_api-0.0.3.dist-info}/METADATA +25 -18
  326. {samsara_api-0.0.1.dist-info → samsara_api-0.0.3.dist-info}/RECORD +332 -197
  327. samsara/beta/client.py +0 -161
  328. samsara/drivers/tachograph_activity/client.py +0 -186
  329. samsara/drivers/tachograph_activity/raw_client.py +0 -169
  330. samsara/hours_of_service/__init__.py +0 -7
  331. samsara/hours_of_service/client.py +0 -229
  332. samsara/hours_of_service/raw_client.py +0 -425
  333. samsara/hours_of_service/types/__init__.py +0 -9
  334. samsara/hours_of_service/types/hours_of_service_get_daily_logs_request_driver_activation_status.py +0 -7
  335. samsara/reports/ifta/vehicle/types/vehicle_get_request_quarter.py +0 -5
  336. samsara/reports/vehicles/fuel_energy/types/fuel_energy_get_request_energy_type.py +0 -5
  337. samsara/types/assets_create_asset_response_body_regulation_mode.py +0 -7
  338. samsara/types/assets_update_asset_response_body_regulation_mode.py +0 -7
  339. samsara/types/assets_update_asset_response_body_type.py +0 -7
  340. samsara/types/patch_shipping_docs_response_body_response_body.py +0 -93
  341. /samsara/{beta → forms}/__init__.py +0 -0
  342. /samsara/{drivers/tachograph_activity → readings}/__init__.py +0 -0
  343. /samsara/{drivers/tachograph_files → tachograph/driver}/__init__.py +0 -0
  344. /samsara/{vehicles/tachograph_files → tachograph/vehicles}/__init__.py +0 -0
  345. {samsara_api-0.0.1.dist-info → samsara_api-0.0.3.dist-info}/LICENSE +0 -0
  346. {samsara_api-0.0.1.dist-info → samsara_api-0.0.3.dist-info}/WHEEL +0 -0
@@ -7,9 +7,11 @@ from ..core.api_error import ApiError
7
7
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
8
  from ..core.http_response import AsyncHttpResponse, HttpResponse
9
9
  from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pagination import AsyncPager, BaseHttpResponse, SyncPager
10
11
  from ..core.pydantic_utilities import parse_obj_as
11
12
  from ..core.request_options import RequestOptions
12
13
  from ..types.list_tags_response import ListTagsResponse
14
+ from ..types.tag import Tag
13
15
  from ..types.tag_response import TagResponse
14
16
  from ..types.tagged_object_id import TaggedObjectId
15
17
 
@@ -27,7 +29,7 @@ class RawTagsClient:
27
29
  limit: typing.Optional[int] = None,
28
30
  after: typing.Optional[str] = None,
29
31
  request_options: typing.Optional[RequestOptions] = None,
30
- ) -> HttpResponse[ListTagsResponse]:
32
+ ) -> SyncPager[Tag]:
31
33
  """
32
34
  Return all of the tags for an organization.
33
35
 
@@ -48,7 +50,7 @@ class RawTagsClient:
48
50
 
49
51
  Returns
50
52
  -------
51
- HttpResponse[ListTagsResponse]
53
+ SyncPager[Tag]
52
54
  List of tags.
53
55
  """
54
56
  _response = self._client_wrapper.httpx_client.request(
@@ -62,14 +64,27 @@ class RawTagsClient:
62
64
  )
63
65
  try:
64
66
  if 200 <= _response.status_code < 300:
65
- _data = typing.cast(
67
+ _parsed_response = typing.cast(
66
68
  ListTagsResponse,
67
69
  parse_obj_as(
68
70
  type_=ListTagsResponse, # type: ignore
69
71
  object_=_response.json(),
70
72
  ),
71
73
  )
72
- return HttpResponse(response=_response, data=_data)
74
+ _items = _parsed_response.data
75
+ _has_next = False
76
+ _get_next = None
77
+ if _parsed_response.pagination is not None:
78
+ _parsed_next = _parsed_response.pagination.end_cursor
79
+ _has_next = _parsed_next is not None and _parsed_next != ""
80
+ _get_next = lambda: self.list(
81
+ limit=limit,
82
+ after=_parsed_next,
83
+ request_options=request_options,
84
+ )
85
+ return SyncPager(
86
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
87
+ )
73
88
  _response_json = _response.json()
74
89
  except JSONDecodeError:
75
90
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -458,7 +473,7 @@ class AsyncRawTagsClient:
458
473
  limit: typing.Optional[int] = None,
459
474
  after: typing.Optional[str] = None,
460
475
  request_options: typing.Optional[RequestOptions] = None,
461
- ) -> AsyncHttpResponse[ListTagsResponse]:
476
+ ) -> AsyncPager[Tag]:
462
477
  """
463
478
  Return all of the tags for an organization.
464
479
 
@@ -479,7 +494,7 @@ class AsyncRawTagsClient:
479
494
 
480
495
  Returns
481
496
  -------
482
- AsyncHttpResponse[ListTagsResponse]
497
+ AsyncPager[Tag]
483
498
  List of tags.
484
499
  """
485
500
  _response = await self._client_wrapper.httpx_client.request(
@@ -493,14 +508,30 @@ class AsyncRawTagsClient:
493
508
  )
494
509
  try:
495
510
  if 200 <= _response.status_code < 300:
496
- _data = typing.cast(
511
+ _parsed_response = typing.cast(
497
512
  ListTagsResponse,
498
513
  parse_obj_as(
499
514
  type_=ListTagsResponse, # type: ignore
500
515
  object_=_response.json(),
501
516
  ),
502
517
  )
503
- return AsyncHttpResponse(response=_response, data=_data)
518
+ _items = _parsed_response.data
519
+ _has_next = False
520
+ _get_next = None
521
+ if _parsed_response.pagination is not None:
522
+ _parsed_next = _parsed_response.pagination.end_cursor
523
+ _has_next = _parsed_next is not None and _parsed_next != ""
524
+
525
+ async def _get_next():
526
+ return await self.list(
527
+ limit=limit,
528
+ after=_parsed_next,
529
+ request_options=request_options,
530
+ )
531
+
532
+ return AsyncPager(
533
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
534
+ )
504
535
  _response_json = _response.json()
505
536
  except JSONDecodeError:
506
537
  raise ApiError(status_code=_response.status_code, headers=dict(_response.headers), body=_response.text)
@@ -3,11 +3,12 @@
3
3
  import typing
4
4
 
5
5
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ..core.pagination import AsyncPager, SyncPager
6
7
  from ..core.request_options import RequestOptions
7
8
  from ..types.goa_attribute_tiny_request_body import GoaAttributeTinyRequestBody
9
+ from ..types.trailer_response_object_response_body import TrailerResponseObjectResponseBody
8
10
  from ..types.trailers_create_trailer_response_body import TrailersCreateTrailerResponseBody
9
11
  from ..types.trailers_get_trailer_response_body import TrailersGetTrailerResponseBody
10
- from ..types.trailers_list_trailers_response_body import TrailersListTrailersResponseBody
11
12
  from ..types.trailers_update_trailer_response_body import TrailersUpdateTrailerResponseBody
12
13
  from .raw_client import AsyncRawTrailersClient, RawTrailersClient
13
14
 
@@ -38,7 +39,7 @@ class TrailersClient:
38
39
  limit: typing.Optional[int] = None,
39
40
  after: typing.Optional[str] = None,
40
41
  request_options: typing.Optional[RequestOptions] = None,
41
- ) -> TrailersListTrailersResponseBody:
42
+ ) -> SyncPager[TrailerResponseObjectResponseBody]:
42
43
  """
43
44
  List all trailers.
44
45
 
@@ -68,7 +69,7 @@ class TrailersClient:
68
69
 
69
70
  Returns
70
71
  -------
71
- TrailersListTrailersResponseBody
72
+ SyncPager[TrailerResponseObjectResponseBody]
72
73
  OK response.
73
74
 
74
75
  Examples
@@ -78,12 +79,16 @@ class TrailersClient:
78
79
  client = Samsara(
79
80
  token="YOUR_TOKEN",
80
81
  )
81
- client.trailers.list()
82
+ response = client.trailers.list()
83
+ for item in response:
84
+ yield item
85
+ # alternatively, you can paginate page-by-page
86
+ for page in response.iter_pages():
87
+ yield page
82
88
  """
83
- _response = self._raw_client.list(
89
+ return self._raw_client.list(
84
90
  tag_ids=tag_ids, parent_tag_ids=parent_tag_ids, limit=limit, after=after, request_options=request_options
85
91
  )
86
- return _response.data
87
92
 
88
93
  def create(
89
94
  self,
@@ -360,7 +365,7 @@ class AsyncTrailersClient:
360
365
  limit: typing.Optional[int] = None,
361
366
  after: typing.Optional[str] = None,
362
367
  request_options: typing.Optional[RequestOptions] = None,
363
- ) -> TrailersListTrailersResponseBody:
368
+ ) -> AsyncPager[TrailerResponseObjectResponseBody]:
364
369
  """
365
370
  List all trailers.
366
371
 
@@ -390,7 +395,7 @@ class AsyncTrailersClient:
390
395
 
391
396
  Returns
392
397
  -------
393
- TrailersListTrailersResponseBody
398
+ AsyncPager[TrailerResponseObjectResponseBody]
394
399
  OK response.
395
400
 
396
401
  Examples
@@ -405,15 +410,20 @@ class AsyncTrailersClient:
405
410
 
406
411
 
407
412
  async def main() -> None:
408
- await client.trailers.list()
413
+ response = await client.trailers.list()
414
+ async for item in response:
415
+ yield item
416
+
417
+ # alternatively, you can paginate page-by-page
418
+ async for page in response.iter_pages():
419
+ yield page
409
420
 
410
421
 
411
422
  asyncio.run(main())
412
423
  """
413
- _response = await self._raw_client.list(
424
+ return await self._raw_client.list(
414
425
  tag_ids=tag_ids, parent_tag_ids=parent_tag_ids, limit=limit, after=after, request_options=request_options
415
426
  )
416
- return _response.data
417
427
 
418
428
  async def create(
419
429
  self,
@@ -7,6 +7,7 @@ from ..core.api_error import ApiError
7
7
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
8
  from ..core.http_response import AsyncHttpResponse, HttpResponse
9
9
  from ..core.jsonable_encoder import jsonable_encoder
10
+ from ..core.pagination import AsyncPager, BaseHttpResponse, SyncPager
10
11
  from ..core.pydantic_utilities import parse_obj_as
11
12
  from ..core.request_options import RequestOptions
12
13
  from ..core.serialization import convert_and_respect_annotation_metadata
@@ -20,6 +21,7 @@ from ..errors.service_unavailable_error import ServiceUnavailableError
20
21
  from ..errors.too_many_requests_error import TooManyRequestsError
21
22
  from ..errors.unauthorized_error import UnauthorizedError
22
23
  from ..types.goa_attribute_tiny_request_body import GoaAttributeTinyRequestBody
24
+ from ..types.trailer_response_object_response_body import TrailerResponseObjectResponseBody
23
25
  from ..types.trailers_create_trailer_response_body import TrailersCreateTrailerResponseBody
24
26
  from ..types.trailers_get_trailer_response_body import TrailersGetTrailerResponseBody
25
27
  from ..types.trailers_list_trailers_response_body import TrailersListTrailersResponseBody
@@ -41,7 +43,7 @@ class RawTrailersClient:
41
43
  limit: typing.Optional[int] = None,
42
44
  after: typing.Optional[str] = None,
43
45
  request_options: typing.Optional[RequestOptions] = None,
44
- ) -> HttpResponse[TrailersListTrailersResponseBody]:
46
+ ) -> SyncPager[TrailerResponseObjectResponseBody]:
45
47
  """
46
48
  List all trailers.
47
49
 
@@ -71,7 +73,7 @@ class RawTrailersClient:
71
73
 
72
74
  Returns
73
75
  -------
74
- HttpResponse[TrailersListTrailersResponseBody]
76
+ SyncPager[TrailerResponseObjectResponseBody]
75
77
  OK response.
76
78
  """
77
79
  _response = self._client_wrapper.httpx_client.request(
@@ -87,14 +89,29 @@ class RawTrailersClient:
87
89
  )
88
90
  try:
89
91
  if 200 <= _response.status_code < 300:
90
- _data = typing.cast(
92
+ _parsed_response = typing.cast(
91
93
  TrailersListTrailersResponseBody,
92
94
  parse_obj_as(
93
95
  type_=TrailersListTrailersResponseBody, # type: ignore
94
96
  object_=_response.json(),
95
97
  ),
96
98
  )
97
- return HttpResponse(response=_response, data=_data)
99
+ _items = _parsed_response.data
100
+ _has_next = False
101
+ _get_next = None
102
+ if _parsed_response.pagination is not None:
103
+ _parsed_next = _parsed_response.pagination.end_cursor
104
+ _has_next = _parsed_next is not None and _parsed_next != ""
105
+ _get_next = lambda: self.list(
106
+ tag_ids=tag_ids,
107
+ parent_tag_ids=parent_tag_ids,
108
+ limit=limit,
109
+ after=_parsed_next,
110
+ request_options=request_options,
111
+ )
112
+ return SyncPager(
113
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
114
+ )
98
115
  if _response.status_code == 401:
99
116
  raise UnauthorizedError(
100
117
  headers=dict(_response.headers),
@@ -887,7 +904,7 @@ class AsyncRawTrailersClient:
887
904
  limit: typing.Optional[int] = None,
888
905
  after: typing.Optional[str] = None,
889
906
  request_options: typing.Optional[RequestOptions] = None,
890
- ) -> AsyncHttpResponse[TrailersListTrailersResponseBody]:
907
+ ) -> AsyncPager[TrailerResponseObjectResponseBody]:
891
908
  """
892
909
  List all trailers.
893
910
 
@@ -917,7 +934,7 @@ class AsyncRawTrailersClient:
917
934
 
918
935
  Returns
919
936
  -------
920
- AsyncHttpResponse[TrailersListTrailersResponseBody]
937
+ AsyncPager[TrailerResponseObjectResponseBody]
921
938
  OK response.
922
939
  """
923
940
  _response = await self._client_wrapper.httpx_client.request(
@@ -933,14 +950,32 @@ class AsyncRawTrailersClient:
933
950
  )
934
951
  try:
935
952
  if 200 <= _response.status_code < 300:
936
- _data = typing.cast(
953
+ _parsed_response = typing.cast(
937
954
  TrailersListTrailersResponseBody,
938
955
  parse_obj_as(
939
956
  type_=TrailersListTrailersResponseBody, # type: ignore
940
957
  object_=_response.json(),
941
958
  ),
942
959
  )
943
- return AsyncHttpResponse(response=_response, data=_data)
960
+ _items = _parsed_response.data
961
+ _has_next = False
962
+ _get_next = None
963
+ if _parsed_response.pagination is not None:
964
+ _parsed_next = _parsed_response.pagination.end_cursor
965
+ _has_next = _parsed_next is not None and _parsed_next != ""
966
+
967
+ async def _get_next():
968
+ return await self.list(
969
+ tag_ids=tag_ids,
970
+ parent_tag_ids=parent_tag_ids,
971
+ limit=limit,
972
+ after=_parsed_next,
973
+ request_options=request_options,
974
+ )
975
+
976
+ return AsyncPager(
977
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
978
+ )
944
979
  if _response.status_code == 401:
945
980
  raise UnauthorizedError(
946
981
  headers=dict(_response.headers),
@@ -3,8 +3,9 @@
3
3
  import typing
4
4
 
5
5
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ..core.pagination import AsyncPager, SyncPager
6
7
  from ..core.request_options import RequestOptions
7
- from ..types.training_courses_get_training_courses_response_body import TrainingCoursesGetTrainingCoursesResponseBody
8
+ from ..types.training_course_response_object_response_body import TrainingCourseResponseObjectResponseBody
8
9
  from .raw_client import AsyncRawTrainingCoursesClient, RawTrainingCoursesClient
9
10
 
10
11
 
@@ -31,7 +32,7 @@ class TrainingCoursesClient:
31
32
  category_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
32
33
  status: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
33
34
  request_options: typing.Optional[RequestOptions] = None,
34
- ) -> TrainingCoursesGetTrainingCoursesResponseBody:
35
+ ) -> SyncPager[TrainingCourseResponseObjectResponseBody]:
35
36
  """
36
37
  Returns all training courses data. Results are paginated.
37
38
  Courses in the ‘draft’ status are excluded from the data returned by this endpoint.
@@ -62,7 +63,7 @@ class TrainingCoursesClient:
62
63
 
63
64
  Returns
64
65
  -------
65
- TrainingCoursesGetTrainingCoursesResponseBody
66
+ SyncPager[TrainingCourseResponseObjectResponseBody]
66
67
  OK response.
67
68
 
68
69
  Examples
@@ -72,16 +73,20 @@ class TrainingCoursesClient:
72
73
  client = Samsara(
73
74
  token="YOUR_TOKEN",
74
75
  )
75
- client.training_courses.list()
76
+ response = client.training_courses.list()
77
+ for item in response:
78
+ yield item
79
+ # alternatively, you can paginate page-by-page
80
+ for page in response.iter_pages():
81
+ yield page
76
82
  """
77
- _response = self._raw_client.list(
83
+ return self._raw_client.list(
78
84
  after=after,
79
85
  course_ids=course_ids,
80
86
  category_ids=category_ids,
81
87
  status=status,
82
88
  request_options=request_options,
83
89
  )
84
- return _response.data
85
90
 
86
91
 
87
92
  class AsyncTrainingCoursesClient:
@@ -107,7 +112,7 @@ class AsyncTrainingCoursesClient:
107
112
  category_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
108
113
  status: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
109
114
  request_options: typing.Optional[RequestOptions] = None,
110
- ) -> TrainingCoursesGetTrainingCoursesResponseBody:
115
+ ) -> AsyncPager[TrainingCourseResponseObjectResponseBody]:
111
116
  """
112
117
  Returns all training courses data. Results are paginated.
113
118
  Courses in the ‘draft’ status are excluded from the data returned by this endpoint.
@@ -138,7 +143,7 @@ class AsyncTrainingCoursesClient:
138
143
 
139
144
  Returns
140
145
  -------
141
- TrainingCoursesGetTrainingCoursesResponseBody
146
+ AsyncPager[TrainingCourseResponseObjectResponseBody]
142
147
  OK response.
143
148
 
144
149
  Examples
@@ -153,16 +158,21 @@ class AsyncTrainingCoursesClient:
153
158
 
154
159
 
155
160
  async def main() -> None:
156
- await client.training_courses.list()
161
+ response = await client.training_courses.list()
162
+ async for item in response:
163
+ yield item
164
+
165
+ # alternatively, you can paginate page-by-page
166
+ async for page in response.iter_pages():
167
+ yield page
157
168
 
158
169
 
159
170
  asyncio.run(main())
160
171
  """
161
- _response = await self._raw_client.list(
172
+ return await self._raw_client.list(
162
173
  after=after,
163
174
  course_ids=course_ids,
164
175
  category_ids=category_ids,
165
176
  status=status,
166
177
  request_options=request_options,
167
178
  )
168
- return _response.data
@@ -5,7 +5,7 @@ from json.decoder import JSONDecodeError
5
5
 
6
6
  from ..core.api_error import ApiError
7
7
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
8
- from ..core.http_response import AsyncHttpResponse, HttpResponse
8
+ from ..core.pagination import AsyncPager, BaseHttpResponse, SyncPager
9
9
  from ..core.pydantic_utilities import parse_obj_as
10
10
  from ..core.request_options import RequestOptions
11
11
  from ..errors.bad_gateway_error import BadGatewayError
@@ -17,6 +17,7 @@ from ..errors.not_implemented_error import NotImplementedError
17
17
  from ..errors.service_unavailable_error import ServiceUnavailableError
18
18
  from ..errors.too_many_requests_error import TooManyRequestsError
19
19
  from ..errors.unauthorized_error import UnauthorizedError
20
+ from ..types.training_course_response_object_response_body import TrainingCourseResponseObjectResponseBody
20
21
  from ..types.training_courses_get_training_courses_response_body import TrainingCoursesGetTrainingCoursesResponseBody
21
22
 
22
23
 
@@ -32,7 +33,7 @@ class RawTrainingCoursesClient:
32
33
  category_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
33
34
  status: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
34
35
  request_options: typing.Optional[RequestOptions] = None,
35
- ) -> HttpResponse[TrainingCoursesGetTrainingCoursesResponseBody]:
36
+ ) -> SyncPager[TrainingCourseResponseObjectResponseBody]:
36
37
  """
37
38
  Returns all training courses data. Results are paginated.
38
39
  Courses in the ‘draft’ status are excluded from the data returned by this endpoint.
@@ -63,7 +64,7 @@ class RawTrainingCoursesClient:
63
64
 
64
65
  Returns
65
66
  -------
66
- HttpResponse[TrainingCoursesGetTrainingCoursesResponseBody]
67
+ SyncPager[TrainingCourseResponseObjectResponseBody]
67
68
  OK response.
68
69
  """
69
70
  _response = self._client_wrapper.httpx_client.request(
@@ -79,14 +80,29 @@ class RawTrainingCoursesClient:
79
80
  )
80
81
  try:
81
82
  if 200 <= _response.status_code < 300:
82
- _data = typing.cast(
83
+ _parsed_response = typing.cast(
83
84
  TrainingCoursesGetTrainingCoursesResponseBody,
84
85
  parse_obj_as(
85
86
  type_=TrainingCoursesGetTrainingCoursesResponseBody, # type: ignore
86
87
  object_=_response.json(),
87
88
  ),
88
89
  )
89
- return HttpResponse(response=_response, data=_data)
90
+ _items = _parsed_response.data
91
+ _has_next = False
92
+ _get_next = None
93
+ if _parsed_response.pagination is not None:
94
+ _parsed_next = _parsed_response.pagination.end_cursor
95
+ _has_next = _parsed_next is not None and _parsed_next != ""
96
+ _get_next = lambda: self.list(
97
+ after=_parsed_next,
98
+ course_ids=course_ids,
99
+ category_ids=category_ids,
100
+ status=status,
101
+ request_options=request_options,
102
+ )
103
+ return SyncPager(
104
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
105
+ )
90
106
  if _response.status_code == 401:
91
107
  raise UnauthorizedError(
92
108
  headers=dict(_response.headers),
@@ -204,7 +220,7 @@ class AsyncRawTrainingCoursesClient:
204
220
  category_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
205
221
  status: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
206
222
  request_options: typing.Optional[RequestOptions] = None,
207
- ) -> AsyncHttpResponse[TrainingCoursesGetTrainingCoursesResponseBody]:
223
+ ) -> AsyncPager[TrainingCourseResponseObjectResponseBody]:
208
224
  """
209
225
  Returns all training courses data. Results are paginated.
210
226
  Courses in the ‘draft’ status are excluded from the data returned by this endpoint.
@@ -235,7 +251,7 @@ class AsyncRawTrainingCoursesClient:
235
251
 
236
252
  Returns
237
253
  -------
238
- AsyncHttpResponse[TrainingCoursesGetTrainingCoursesResponseBody]
254
+ AsyncPager[TrainingCourseResponseObjectResponseBody]
239
255
  OK response.
240
256
  """
241
257
  _response = await self._client_wrapper.httpx_client.request(
@@ -251,14 +267,32 @@ class AsyncRawTrainingCoursesClient:
251
267
  )
252
268
  try:
253
269
  if 200 <= _response.status_code < 300:
254
- _data = typing.cast(
270
+ _parsed_response = typing.cast(
255
271
  TrainingCoursesGetTrainingCoursesResponseBody,
256
272
  parse_obj_as(
257
273
  type_=TrainingCoursesGetTrainingCoursesResponseBody, # type: ignore
258
274
  object_=_response.json(),
259
275
  ),
260
276
  )
261
- return AsyncHttpResponse(response=_response, data=_data)
277
+ _items = _parsed_response.data
278
+ _has_next = False
279
+ _get_next = None
280
+ if _parsed_response.pagination is not None:
281
+ _parsed_next = _parsed_response.pagination.end_cursor
282
+ _has_next = _parsed_next is not None and _parsed_next != ""
283
+
284
+ async def _get_next():
285
+ return await self.list(
286
+ after=_parsed_next,
287
+ course_ids=course_ids,
288
+ category_ids=category_ids,
289
+ status=status,
290
+ request_options=request_options,
291
+ )
292
+
293
+ return AsyncPager(
294
+ has_next=_has_next, items=_items, get_next=_get_next, response=BaseHttpResponse(response=_response)
295
+ )
262
296
  if _response.status_code == 401:
263
297
  raise UnauthorizedError(
264
298
  headers=dict(_response.headers),
samsara/trips/client.py CHANGED
@@ -3,8 +3,9 @@
3
3
  import typing
4
4
 
5
5
  from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
6
+ from ..core.pagination import AsyncPager, SyncPager
6
7
  from ..core.request_options import RequestOptions
7
- from ..types.trips_get_trips_response_body import TripsGetTripsResponseBody
8
+ from ..types.trip_response_body import TripResponseBody
8
9
  from .raw_client import AsyncRawTripsClient, RawTripsClient
9
10
  from .types.trips_stream_request_completion_status import TripsStreamRequestCompletionStatus
10
11
  from .types.trips_stream_request_query_by import TripsStreamRequestQueryBy
@@ -36,7 +37,7 @@ class TripsClient:
36
37
  after: typing.Optional[str] = None,
37
38
  ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
38
39
  request_options: typing.Optional[RequestOptions] = None,
39
- ) -> TripsGetTripsResponseBody:
40
+ ) -> SyncPager[TripResponseBody]:
40
41
  """
41
42
  This endpoint will return trips that have been collected for your organization based on the time parameters passed in. Results are paginated. Reach out to your Samsara Representative to have this API enabled for your organization.
42
43
 
@@ -75,7 +76,7 @@ class TripsClient:
75
76
 
76
77
  Returns
77
78
  -------
78
- TripsGetTripsResponseBody
79
+ SyncPager[TripResponseBody]
79
80
  OK response.
80
81
 
81
82
  Examples
@@ -85,11 +86,16 @@ class TripsClient:
85
86
  client = Samsara(
86
87
  token="YOUR_TOKEN",
87
88
  )
88
- client.trips.stream(
89
+ response = client.trips.stream(
89
90
  start_time="startTime",
90
91
  )
92
+ for item in response:
93
+ yield item
94
+ # alternatively, you can paginate page-by-page
95
+ for page in response.iter_pages():
96
+ yield page
91
97
  """
92
- _response = self._raw_client.stream(
98
+ return self._raw_client.stream(
93
99
  start_time=start_time,
94
100
  include_asset=include_asset,
95
101
  completion_status=completion_status,
@@ -99,7 +105,6 @@ class TripsClient:
99
105
  ids=ids,
100
106
  request_options=request_options,
101
107
  )
102
- return _response.data
103
108
 
104
109
 
105
110
  class AsyncTripsClient:
@@ -128,7 +133,7 @@ class AsyncTripsClient:
128
133
  after: typing.Optional[str] = None,
129
134
  ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
130
135
  request_options: typing.Optional[RequestOptions] = None,
131
- ) -> TripsGetTripsResponseBody:
136
+ ) -> AsyncPager[TripResponseBody]:
132
137
  """
133
138
  This endpoint will return trips that have been collected for your organization based on the time parameters passed in. Results are paginated. Reach out to your Samsara Representative to have this API enabled for your organization.
134
139
 
@@ -167,7 +172,7 @@ class AsyncTripsClient:
167
172
 
168
173
  Returns
169
174
  -------
170
- TripsGetTripsResponseBody
175
+ AsyncPager[TripResponseBody]
171
176
  OK response.
172
177
 
173
178
  Examples
@@ -182,14 +187,20 @@ class AsyncTripsClient:
182
187
 
183
188
 
184
189
  async def main() -> None:
185
- await client.trips.stream(
190
+ response = await client.trips.stream(
186
191
  start_time="startTime",
187
192
  )
193
+ async for item in response:
194
+ yield item
195
+
196
+ # alternatively, you can paginate page-by-page
197
+ async for page in response.iter_pages():
198
+ yield page
188
199
 
189
200
 
190
201
  asyncio.run(main())
191
202
  """
192
- _response = await self._raw_client.stream(
203
+ return await self._raw_client.stream(
193
204
  start_time=start_time,
194
205
  include_asset=include_asset,
195
206
  completion_status=completion_status,
@@ -199,4 +210,3 @@ class AsyncTripsClient:
199
210
  ids=ids,
200
211
  request_options=request_options,
201
212
  )
202
- return _response.data