onebusaway 1.11.1__tar.gz → 1.12.1__tar.gz

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 (194) hide show
  1. onebusaway-1.12.1/.release-please-manifest.json +3 -0
  2. {onebusaway-1.11.1 → onebusaway-1.12.1}/CHANGELOG.md +26 -0
  3. {onebusaway-1.11.1 → onebusaway-1.12.1}/CONTRIBUTING.md +1 -2
  4. {onebusaway-1.11.1 → onebusaway-1.12.1}/PKG-INFO +1 -1
  5. {onebusaway-1.11.1 → onebusaway-1.12.1}/pyproject.toml +3 -2
  6. {onebusaway-1.11.1 → onebusaway-1.12.1}/requirements-dev.lock +4 -0
  7. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_base_client.py +22 -2
  8. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_models.py +2 -0
  9. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_types.py +2 -0
  10. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_version.py +1 -1
  11. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_client.py +54 -0
  12. onebusaway-1.11.1/.release-please-manifest.json +0 -3
  13. {onebusaway-1.11.1 → onebusaway-1.12.1}/.gitignore +0 -0
  14. {onebusaway-1.11.1 → onebusaway-1.12.1}/LICENSE +0 -0
  15. {onebusaway-1.11.1 → onebusaway-1.12.1}/README.md +0 -0
  16. {onebusaway-1.11.1 → onebusaway-1.12.1}/SECURITY.md +0 -0
  17. {onebusaway-1.11.1 → onebusaway-1.12.1}/api.md +0 -0
  18. {onebusaway-1.11.1 → onebusaway-1.12.1}/bin/check-release-environment +0 -0
  19. {onebusaway-1.11.1 → onebusaway-1.12.1}/bin/publish-pypi +0 -0
  20. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/.env.example +0 -0
  21. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/.keep +0 -0
  22. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/README.md +0 -0
  23. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/agencies_with_coverage.py +0 -0
  24. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/arrivals_and_departures_for_stop.py +0 -0
  25. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/block.py +0 -0
  26. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/config.py +0 -0
  27. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/current_time.py +0 -0
  28. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/helpers/__init__.py +0 -0
  29. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/helpers/load_env.py +0 -0
  30. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/routes_for_agency.py +0 -0
  31. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/routes_ids_for_agency.py +0 -0
  32. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/schedule_for_route.py +0 -0
  33. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/schedule_for_stop.py +0 -0
  34. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/search_for_route.py +0 -0
  35. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/search_for_stop.py +0 -0
  36. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/shape.py +0 -0
  37. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/stop.py +0 -0
  38. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/stop_for_route.py +0 -0
  39. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/stop_ids_for_agency.py +0 -0
  40. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/stops_for_location.py +0 -0
  41. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/trip.py +0 -0
  42. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/trip_details.py +0 -0
  43. {onebusaway-1.11.1 → onebusaway-1.12.1}/examples/vehicles_for_agency.py +0 -0
  44. {onebusaway-1.11.1 → onebusaway-1.12.1}/mypy.ini +0 -0
  45. {onebusaway-1.11.1 → onebusaway-1.12.1}/noxfile.py +0 -0
  46. {onebusaway-1.11.1 → onebusaway-1.12.1}/release-please-config.json +0 -0
  47. {onebusaway-1.11.1 → onebusaway-1.12.1}/requirements.lock +0 -0
  48. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/__init__.py +0 -0
  49. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_client.py +0 -0
  50. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_compat.py +0 -0
  51. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_constants.py +0 -0
  52. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_exceptions.py +0 -0
  53. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_files.py +0 -0
  54. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_qs.py +0 -0
  55. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_resource.py +0 -0
  56. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_response.py +0 -0
  57. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_streaming.py +0 -0
  58. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/__init__.py +0 -0
  59. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_logs.py +0 -0
  60. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_proxy.py +0 -0
  61. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_reflection.py +0 -0
  62. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_resources_proxy.py +0 -0
  63. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_streams.py +0 -0
  64. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_sync.py +0 -0
  65. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_transform.py +0 -0
  66. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_typing.py +0 -0
  67. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/_utils/_utils.py +0 -0
  68. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/lib/.keep +0 -0
  69. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/py.typed +0 -0
  70. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/__init__.py +0 -0
  71. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/agencies_with_coverage.py +0 -0
  72. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/agency.py +0 -0
  73. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/arrival_and_departure.py +0 -0
  74. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/block.py +0 -0
  75. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/config.py +0 -0
  76. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/current_time.py +0 -0
  77. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/report_problem_with_stop.py +0 -0
  78. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/report_problem_with_trip.py +0 -0
  79. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/route.py +0 -0
  80. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/route_ids_for_agency.py +0 -0
  81. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/routes_for_agency.py +0 -0
  82. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/routes_for_location.py +0 -0
  83. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/schedule_for_route.py +0 -0
  84. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/schedule_for_stop.py +0 -0
  85. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/search_for_route.py +0 -0
  86. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/search_for_stop.py +0 -0
  87. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/shape.py +0 -0
  88. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/stop.py +0 -0
  89. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/stop_ids_for_agency.py +0 -0
  90. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/stops_for_agency.py +0 -0
  91. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/stops_for_location.py +0 -0
  92. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/stops_for_route.py +0 -0
  93. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/trip.py +0 -0
  94. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/trip_details.py +0 -0
  95. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/trip_for_vehicle.py +0 -0
  96. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/trips_for_location.py +0 -0
  97. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/trips_for_route.py +0 -0
  98. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/resources/vehicles_for_agency.py +0 -0
  99. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/__init__.py +0 -0
  100. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/agencies_with_coverage_list_response.py +0 -0
  101. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/agency_retrieve_response.py +0 -0
  102. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/arrival_and_departure_list_params.py +0 -0
  103. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/arrival_and_departure_list_response.py +0 -0
  104. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/arrival_and_departure_retrieve_params.py +0 -0
  105. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/arrival_and_departure_retrieve_response.py +0 -0
  106. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/block_retrieve_response.py +0 -0
  107. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/config_retrieve_response.py +0 -0
  108. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/current_time_retrieve_response.py +0 -0
  109. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/report_problem_with_stop_retrieve_params.py +0 -0
  110. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/report_problem_with_trip_retrieve_params.py +0 -0
  111. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/route_ids_for_agency_list_response.py +0 -0
  112. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/route_retrieve_response.py +0 -0
  113. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/routes_for_agency_list_response.py +0 -0
  114. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/routes_for_location_list_params.py +0 -0
  115. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/routes_for_location_list_response.py +0 -0
  116. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/schedule_for_route_retrieve_params.py +0 -0
  117. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/schedule_for_route_retrieve_response.py +0 -0
  118. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/schedule_for_stop_retrieve_params.py +0 -0
  119. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/schedule_for_stop_retrieve_response.py +0 -0
  120. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_route_list_params.py +0 -0
  121. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_route_list_response.py +0 -0
  122. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_route_retrieve_params.py +0 -0
  123. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_route_retrieve_response.py +0 -0
  124. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_stop_list_params.py +0 -0
  125. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_stop_list_response.py +0 -0
  126. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_stop_retrieve_params.py +0 -0
  127. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/search_for_stop_retrieve_response.py +0 -0
  128. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/shape_retrieve_response.py +0 -0
  129. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/shared/__init__.py +0 -0
  130. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/shared/references.py +0 -0
  131. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/shared/response_wrapper.py +0 -0
  132. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stop_ids_for_agency_list_response.py +0 -0
  133. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stop_retrieve_response.py +0 -0
  134. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stops_for_agency_list_response.py +0 -0
  135. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stops_for_location_list_params.py +0 -0
  136. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stops_for_location_list_response.py +0 -0
  137. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stops_for_route_list_params.py +0 -0
  138. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/stops_for_route_list_response.py +0 -0
  139. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trip_detail_retrieve_params.py +0 -0
  140. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trip_detail_retrieve_response.py +0 -0
  141. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trip_for_vehicle_retrieve_params.py +0 -0
  142. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trip_for_vehicle_retrieve_response.py +0 -0
  143. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trip_retrieve_response.py +0 -0
  144. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trips_for_location_list_params.py +0 -0
  145. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trips_for_location_list_response.py +0 -0
  146. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trips_for_route_list_params.py +0 -0
  147. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/trips_for_route_list_response.py +0 -0
  148. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/vehicles_for_agency_list_params.py +0 -0
  149. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/onebusaway/types/vehicles_for_agency_list_response.py +0 -0
  150. {onebusaway-1.11.1 → onebusaway-1.12.1}/src/open_transit/lib/.keep +0 -0
  151. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/__init__.py +0 -0
  152. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/__init__.py +0 -0
  153. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_agencies_with_coverage.py +0 -0
  154. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_agency.py +0 -0
  155. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_arrival_and_departure.py +0 -0
  156. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_block.py +0 -0
  157. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_config.py +0 -0
  158. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_current_time.py +0 -0
  159. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_report_problem_with_stop.py +0 -0
  160. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_report_problem_with_trip.py +0 -0
  161. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_route.py +0 -0
  162. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_route_ids_for_agency.py +0 -0
  163. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_routes_for_agency.py +0 -0
  164. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_routes_for_location.py +0 -0
  165. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_schedule_for_route.py +0 -0
  166. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_schedule_for_stop.py +0 -0
  167. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_search_for_route.py +0 -0
  168. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_search_for_stop.py +0 -0
  169. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_shape.py +0 -0
  170. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_stop.py +0 -0
  171. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_stop_ids_for_agency.py +0 -0
  172. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_stops_for_agency.py +0 -0
  173. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_stops_for_location.py +0 -0
  174. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_stops_for_route.py +0 -0
  175. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_trip.py +0 -0
  176. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_trip_details.py +0 -0
  177. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_trip_for_vehicle.py +0 -0
  178. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_trips_for_location.py +0 -0
  179. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_trips_for_route.py +0 -0
  180. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/api_resources/test_vehicles_for_agency.py +0 -0
  181. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/conftest.py +0 -0
  182. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/sample_file.txt +0 -0
  183. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_deepcopy.py +0 -0
  184. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_extract_files.py +0 -0
  185. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_files.py +0 -0
  186. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_models.py +0 -0
  187. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_qs.py +0 -0
  188. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_required_args.py +0 -0
  189. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_response.py +0 -0
  190. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_streaming.py +0 -0
  191. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_transform.py +0 -0
  192. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_utils/test_proxy.py +0 -0
  193. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/test_utils/test_typing.py +0 -0
  194. {onebusaway-1.11.1 → onebusaway-1.12.1}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.12.1"
