python-navitia-client 1.3.0__tar.gz → 2.0.2__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 (156) hide show
  1. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/PKG-INFO +76 -12
  2. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/README.md +75 -11
  3. python_navitia_client-2.0.2/navitia_client/__init__.py +3 -0
  4. python_navitia_client-2.0.2/navitia_client/client/__init__.py +3 -0
  5. python_navitia_client-2.0.2/navitia_client/client/apis/arrival_apis.py +95 -0
  6. python_navitia_client-2.0.2/navitia_client/client/apis/contributors_apis.py +76 -0
  7. python_navitia_client-2.0.2/navitia_client/client/apis/coverage_apis.py +91 -0
  8. python_navitia_client-2.0.2/navitia_client/client/apis/datasets_apis.py +74 -0
  9. python_navitia_client-2.0.2/navitia_client/client/apis/departure_apis.py +93 -0
  10. python_navitia_client-2.0.2/navitia_client/client/apis/equipment_report_apis.py +84 -0
  11. python_navitia_client-2.0.2/navitia_client/client/apis/freefloatings_nearby_apis.py +146 -0
  12. python_navitia_client-2.0.2/navitia_client/client/apis/inverted_geocoding_apis.py +131 -0
  13. python_navitia_client-2.0.2/navitia_client/client/apis/isochrone_apis.py +59 -0
  14. python_navitia_client-2.0.2/navitia_client/client/apis/journeys_apis.py +77 -0
  15. python_navitia_client-2.0.2/navitia_client/client/apis/line_report_apis.py +56 -0
  16. python_navitia_client-2.0.2/navitia_client/client/apis/place_apis.py +47 -0
  17. python_navitia_client-2.0.2/navitia_client/client/apis/places_nearby_apis.py +133 -0
  18. python_navitia_client-2.0.2/navitia_client/client/apis/public_transport_objects_apis.py +50 -0
  19. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +111 -0
  20. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/company_apis.py +111 -0
  21. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/disruption_apis.py +113 -0
  22. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/entity_apis.py +162 -0
  23. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/line_apis.py +111 -0
  24. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/network_apis.py +111 -0
  25. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +111 -0
  26. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/route_apis.py +111 -0
  27. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +111 -0
  28. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +111 -0
  29. python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +112 -0
  30. python_navitia_client-2.0.2/navitia_client/client/apis/route_schedules_apis.py +87 -0
  31. python_navitia_client-2.0.2/navitia_client/client/apis/stop_schedules_apis.py +91 -0
  32. python_navitia_client-2.0.2/navitia_client/client/apis/terminus_schedules_apis.py +95 -0
  33. python_navitia_client-2.0.2/navitia_client/client/apis/traffic_report_apis.py +61 -0
  34. python_navitia_client-2.0.2/navitia_client/entities/request/__init__.py +45 -0
  35. python_navitia_client-2.0.2/navitia_client/entities/request/arrival.py +62 -0
  36. python_navitia_client-2.0.2/navitia_client/entities/request/base_entity_request.py +82 -0
  37. python_navitia_client-2.0.2/navitia_client/entities/request/contributor.py +28 -0
  38. python_navitia_client-2.0.2/navitia_client/entities/request/coverage.py +28 -0
  39. python_navitia_client-2.0.2/navitia_client/entities/request/dataset.py +28 -0
  40. python_navitia_client-2.0.2/navitia_client/entities/request/departure.py +67 -0
  41. python_navitia_client-2.0.2/navitia_client/entities/request/equipment_report.py +46 -0
  42. python_navitia_client-2.0.2/navitia_client/entities/request/freefloatings_nearby.py +40 -0
  43. python_navitia_client-2.0.2/navitia_client/entities/request/inverted_geocoding.py +29 -0
  44. python_navitia_client-2.0.2/navitia_client/entities/request/isochrone.py +75 -0
  45. python_navitia_client-2.0.2/navitia_client/entities/request/journey.py +215 -0
  46. python_navitia_client-2.0.2/navitia_client/entities/request/line_report.py +56 -0
  47. python_navitia_client-2.0.2/navitia_client/entities/request/place.py +52 -0
  48. python_navitia_client-2.0.2/navitia_client/entities/request/places_nearby.py +68 -0
  49. python_navitia_client-2.0.2/navitia_client/entities/request/public_transport_object.py +52 -0
  50. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/___init__.py +39 -0
  51. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/__init__.py +39 -0
  52. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/commercial_mode.py +24 -0
  53. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/company.py +25 -0
  54. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/disruption.py +25 -0
  55. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/line.py +25 -0
  56. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/network.py +25 -0
  57. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/physical_mode.py +25 -0
  58. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/route.py +25 -0
  59. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/stop_area.py +25 -0
  60. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/stop_point.py +25 -0
  61. python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/vehicle_journey.py +25 -0
  62. python_navitia_client-2.0.2/navitia_client/entities/request/route_schedule.py +67 -0
  63. python_navitia_client-2.0.2/navitia_client/entities/request/stop_schedule.py +67 -0
  64. python_navitia_client-2.0.2/navitia_client/entities/request/terminus_schedule.py +67 -0
  65. python_navitia_client-2.0.2/navitia_client/entities/request/traffic_report.py +56 -0
  66. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/__init__.py +18 -16
  67. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/arrival.py +3 -3
  68. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/contributor.py +1 -1
  69. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/dataset.py +1 -1
  70. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/departure.py +3 -3
  71. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/direction.py +2 -2
  72. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/isochrones.py +1 -1
  73. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/journey.py +5 -5
  74. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/line_and_route.py +4 -4
  75. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/line_report.py +2 -2
  76. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/link.py +4 -4
  77. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pt_datetime.py +1 -1
  78. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/route_schedule.py +2 -2
  79. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/schedule_table.py +4 -4
  80. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_datetime.py +1 -1
  81. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_schedule.py +4 -4
  82. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/ticket.py +2 -2
  83. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/traffic_report.py +2 -2
  84. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/vehicle_journey.py +4 -4
  85. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/pyproject.toml +1 -1
  86. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/PKG-INFO +76 -12
  87. python_navitia_client-2.0.2/python_navitia_client.egg-info/SOURCES.txt +123 -0
  88. python_navitia_client-1.3.0/navitia_client/client/apis/arrival_apis.py +0 -207
  89. python_navitia_client-1.3.0/navitia_client/client/apis/contributors_apis.py +0 -107
  90. python_navitia_client-1.3.0/navitia_client/client/apis/coverage_apis.py +0 -131
  91. python_navitia_client-1.3.0/navitia_client/client/apis/datasets_apis.py +0 -105
  92. python_navitia_client-1.3.0/navitia_client/client/apis/departure_apis.py +0 -227
  93. python_navitia_client-1.3.0/navitia_client/client/apis/equipment_report_apis.py +0 -153
  94. python_navitia_client-1.3.0/navitia_client/client/apis/freefloatings_nearby_apis.py +0 -247
  95. python_navitia_client-1.3.0/navitia_client/client/apis/inverted_geocoding_apis.py +0 -199
  96. python_navitia_client-1.3.0/navitia_client/client/apis/isochrone_apis.py +0 -196
  97. python_navitia_client-1.3.0/navitia_client/client/apis/journeys_apis.py +0 -770
  98. python_navitia_client-1.3.0/navitia_client/client/apis/line_report_apis.py +0 -106
  99. python_navitia_client-1.3.0/navitia_client/client/apis/place_apis.py +0 -74
  100. python_navitia_client-1.3.0/navitia_client/client/apis/places_nearby_apis.py +0 -354
  101. python_navitia_client-1.3.0/navitia_client/client/apis/public_transport_objects_apis.py +0 -88
  102. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +0 -317
  103. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/company_apis.py +0 -389
  104. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/disruption_apis.py +0 -391
  105. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/entity_apis.py +0 -352
  106. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/line_apis.py +0 -389
  107. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/network_apis.py +0 -389
  108. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +0 -389
  109. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/route_apis.py +0 -389
  110. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +0 -389
  111. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +0 -389
  112. python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +0 -390
  113. python_navitia_client-1.3.0/navitia_client/client/apis/route_schedules_apis.py +0 -189
  114. python_navitia_client-1.3.0/navitia_client/client/apis/stop_schedules_apis.py +0 -193
  115. python_navitia_client-1.3.0/navitia_client/client/apis/terminus_schedules_apis.py +0 -198
  116. python_navitia_client-1.3.0/navitia_client/client/apis/traffic_report_apis.py +0 -106
  117. python_navitia_client-1.3.0/navitia_client/client/raw/__init__.py +0 -0
  118. python_navitia_client-1.3.0/python_navitia_client.egg-info/SOURCES.txt +0 -90
  119. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/LICENSE +0 -0
  120. {python_navitia_client-1.3.0/navitia_client → python_navitia_client-2.0.2/navitia_client/client/apis}/__init__.py +0 -0
  121. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/apis/api_base_client.py +0 -0
  122. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/apis/public_transportation_apis/__init__.py +0 -0
  123. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/exceptions.py +0 -0
  124. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/navitia_client.py +0 -0
  125. {python_navitia_client-1.3.0/navitia_client/client → python_navitia_client-2.0.2/navitia_client/client/raw}/__init__.py +0 -0
  126. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/raw/raw_client.py +0 -0
  127. {python_navitia_client-1.3.0/navitia_client/client/apis → python_navitia_client-2.0.2/navitia_client/entities}/__init__.py +0 -0
  128. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/access_point.py +0 -0
  129. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/address.py +0 -0
  130. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/administrative_region.py +0 -0
  131. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/base_entity.py +0 -0
  132. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/company.py +0 -0
  133. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/context.py +0 -0
  134. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/coord.py +0 -0
  135. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/display_information.py +0 -0
  136. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/disruption.py +0 -0
  137. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/equipment.py +0 -0
  138. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/equipment_reports.py +0 -0
  139. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/free_floating.py +0 -0
  140. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/network.py +0 -0
  141. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/note.py +0 -0
  142. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pagination.py +0 -0
  143. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/path.py +0 -0
  144. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pathway.py +0 -0
  145. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/physical_mode.py +0 -0
  146. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/place.py +0 -0
  147. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/poi.py +0 -0
  148. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pt_object.py +0 -0
  149. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stand.py +0 -0
  150. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_area.py +0 -0
  151. {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/trip.py +0 -0
  152. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/dependency_links.txt +0 -0
  153. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/requires.txt +0 -0
  154. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/top_level.txt +0 -0
  155. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/setup.cfg +0 -0
  156. {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/tests/test_navitia_client.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-navitia-client
3
- Version: 1.3.0
3
+ Version: 2.0.2
4
4
  Summary: Python library to use with Navitia APIs
5
5
  Author-email: Jonathan Perron <jonathan@perron.bzh>
6
6
  License: MIT License
@@ -25,7 +25,12 @@ Dynamic: license-file
25
25
 
26
26
  This repository provides a unofficial Python wrapper to use [navitia.io APIs](https://doc.navitia.io).
27
27
 
28
- ##  Pre-requisites
28
+ > **⚠️ Version 2.0.0 Breaking Changes**
29
+ >
30
+ > Version 2.0.0 introduces breaking changes with the adoption of Request objects for all API methods.
31
+ > If you're upgrading from v1.x, please see the [CHANGELOG](CHANGELOG.md) for the migration guide.
32
+
33
+ ## Pre-requisites
29
34
 
30
35
  To use this library, you will need an access token from [navitia.io](https://navitia.io/tarifs/).
31
36
 
@@ -69,30 +74,89 @@ To use this library, you need an authentication token provided by Navitia.io.
69
74
 
70
75
  ### Create client instance
71
76
 
72
- Once created, you will create an instance of the NavitiaClient class with the following:
77
+ Create an instance of the NavitiaClient class with your authentication token:
78
+
79
+ ```python
80
+ from navitia_client import NavitiaClient
81
+
82
+ client = NavitiaClient(auth="YOUR_TOKEN_HERE")
83
+ ```
84
+
85
+ A base URL for Navitia IO is hardcoded and provided to NavitiaClient by default. It can be updated using the `base_navitia_url` parameter.
86
+
87
+ ### Access APIs data
88
+
89
+ URLs are mapped as properties in the `NavitiaClient` class. You can find the mapping [here](docs/api_support/).
90
+
91
+ #### Simple APIs (Coverage, Datasets, Contributors)
92
+
93
+ For simple APIs like coverage, datasets, and contributors, you can call methods directly:
73
94
 
74
95
  ```python
75
- from navitia_client.client import NavitiaClient
76
- client = NavitiaClient(auth=<YOUR_TOKEN_HERE>)
96
+ # Get coverage information
97
+ regions = client.coverage.list_coverage_regions()
98
+
99
+ # Get datasets for a region
100
+ datasets, pagination = client.datasets.list_datasets(region_id="fr-idf")
77
101
  ```
78
102
 
79
- A base URL for Navitia IO is hardcoded and provided to NavitiaClient by default. It can be updated using the base_navitia_url parameter.
103
+ #### APIs with Request Objects (Journeys, Places, Schedules, etc.)
80
104
 
81
- ###  Access APIs data
105
+ Most APIs now use Request objects for better type safety and maintainability:
82
106
 
83
- URLs are mapped as property in the class `NavitiaClient`. You can find the mapping [here](docs/api_support/).
107
+ ```python
108
+ from navitia_client.entities.request.journey import JourneyRequest
109
+ from datetime import datetime
110
+
111
+ # Create a journey request
112
+ request = JourneyRequest(
113
+ from_="stop_area:RAT:SA:GDLYO",
114
+ to_="stop_area:RAT:SA:CHDEG",
115
+ datetime_=datetime(2024, 6, 1, 8, 0),
116
+ count=5
117
+ )
118
+
119
+ # Get journeys
120
+ journeys = client.journeys.list_journeys(request=request)
121
+ ```
84
122
 
85
- For example, if you want to have the list of datasets in a given region, use:
123
+ Other examples:
86
124
 
87
125
  ```python
88
- datasets, pagination = client.datasets.list_datasets(region_id=<REGION_ID>)
126
+ from navitia_client.entities.request.places_nearby import PlacesNearbyRequest
127
+
128
+ # Places nearby with custom parameters
129
+ request = PlacesNearbyRequest(
130
+ distance=1000,
131
+ type=["stop_area", "stop_point"],
132
+ count=20
133
+ )
134
+ places, pagination = client.places_nearby.list_objects_by_region_id_and_path(
135
+ region_id="fr-idf",
136
+ resource_path="lines/line:RAT:M1",
137
+ request=request
138
+ )
89
139
  ```
90
140
 
91
141
  ### Pagination
92
142
 
93
- A couple of APIs are paginated, in particular the public transporations APIs.. In such case, you can navigate in the response using the parameters `start_page` and `count`.
143
+ Several APIs are paginated, particularly the public transportation APIs. You can navigate through results using the `start_page` and `count` parameters in Request objects:
144
+
145
+ ```python
146
+ from navitia_client.entities.request.journey import JourneyRequest
147
+
148
+ # Request with pagination
149
+ request = JourneyRequest(
150
+ from_="stop_area:RAT:SA:GDLYO",
151
+ to_="stop_area:RAT:SA:CHDEG",
152
+ start_page=0, # First page
153
+ count=10 # 10 results per page
154
+ )
155
+
156
+ journeys = client.journeys.list_journeys(request=request)
157
+ ```
94
158
 
95
- An object `Pagination` will be provided by the impacted methods to help you navigating.
159
+ A `Pagination` object is provided by paginated methods to help you navigate through results.
96
160
 
97
161
  ### Tips
98
162
 
@@ -6,7 +6,12 @@
6
6
 
7
7
  This repository provides a unofficial Python wrapper to use [navitia.io APIs](https://doc.navitia.io).
8
8
 
9
- ##  Pre-requisites
9
+ > **⚠️ Version 2.0.0 Breaking Changes**
10
+ >
11
+ > Version 2.0.0 introduces breaking changes with the adoption of Request objects for all API methods.
12
+ > If you're upgrading from v1.x, please see the [CHANGELOG](CHANGELOG.md) for the migration guide.
13
+
14
+ ## Pre-requisites
10
15
 
11
16
  To use this library, you will need an access token from [navitia.io](https://navitia.io/tarifs/).
12
17
 
@@ -50,30 +55,89 @@ To use this library, you need an authentication token provided by Navitia.io.
50
55
 
51
56
  ### Create client instance
52
57
 
53
- Once created, you will create an instance of the NavitiaClient class with the following:
58
+ Create an instance of the NavitiaClient class with your authentication token:
59
+
60
+ ```python
61
+ from navitia_client import NavitiaClient
62
+
63
+ client = NavitiaClient(auth="YOUR_TOKEN_HERE")
64
+ ```
65
+
66
+ A base URL for Navitia IO is hardcoded and provided to NavitiaClient by default. It can be updated using the `base_navitia_url` parameter.
67
+
68
+ ### Access APIs data
69
+
70
+ URLs are mapped as properties in the `NavitiaClient` class. You can find the mapping [here](docs/api_support/).
71
+
72
+ #### Simple APIs (Coverage, Datasets, Contributors)
73
+
74
+ For simple APIs like coverage, datasets, and contributors, you can call methods directly:
54
75
 
55
76
  ```python
56
- from navitia_client.client import NavitiaClient
57
- client = NavitiaClient(auth=<YOUR_TOKEN_HERE>)
77
+ # Get coverage information
78
+ regions = client.coverage.list_coverage_regions()
79
+
80
+ # Get datasets for a region
81
+ datasets, pagination = client.datasets.list_datasets(region_id="fr-idf")
58
82
  ```
59
83
 
60
- A base URL for Navitia IO is hardcoded and provided to NavitiaClient by default. It can be updated using the base_navitia_url parameter.
84
+ #### APIs with Request Objects (Journeys, Places, Schedules, etc.)
61
85
 
62
- ###  Access APIs data
86
+ Most APIs now use Request objects for better type safety and maintainability:
63
87
 
64
- URLs are mapped as property in the class `NavitiaClient`. You can find the mapping [here](docs/api_support/).
88
+ ```python
89
+ from navitia_client.entities.request.journey import JourneyRequest
90
+ from datetime import datetime
91
+
92
+ # Create a journey request
93
+ request = JourneyRequest(
94
+ from_="stop_area:RAT:SA:GDLYO",
95
+ to_="stop_area:RAT:SA:CHDEG",
96
+ datetime_=datetime(2024, 6, 1, 8, 0),
97
+ count=5
98
+ )
99
+
100
+ # Get journeys
101
+ journeys = client.journeys.list_journeys(request=request)
102
+ ```
65
103
 
66
- For example, if you want to have the list of datasets in a given region, use:
104
+ Other examples:
67
105
 
68
106
  ```python
69
- datasets, pagination = client.datasets.list_datasets(region_id=<REGION_ID>)
107
+ from navitia_client.entities.request.places_nearby import PlacesNearbyRequest
108
+
109
+ # Places nearby with custom parameters
110
+ request = PlacesNearbyRequest(
111
+ distance=1000,
112
+ type=["stop_area", "stop_point"],
113
+ count=20
114
+ )
115
+ places, pagination = client.places_nearby.list_objects_by_region_id_and_path(
116
+ region_id="fr-idf",
117
+ resource_path="lines/line:RAT:M1",
118
+ request=request
119
+ )
70
120
  ```
71
121
 
72
122
  ### Pagination
73
123
 
74
- A couple of APIs are paginated, in particular the public transporations APIs.. In such case, you can navigate in the response using the parameters `start_page` and `count`.
124
+ Several APIs are paginated, particularly the public transportation APIs. You can navigate through results using the `start_page` and `count` parameters in Request objects:
125
+
126
+ ```python
127
+ from navitia_client.entities.request.journey import JourneyRequest
128
+
129
+ # Request with pagination
130
+ request = JourneyRequest(
131
+ from_="stop_area:RAT:SA:GDLYO",
132
+ to_="stop_area:RAT:SA:CHDEG",
133
+ start_page=0, # First page
134
+ count=10 # 10 results per page
135
+ )
136
+
137
+ journeys = client.journeys.list_journeys(request=request)
138
+ ```
75
139
 
76
- An object `Pagination` will be provided by the impacted methods to help you navigating.
140
+ A `Pagination` object is provided by paginated methods to help you navigate through results.
77
141
 
78
142
  ### Tips
79
143
 
@@ -0,0 +1,3 @@
1
+ # ruff: noqa: F401
2
+
3
+ from .client import NavitiaClient
@@ -0,0 +1,3 @@
1
+ # ruff: noqa: F401
2
+
3
+ from .navitia_client import NavitiaClient
@@ -0,0 +1,95 @@
1
+ from typing import Any, Sequence, Tuple
2
+ from navitia_client.client.apis.api_base_client import ApiBaseClient
3
+ from navitia_client.entities.request.arrival import ArrivalRequest
4
+ from navitia_client.entities.response import Pagination
5
+ from navitia_client.entities.response.arrival import Arrival
6
+
7
+
8
+ class ArrivalApiClient(ApiBaseClient):
9
+ """Client class to interact with the Navitia API for fetching arrival information.
10
+
11
+ See https://doc.navitia.io/#arrivals
12
+ """
13
+
14
+ @staticmethod
15
+ def _get_arrival_objects_from_response(
16
+ response: Any,
17
+ ) -> Sequence[Arrival]:
18
+ """Convert raw response data into a list of Arrival objects.
19
+
20
+ Args:
21
+ response: The raw response data from the API containing arrivals' information.
22
+
23
+ Returns:
24
+ A list of Arrival objects created from the raw response data.
25
+ """
26
+
27
+ arrivals = []
28
+ for arrival_data in response:
29
+ arrivals.append(Arrival.from_payload(arrival_data))
30
+
31
+ return arrivals
32
+
33
+ def _get_arrivals(
34
+ self, url: str, filters: dict
35
+ ) -> Tuple[Sequence[Arrival], Pagination]:
36
+ """Fetch arrivals based on a given URL and filters.
37
+
38
+ Args:
39
+ url: The URL for the API request.
40
+ filters: The filters to apply to the API request.
41
+
42
+ Returns:
43
+ A tuple containing a list of Arrival objects and a Pagination object for managing result pages.
44
+ """
45
+ results = self.get_navitia_api(url + self._generate_filter_query(filters))
46
+ raw_results = results.json()["arrivals"]
47
+ pagination = Pagination.from_payload(results.json()["pagination"])
48
+ return self._get_arrival_objects_from_response(raw_results), pagination
49
+
50
+ def list_arrivals_by_region_id_and_path(
51
+ self,
52
+ region_id: str,
53
+ resource_path: str,
54
+ request: ArrivalRequest,
55
+ ) -> Tuple[Sequence[Arrival], Pagination]:
56
+ """Retrieve a list of arrivals for a specific region and resource path.
57
+
58
+ Args:
59
+ region_id: The identifier of the region to fetch arrivals from.
60
+ resource_path: The resource path within the region to fetch arrivals for.
61
+ request: The ArrivalRequest containing filters and parameters for the query.
62
+
63
+ Returns:
64
+ A tuple containing a list of Arrival objects and a Pagination object for managing result pages.
65
+ """
66
+ request_url = (
67
+ f"{self.base_navitia_url}/coverage/{region_id}/{resource_path}/arrivals"
68
+ )
69
+
70
+ return self._get_arrivals(request_url, request.to_filters())
71
+
72
+ def list_arrivals_by_coordinates(
73
+ self,
74
+ region_lon: float,
75
+ region_lat: float,
76
+ lon: float,
77
+ lat: float,
78
+ request: ArrivalRequest,
79
+ ) -> Tuple[Sequence[Arrival], Pagination]:
80
+ """Retrieve a list of arrivals for specific coordinates.
81
+
82
+ Args:
83
+ region_lon: The longitude of the region to fetch arrivals from.
84
+ region_lat: The latitude of the region to fetch arrivals from.
85
+ lon: The longitude of the specific location to fetch arrivals for.
86
+ lat: The latitude of the specific location to fetch arrivals for.
87
+ request: The ArrivalRequest containing filters and parameters for the query.
88
+
89
+ Returns:
90
+ A tuple containing a list of Arrival objects and a Pagination object for managing result pages.
91
+ """
92
+ # List of objects near the resource, navitia guesses the region from coordinates
93
+ request_url = f"{self.base_navitia_url}/coverage/{region_lon};{region_lat}/coords/{lon};{lat}/arrivals"
94
+
95
+ return self._get_arrivals(request_url, request.to_filters())
@@ -0,0 +1,76 @@
1
+ from typing import Any, Sequence, Tuple
2
+
3
+ from navitia_client.client.apis.api_base_client import ApiBaseClient
4
+ from navitia_client.entities.request.contributor import ContributorRequest
5
+ from navitia_client.entities.response.contributor import Contributor
6
+ from navitia_client.entities.response import Pagination
7
+
8
+
9
+ class ContributorsApiClient(ApiBaseClient):
10
+ """Client class to interact with the Navitia API for fetching contributors.
11
+
12
+ See https://doc.navitia.io/#contributors
13
+ """
14
+
15
+ @staticmethod
16
+ def _get_contributors_from_response(
17
+ raw_contributors_response: Any,
18
+ ) -> Sequence[Contributor]:
19
+ """Convert raw response data into a list of Contributor objects.
20
+
21
+ Args:
22
+ raw_contributors_response: The raw response data from the API containing contributors' information.
23
+
24
+ Returns:
25
+ A list of Contributor objects created from the raw response data.
26
+ """
27
+ contributors = []
28
+ for contributor_data in raw_contributors_response:
29
+ contributors.append(Contributor.from_payload(contributor_data))
30
+
31
+ return contributors
32
+
33
+ def list_contributors(
34
+ self, region_id: str, request: ContributorRequest
35
+ ) -> Tuple[Sequence[Contributor], Pagination]:
36
+ """Retrieve a list of contributors for a specific region.
37
+
38
+ Args:
39
+ region_id: The identifier of the region to fetch contributors from.
40
+ request: The request object containing query parameters.
41
+
42
+ Returns:
43
+ A tuple containing a list of Contributor objects and a Pagination object for managing result pages.
44
+ """
45
+ url = f"{self.base_navitia_url}/coverage/{region_id}/contributors"
46
+ results = self.get_navitia_api(
47
+ url + self._generate_filter_query(request.to_filters())
48
+ )
49
+ raw_results = results.json()["contributors"]
50
+ pagination = Pagination.from_payload(results.json()["pagination"])
51
+ return ContributorsApiClient._get_contributors_from_response(
52
+ raw_results
53
+ ), pagination
54
+
55
+ def get_contributor_on_dataset(
56
+ self, region_id: str, dataset_id: str, request: ContributorRequest
57
+ ) -> Tuple[Sequence[Contributor], Pagination]:
58
+ """Retrieve a list of contributors for a specific dataset in a region.
59
+
60
+ Args:
61
+ region_id: The identifier of the region to fetch contributors from.
62
+ dataset_id: The identifier of the dataset to fetch contributors for.
63
+ request: The request object containing query parameters.
64
+
65
+ Returns:
66
+ A tuple containing a list of Contributor objects and a Pagination object for managing result pages.
67
+ """
68
+ url = f"{self.base_navitia_url}/coverage/{region_id}/contributors/{dataset_id}"
69
+ results = self.get_navitia_api(
70
+ url + self._generate_filter_query(request.to_filters())
71
+ )
72
+ raw_results = results.json()["contributors"]
73
+ pagination = Pagination.from_payload(results.json()["pagination"])
74
+ return ContributorsApiClient._get_contributors_from_response(
75
+ raw_results
76
+ ), pagination
@@ -0,0 +1,91 @@
1
+ from typing import Any, Sequence, Tuple
2
+
3
+ from navitia_client.client.apis.api_base_client import ApiBaseClient
4
+ from navitia_client.entities.request.coverage import CoverageRequest
5
+ from navitia_client.entities.response.administrative_region import Region
6
+ from navitia_client.entities.response import Pagination
7
+
8
+
9
+ class CoverageApiClient(ApiBaseClient):
10
+ """Client class to interact with the Navitia API for fetching coverage area information.
11
+
12
+ See https://doc.navitia.io/#coverage
13
+ """
14
+
15
+ @staticmethod
16
+ def _get_regions_from_response(raw_regions_response: Any) -> Sequence[Region]:
17
+ """Convert raw response data into a list of Region objects.
18
+
19
+ Args:
20
+ raw_regions_response: The raw response data from the API containing regions' information.
21
+
22
+ Returns:
23
+ A list of Region objects created from the raw response data.
24
+ """
25
+ regions = []
26
+ for region_data in raw_regions_response:
27
+ regions.append(Region.from_payload(region_data))
28
+ return regions
29
+
30
+ def list_covered_areas(
31
+ self, request: CoverageRequest
32
+ ) -> Tuple[Sequence[Region], Pagination]:
33
+ """Retrieve a list of covered areas from the Navitia API.
34
+
35
+ Args:
36
+ request: The request object containing query parameters.
37
+
38
+ Returns:
39
+ A tuple containing a list of Region objects and a Pagination object for managing result pages.
40
+ """
41
+ url = f"{self.base_navitia_url}/coverage"
42
+ results = self.get_navitia_api(
43
+ url + self._generate_filter_query(request.to_filters())
44
+ )
45
+ result_regions = results.json()["regions"]
46
+ regions = CoverageApiClient._get_regions_from_response(result_regions)
47
+ pagination = Pagination.from_payload(results.json()["pagination"])
48
+ return regions, pagination
49
+
50
+ def get_coverage_by_region_id(
51
+ self, region_id: str, request: CoverageRequest
52
+ ) -> Tuple[Sequence[Region], Pagination]:
53
+ """Retrieve information about a specific region by its ID.
54
+
55
+ Args:
56
+ region_id: The identifier of the region to fetch information about.
57
+ request: The request object containing query parameters.
58
+
59
+ Returns:
60
+ A tuple containing a list of Region objects and a Pagination object for managing result pages.
61
+ """
62
+ url = f"{self.base_navitia_url}/coverage/{region_id}"
63
+ results = self.get_navitia_api(
64
+ url + self._generate_filter_query(request.to_filters())
65
+ )
66
+ result_regions = results.json()["regions"]
67
+ regions = CoverageApiClient._get_regions_from_response(result_regions)
68
+ pagination = Pagination.from_payload(results.json()["pagination"])
69
+ return regions, pagination
70
+
71
+ def get_coverage_by_region_coordinates_and_coordinates(
72
+ self, lon: float, lat: float, request: CoverageRequest
73
+ ) -> Tuple[Sequence[Region], Pagination]:
74
+ """Retrieve information about a region based on coordinates.
75
+
76
+ Args:
77
+ lon: The longitude of the location to fetch information about.
78
+ lat: The latitude of the location to fetch information about.
79
+ request: The request object containing query parameters.
80
+
81
+ Returns:
82
+ A tuple containing a list of Region objects and a Pagination object for managing result pages.
83
+ """
84
+ url = f"{self.base_navitia_url}/coverage/{lon};{lat}"
85
+ results = self.get_navitia_api(
86
+ url + self._generate_filter_query(request.to_filters())
87
+ )
88
+ result_regions = results.json()["regions"]
89
+ regions = CoverageApiClient._get_regions_from_response(result_regions)
90
+ pagination = Pagination.from_payload(results.json()["pagination"])
91
+ return regions, pagination
@@ -0,0 +1,74 @@
1
+ from typing import Any, Sequence, Tuple
2
+
3
+ from navitia_client.client.apis.api_base_client import ApiBaseClient
4
+ from navitia_client.entities.request.dataset import DatasetRequest
5
+ from navitia_client.entities.response.dataset import Dataset
6
+ from navitia_client.entities.response import Pagination
7
+
8
+
9
+ class DatasetsApiClient(ApiBaseClient):
10
+ """Client class to interact with the Navitia API for fetching dataset information.
11
+
12
+ See https://doc.navitia.io/#datasets
13
+ """
14
+
15
+ @staticmethod
16
+ def _get_datasets_from_response(raw_datasets_response: Any) -> Sequence[Dataset]:
17
+ """Convert raw response data into a list of Dataset objects.
18
+
19
+ Args:
20
+ raw_datasets_response: The raw response data from the API containing datasets' information.
21
+
22
+ Returns:
23
+ A list of Dataset objects created from the raw response data.
24
+ """
25
+ datasets = []
26
+ for dataset in raw_datasets_response:
27
+ dataset_contributor = dataset.get("contributor")
28
+ if not dataset_contributor:
29
+ continue
30
+
31
+ datasets.append(Dataset.from_payload(dataset))
32
+
33
+ return datasets
34
+
35
+ def list_datasets(
36
+ self, region_id: str, request: DatasetRequest
37
+ ) -> Tuple[Sequence[Dataset], Pagination]:
38
+ """Retrieve a list of datasets for a specified region from the Navitia API.
39
+
40
+ Args:
41
+ region_id: The identifier of the region to fetch datasets from.
42
+ request: The request object containing query parameters.
43
+
44
+ Returns:
45
+ A tuple containing a list of Dataset objects and a Pagination object for managing result pages.
46
+ """
47
+ url = f"{self.base_navitia_url}/coverage/{region_id}/datasets"
48
+ results = self.get_navitia_api(
49
+ url + self._generate_filter_query(request.to_filters())
50
+ )
51
+ raw_results = results.json()["datasets"]
52
+ pagination = Pagination.from_payload(results.json()["pagination"])
53
+ return DatasetsApiClient._get_datasets_from_response(raw_results), pagination
54
+
55
+ def get_dataset_by_id(
56
+ self, region_id: str, dataset_id: str, request: DatasetRequest
57
+ ) -> Tuple[Sequence[Dataset], Pagination]:
58
+ """Retrieve information about a specific dataset by its ID within a region.
59
+
60
+ Args:
61
+ region_id: The identifier of the region to fetch the dataset from.
62
+ dataset_id: The identifier of the dataset to fetch.
63
+ request: The request object containing query parameters.
64
+
65
+ Returns:
66
+ A tuple containing a list of Dataset objects and a Pagination object for managing result pages.
67
+ """
68
+ url = f"{self.base_navitia_url}/coverage/{region_id}/datasets/{dataset_id}"
69
+ results = self.get_navitia_api(
70
+ url + self._generate_filter_query(request.to_filters())
71
+ )
72
+ raw_results = results.json()["datasets"]
73
+ pagination = Pagination.from_payload(results.json()["pagination"])
74
+ return DatasetsApiClient._get_datasets_from_response(raw_results), pagination
@@ -0,0 +1,93 @@
1
+ from typing import Any, Sequence, Tuple
2
+ from navitia_client.client.apis.api_base_client import ApiBaseClient
3
+ from navitia_client.entities.request.departure import DepartureRequest
4
+ from navitia_client.entities.response import Pagination
5
+ from navitia_client.entities.response.departure import Departure
6
+
7
+
8
+ class DepartureApiClient(ApiBaseClient):
9
+ """Client for interacting with the Navitia API to retrieve departure schedules.
10
+
11
+ See https://doc.navitia.io/#departures
12
+ """
13
+
14
+ @staticmethod
15
+ def _get_departure_objects_from_response(
16
+ response: Any,
17
+ ) -> Sequence[Departure]:
18
+ """Convert raw response data into a list of Departure objects.
19
+
20
+ Args:
21
+ response: The raw response data from the API containing departures' information.
22
+
23
+ Returns:
24
+ A list of Departure objects created from the raw response data.
25
+ """
26
+ departures = []
27
+ for departure_data in response:
28
+ departures.append(Departure.from_payload(departure_data))
29
+
30
+ return departures
31
+
32
+ def _get_departures(
33
+ self, url: str, filters: dict
34
+ ) -> Tuple[Sequence[Departure], Pagination]:
35
+ """Fetch departures from the Navitia API based on the provided URL and filters.
36
+
37
+ Args:
38
+ url: The URL to fetch departures from.
39
+ filters: A dictionary of filters to apply to the query.
40
+
41
+ Returns:
42
+ A tuple containing a list of Departure objects and a Pagination object for managing result pages.
43
+ """
44
+ results = self.get_navitia_api(url + self._generate_filter_query(filters))
45
+ raw_results = results.json()["departures"]
46
+ pagination = Pagination.from_payload(results.json()["pagination"])
47
+ return self._get_departure_objects_from_response(raw_results), pagination
48
+
49
+ def list_departures_by_region_id_and_path(
50
+ self,
51
+ region_id: str,
52
+ resource_path: str,
53
+ request: DepartureRequest,
54
+ ) -> Tuple[Sequence[Departure], Pagination]:
55
+ """Retrieve a list of departures for a specified region and resource path.
56
+
57
+ Args:
58
+ region_id: The identifier of the region to fetch departures from.
59
+ resource_path: The resource path to fetch departures for.
60
+ request: The request object containing query parameters.
61
+
62
+ Returns:
63
+ A tuple containing a list of Departure objects and a Pagination object for managing result pages.
64
+ """
65
+ request_url = (
66
+ f"{self.base_navitia_url}/coverage/{region_id}/{resource_path}/departures"
67
+ )
68
+
69
+ return self._get_departures(request_url, request.to_filters())
70
+
71
+ def list_departures_by_coordinates(
72
+ self,
73
+ region_lon: float,
74
+ region_lat: float,
75
+ lon: float,
76
+ lat: float,
77
+ request: DepartureRequest,
78
+ ) -> Tuple[Sequence[Departure], Pagination]:
79
+ """Retrieve a list of departures for a specified region and coordinates.
80
+
81
+ Args:
82
+ region_lon: The longitude of the region.
83
+ region_lat: The latitude of the region.
84
+ lon: The longitude of the specific location.
85
+ lat: The latitude of the specific location.
86
+ request: The request object containing query parameters.
87
+
88
+ Returns:
89
+ A tuple containing a list of Departure objects and a Pagination object for managing result pages.
90
+ """
91
+ request_url = f"{self.base_navitia_url}/coverage/{region_lon};{region_lat}/coords/{lon};{lat}/departures"
92
+
93
+ return self._get_departures(request_url, request.to_filters())