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.
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/PKG-INFO +76 -12
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/README.md +75 -11
- python_navitia_client-2.0.2/navitia_client/__init__.py +3 -0
- python_navitia_client-2.0.2/navitia_client/client/__init__.py +3 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/arrival_apis.py +95 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/contributors_apis.py +76 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/coverage_apis.py +91 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/datasets_apis.py +74 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/departure_apis.py +93 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/equipment_report_apis.py +84 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/freefloatings_nearby_apis.py +146 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/inverted_geocoding_apis.py +131 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/isochrone_apis.py +59 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/journeys_apis.py +77 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/line_report_apis.py +56 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/place_apis.py +47 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/places_nearby_apis.py +133 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transport_objects_apis.py +50 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/company_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/disruption_apis.py +113 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/entity_apis.py +162 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/line_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/network_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/route_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +111 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +112 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/route_schedules_apis.py +87 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/stop_schedules_apis.py +91 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/terminus_schedules_apis.py +95 -0
- python_navitia_client-2.0.2/navitia_client/client/apis/traffic_report_apis.py +61 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/__init__.py +45 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/arrival.py +62 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/base_entity_request.py +82 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/contributor.py +28 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/coverage.py +28 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/dataset.py +28 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/departure.py +67 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/equipment_report.py +46 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/freefloatings_nearby.py +40 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/inverted_geocoding.py +29 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/isochrone.py +75 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/journey.py +215 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/line_report.py +56 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/place.py +52 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/places_nearby.py +68 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transport_object.py +52 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/___init__.py +39 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/__init__.py +39 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/commercial_mode.py +24 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/company.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/disruption.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/line.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/network.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/physical_mode.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/route.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/stop_area.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/stop_point.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/public_transportations/vehicle_journey.py +25 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/route_schedule.py +67 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/stop_schedule.py +67 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/terminus_schedule.py +67 -0
- python_navitia_client-2.0.2/navitia_client/entities/request/traffic_report.py +56 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/__init__.py +18 -16
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/arrival.py +3 -3
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/contributor.py +1 -1
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/dataset.py +1 -1
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/departure.py +3 -3
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/direction.py +2 -2
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/isochrones.py +1 -1
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/journey.py +5 -5
- {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
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/line_report.py +2 -2
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/link.py +4 -4
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pt_datetime.py +1 -1
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/route_schedule.py +2 -2
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/schedule_table.py +4 -4
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_datetime.py +1 -1
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_schedule.py +4 -4
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/ticket.py +2 -2
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/traffic_report.py +2 -2
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/vehicle_journey.py +4 -4
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/pyproject.toml +1 -1
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/PKG-INFO +76 -12
- python_navitia_client-2.0.2/python_navitia_client.egg-info/SOURCES.txt +123 -0
- python_navitia_client-1.3.0/navitia_client/client/apis/arrival_apis.py +0 -207
- python_navitia_client-1.3.0/navitia_client/client/apis/contributors_apis.py +0 -107
- python_navitia_client-1.3.0/navitia_client/client/apis/coverage_apis.py +0 -131
- python_navitia_client-1.3.0/navitia_client/client/apis/datasets_apis.py +0 -105
- python_navitia_client-1.3.0/navitia_client/client/apis/departure_apis.py +0 -227
- python_navitia_client-1.3.0/navitia_client/client/apis/equipment_report_apis.py +0 -153
- python_navitia_client-1.3.0/navitia_client/client/apis/freefloatings_nearby_apis.py +0 -247
- python_navitia_client-1.3.0/navitia_client/client/apis/inverted_geocoding_apis.py +0 -199
- python_navitia_client-1.3.0/navitia_client/client/apis/isochrone_apis.py +0 -196
- python_navitia_client-1.3.0/navitia_client/client/apis/journeys_apis.py +0 -770
- python_navitia_client-1.3.0/navitia_client/client/apis/line_report_apis.py +0 -106
- python_navitia_client-1.3.0/navitia_client/client/apis/place_apis.py +0 -74
- python_navitia_client-1.3.0/navitia_client/client/apis/places_nearby_apis.py +0 -354
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transport_objects_apis.py +0 -88
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +0 -317
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/company_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/disruption_apis.py +0 -391
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/entity_apis.py +0 -352
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/line_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/network_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/route_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +0 -389
- python_navitia_client-1.3.0/navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +0 -390
- python_navitia_client-1.3.0/navitia_client/client/apis/route_schedules_apis.py +0 -189
- python_navitia_client-1.3.0/navitia_client/client/apis/stop_schedules_apis.py +0 -193
- python_navitia_client-1.3.0/navitia_client/client/apis/terminus_schedules_apis.py +0 -198
- python_navitia_client-1.3.0/navitia_client/client/apis/traffic_report_apis.py +0 -106
- python_navitia_client-1.3.0/navitia_client/client/raw/__init__.py +0 -0
- python_navitia_client-1.3.0/python_navitia_client.egg-info/SOURCES.txt +0 -90
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/LICENSE +0 -0
- {python_navitia_client-1.3.0/navitia_client → python_navitia_client-2.0.2/navitia_client/client/apis}/__init__.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/apis/api_base_client.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/apis/public_transportation_apis/__init__.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/exceptions.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/navitia_client.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/client → python_navitia_client-2.0.2/navitia_client/client/raw}/__init__.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/navitia_client/client/raw/raw_client.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/client/apis → python_navitia_client-2.0.2/navitia_client/entities}/__init__.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/access_point.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/address.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/administrative_region.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/base_entity.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/company.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/context.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/coord.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/display_information.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/disruption.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/equipment.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/equipment_reports.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/free_floating.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/network.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/note.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pagination.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/path.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pathway.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/physical_mode.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/place.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/poi.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/pt_object.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stand.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/stop_area.py +0 -0
- {python_navitia_client-1.3.0/navitia_client/entities → python_navitia_client-2.0.2/navitia_client/entities/response}/trip.py +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/dependency_links.txt +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/requires.txt +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/python_navitia_client.egg-info/top_level.txt +0 -0
- {python_navitia_client-1.3.0 → python_navitia_client-2.0.2}/setup.cfg +0 -0
- {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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
103
|
+
#### APIs with Request Objects (Journeys, Places, Schedules, etc.)
|
|
80
104
|
|
|
81
|
-
|
|
105
|
+
Most APIs now use Request objects for better type safety and maintainability:
|
|
82
106
|
|
|
83
|
-
|
|
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
|
-
|
|
123
|
+
Other examples:
|
|
86
124
|
|
|
87
125
|
```python
|
|
88
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
57
|
-
|
|
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
|
-
|
|
84
|
+
#### APIs with Request Objects (Journeys, Places, Schedules, etc.)
|
|
61
85
|
|
|
62
|
-
|
|
86
|
+
Most APIs now use Request objects for better type safety and maintainability:
|
|
63
87
|
|
|
64
|
-
|
|
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
|
-
|
|
104
|
+
Other examples:
|
|
67
105
|
|
|
68
106
|
```python
|
|
69
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,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())
|