3
+ }
@@ -1,5 +1,31 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.12.1 (2025-06-13)
4
+
5
+ Full Changelog: [v1.12.0...v1.12.1](https://github.com/OneBusAway/python-sdk/compare/v1.12.0...v1.12.1)
6
+
7
+ ### Bug Fixes
8
+
9
+ * **client:** correctly parse binary response | stream ([4bc049c](https://github.com/OneBusAway/python-sdk/commit/4bc049ce0a36680434f5570fd38f3ca673250bba))
10
+
11
+
12
+ ### Chores
13
+
14
+ * **tests:** run tests in parallel ([1329bbe](https://github.com/OneBusAway/python-sdk/commit/1329bbe39e76943fe51efea63dc5ee7f85154135))
15
+
16
+ ## 1.12.0 (2025-06-03)
17
+
18
+ Full Changelog: [v1.11.1...v1.12.0](https://github.com/OneBusAway/python-sdk/compare/v1.11.1...v1.12.0)
19
+
20
+ ### Features
21
+
22
+ * **client:** add follow_redirects request option ([569c63a](https://github.com/OneBusAway/python-sdk/commit/569c63a79d7d69d4e7f54466860e462114385db9))
23
+
24
+
25
+ ### Chores
26
+
27
+ * **docs:** remove reference to rye shell ([064f5b8](https://github.com/OneBusAway/python-sdk/commit/064f5b86a6b67b49431886f2892cdfb6cd221e8a))
28
+
3
29
  ## 1.11.1 (2025-05-22)
4
30
 
5
31
  Full Changelog: [v1.11.0...v1.11.1](https://github.com/OneBusAway/python-sdk/compare/v1.11.0...v1.11.1)
@@ -17,8 +17,7 @@ $ rye sync --all-features
17
17
  You can then run scripts using `rye run python script.py` or by activating the virtual environment:
18
18
 
19
19
  ```sh
20
- $ rye shell
21
- # or manually activate - https://docs.python.org/3/library/venv.html#how-venvs-work
20
+ # Activate the virtual environment - https://docs.python.org/3/library/venv.html#how-venvs-work
22
21
  $ source .venv/bin/activate
23
22
 
24
23
  # now you can omit the `rye run` prefix
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: onebusaway
3
- Version: 1.11.1
3
+ Version: 1.12.1
4
4
  Summary: The official Python library for the onebusaway-sdk API
5
5
  Project-URL: Homepage, https://github.com/OneBusAway/python-sdk
6
6
  Project-URL: Repository, https://github.com/OneBusAway/python-sdk
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "onebusaway"
3
- version = "1.11.1"
3
+ version = "1.12.1"
4
4
  description = "The official Python library for the onebusaway-sdk API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -54,6 +54,7 @@ dev-dependencies = [
54
54
  "importlib-metadata>=6.7.0",
55
55
  "rich>=13.7.1",
56
56
  "nest_asyncio==1.6.0",
57
+ "pytest-xdist>=3.6.1",
57
58
  ]
58
59
 
59
60
  [tool.rye.scripts]
@@ -125,7 +126,7 @@ replacement = '[\1](https://github.com/OneBusAway/python-sdk/tree/main/\g<2>)'
125
126
 
126
127
  [tool.pytest.ini_options]
127
128
  testpaths = ["tests"]
128
- addopts = "--tb=short"
129
+ addopts = "--tb=short -n auto"
129
130
  xfail_strict = true
130
131
  asyncio_mode = "auto"
131
132
  asyncio_default_fixture_loop_scope = "session"
@@ -30,6 +30,8 @@ distro==1.8.0
30
30
  exceptiongroup==1.2.2
31
31
  # via anyio
32
32
  # via pytest
33
+ execnet==2.1.1
34
+ # via pytest-xdist
33
35
  filelock==3.12.4
34
36
  # via virtualenv
35
37
  h11==0.14.0
@@ -72,7 +74,9 @@ pygments==2.18.0
72
74
  pyright==1.1.399
73
75
  pytest==8.3.3
74
76
  # via pytest-asyncio
77
+ # via pytest-xdist
75
78
  pytest-asyncio==0.24.0
79
+ pytest-xdist==3.7.0
76
80
  python-dateutil==2.8.2
77
81
  # via time-machine
78
82
  pytz==2023.3.post1
@@ -960,6 +960,9 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
960
960
  if self.custom_auth is not None:
961
961
  kwargs["auth"] = self.custom_auth
962
962
 
963
+ if options.follow_redirects is not None:
964
+ kwargs["follow_redirects"] = options.follow_redirects
965
+
963
966
  log.debug("Sending HTTP Request: %s %s", request.method, request.url)
964
967
 
965
968
  response = None
@@ -1068,7 +1071,14 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1068
1071
  ) -> ResponseT:
1069
1072
  origin = get_origin(cast_to) or cast_to
1070
1073
 
1071
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1074
+ if (
1075
+ inspect.isclass(origin)
1076
+ and issubclass(origin, BaseAPIResponse)
1077
+ # we only want to actually return the custom BaseAPIResponse class if we're
1078
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1079
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1080
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1081
+ ):
1072
1082
  if not issubclass(origin, APIResponse):
1073
1083
  raise TypeError(f"API Response types must subclass {APIResponse}; Received {origin}")
1074
1084
 
@@ -1460,6 +1470,9 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1460
1470
  if self.custom_auth is not None:
1461
1471
  kwargs["auth"] = self.custom_auth
1462
1472
 
1473
+ if options.follow_redirects is not None:
1474
+ kwargs["follow_redirects"] = options.follow_redirects
1475
+
1463
1476
  log.debug("Sending HTTP Request: %s %s", request.method, request.url)
1464
1477
 
1465
1478
  response = None
@@ -1568,7 +1581,14 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1568
1581
  ) -> ResponseT:
1569
1582
  origin = get_origin(cast_to) or cast_to
1570
1583
 
1571
- if inspect.isclass(origin) and issubclass(origin, BaseAPIResponse):
1584
+ if (
1585
+ inspect.isclass(origin)
1586
+ and issubclass(origin, BaseAPIResponse)
1587
+ # we only want to actually return the custom BaseAPIResponse class if we're
1588
+ # returning the raw response, or if we're not streaming SSE, as if we're streaming
1589
+ # SSE then `cast_to` doesn't actively reflect the type we need to parse into
1590
+ and (not stream or bool(response.request.headers.get(RAW_RESPONSE_HEADER)))
1591
+ ):
1572
1592
  if not issubclass(origin, AsyncAPIResponse):
1573
1593
  raise TypeError(f"API Response types must subclass {AsyncAPIResponse}; Received {origin}")
1574
1594
 
@@ -737,6 +737,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
737
737
  idempotency_key: str
738
738
  json_data: Body
739
739
  extra_json: AnyMapping
740
+ follow_redirects: bool
740
741
 
741
742
 
742
743
  @final
@@ -750,6 +751,7 @@ class FinalRequestOptions(pydantic.BaseModel):
750
751
  files: Union[HttpxRequestFiles, None] = None
751
752
  idempotency_key: Union[str, None] = None
752
753
  post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
754
+ follow_redirects: Union[bool, None] = None
753
755
 
754
756
  # It should be noted that we cannot use `json` here as that would override
755
757
  # a BaseModel method in an incompatible fashion.
@@ -100,6 +100,7 @@ class RequestOptions(TypedDict, total=False):
100
100
  params: Query
101
101
  extra_json: AnyMapping
102
102
  idempotency_key: str
103
+ follow_redirects: bool
103
104
 
104
105
 
105
106
  # Sentinel class used until PEP 0661 is accepted
@@ -215,3 +216,4 @@ class _GenericAlias(Protocol):
215
216
 
216
217
  class HttpxSendArgs(TypedDict, total=False):
217
218
  auth: httpx.Auth
219
+ follow_redirects: bool
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "onebusaway"
4
- __version__ = "1.11.1" # x-release-please-version
4
+ __version__ = "1.12.1" # x-release-please-version
@@ -818,6 +818,33 @@ class TestOnebusawaySDK:
818
818
 
819
819
  assert response.http_request.headers.get("x-stainless-retry-count") == "42"
820
820
 
821
+ @pytest.mark.respx(base_url=base_url)
822
+ def test_follow_redirects(self, respx_mock: MockRouter) -> None:
823
+ # Test that the default follow_redirects=True allows following redirects
824
+ respx_mock.post("/redirect").mock(
825
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
826
+ )
827
+ respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
828
+
829
+ response = self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
830
+ assert response.status_code == 200
831
+ assert response.json() == {"status": "ok"}
832
+
833
+ @pytest.mark.respx(base_url=base_url)
834
+ def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
835
+ # Test that follow_redirects=False prevents following redirects
836
+ respx_mock.post("/redirect").mock(
837
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
838
+ )
839
+
840
+ with pytest.raises(APIStatusError) as exc_info:
841
+ self.client.post(
842
+ "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
843
+ )
844
+
845
+ assert exc_info.value.response.status_code == 302
846
+ assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
847
+
821
848
 
822
849
  class TestAsyncOnebusawaySDK:
823
850
  client = AsyncOnebusawaySDK(base_url=base_url, api_key=api_key, _strict_response_validation=True)
@@ -1634,3 +1661,30 @@ class TestAsyncOnebusawaySDK:
1634
1661
  raise AssertionError("calling get_platform using asyncify resulted in a hung process")
1635
1662
 
1636
1663
  time.sleep(0.1)
1664
+
1665
+ @pytest.mark.respx(base_url=base_url)
1666
+ async def test_follow_redirects(self, respx_mock: MockRouter) -> None:
1667
+ # Test that the default follow_redirects=True allows following redirects
1668
+ respx_mock.post("/redirect").mock(
1669
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
1670
+ )
1671
+ respx_mock.get("/redirected").mock(return_value=httpx.Response(200, json={"status": "ok"}))
1672
+
1673
+ response = await self.client.post("/redirect", body={"key": "value"}, cast_to=httpx.Response)
1674
+ assert response.status_code == 200
1675
+ assert response.json() == {"status": "ok"}
1676
+
1677
+ @pytest.mark.respx(base_url=base_url)
1678
+ async def test_follow_redirects_disabled(self, respx_mock: MockRouter) -> None:
1679
+ # Test that follow_redirects=False prevents following redirects
1680
+ respx_mock.post("/redirect").mock(
1681
+ return_value=httpx.Response(302, headers={"Location": f"{base_url}/redirected"})
1682
+ )
1683
+
1684
+ with pytest.raises(APIStatusError) as exc_info:
1685
+ await self.client.post(
1686
+ "/redirect", body={"key": "value"}, options={"follow_redirects": False}, cast_to=httpx.Response
1687
+ )
1688
+
1689
+ assert exc_info.value.response.status_code == 302
1690
+ assert exc_info.value.response.headers["Location"] == f"{base_url}/redirected"
@@ -1,3 +0,0 @@
1
- {
2
- ".": "1.11.1"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes