python-navitia-client 1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- navitia_client/__init__.py +0 -0
- navitia_client/client/__init__.py +0 -0
- navitia_client/client/apis/__init__.py +0 -0
- navitia_client/client/apis/api_base_client.py +50 -0
- navitia_client/client/apis/arrival_apis.py +191 -0
- navitia_client/client/apis/contributors_apis.py +107 -0
- navitia_client/client/apis/coverage_apis.py +131 -0
- navitia_client/client/apis/datasets_apis.py +105 -0
- navitia_client/client/apis/departure_apis.py +211 -0
- navitia_client/client/apis/inverted_geocoding_apis.py +199 -0
- navitia_client/client/apis/isochrone_apis.py +196 -0
- navitia_client/client/apis/journeys_apis.py +629 -0
- navitia_client/client/apis/line_report_apis.py +106 -0
- navitia_client/client/apis/place_apis.py +74 -0
- navitia_client/client/apis/places_nearby_apis.py +354 -0
- navitia_client/client/apis/public_transport_objects_apis.py +88 -0
- navitia_client/client/apis/public_transportation_apis/__init__.py +10 -0
- navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +251 -0
- navitia_client/client/apis/public_transportation_apis/company_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/disruption_apis.py +305 -0
- navitia_client/client/apis/public_transportation_apis/entity_apis.py +330 -0
- navitia_client/client/apis/public_transportation_apis/line_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/network_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/route_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +303 -0
- navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +304 -0
- navitia_client/client/apis/route_schedules_apis.py +177 -0
- navitia_client/client/apis/stop_schedules_apis.py +181 -0
- navitia_client/client/apis/terminus_schedules_apis.py +186 -0
- navitia_client/client/apis/traffic_report_apis.py +106 -0
- navitia_client/client/exceptions.py +18 -0
- navitia_client/client/navitia_client.py +302 -0
- navitia_client/client/raw/__init__.py +0 -0
- navitia_client/client/raw/raw_client.py +58 -0
- navitia_client/entities/__init__.py +23 -0
- navitia_client/entities/access_point.py +10 -0
- navitia_client/entities/address.py +28 -0
- navitia_client/entities/administrative_region.py +59 -0
- navitia_client/entities/arrival.py +21 -0
- navitia_client/entities/base_entity.py +7 -0
- navitia_client/entities/company.py +16 -0
- navitia_client/entities/context.py +10 -0
- navitia_client/entities/contributor.py +19 -0
- navitia_client/entities/coord.py +15 -0
- navitia_client/entities/dataset.py +32 -0
- navitia_client/entities/departure.py +21 -0
- navitia_client/entities/direction.py +24 -0
- navitia_client/entities/display_information.py +43 -0
- navitia_client/entities/disruption.py +233 -0
- navitia_client/entities/equipment.py +42 -0
- navitia_client/entities/equipment_reports.py +10 -0
- navitia_client/entities/isochrones.py +30 -0
- navitia_client/entities/journey.py +133 -0
- navitia_client/entities/line_and_route.py +76 -0
- navitia_client/entities/line_report.py +18 -0
- navitia_client/entities/link.py +44 -0
- navitia_client/entities/network.py +16 -0
- navitia_client/entities/note.py +7 -0
- navitia_client/entities/pagination.py +19 -0
- navitia_client/entities/path.py +30 -0
- navitia_client/entities/pathway.py +11 -0
- navitia_client/entities/physical_mode.py +92 -0
- navitia_client/entities/place.py +40 -0
- navitia_client/entities/poi.py +16 -0
- navitia_client/entities/pt_datetime.py +31 -0
- navitia_client/entities/pt_object.py +57 -0
- navitia_client/entities/route_schedule.py +19 -0
- navitia_client/entities/schedule_table.py +59 -0
- navitia_client/entities/stand.py +16 -0
- navitia_client/entities/stop_area.py +82 -0
- navitia_client/entities/stop_datetime.py +39 -0
- navitia_client/entities/stop_schedule.py +59 -0
- navitia_client/entities/ticket.py +49 -0
- navitia_client/entities/traffic_report.py +21 -0
- navitia_client/entities/trip.py +13 -0
- navitia_client/entities/vehicle_journey.py +163 -0
- python_navitia_client-1.1.0.dist-info/LICENSE +21 -0
- python_navitia_client-1.1.0.dist-info/METADATA +114 -0
- python_navitia_client-1.1.0.dist-info/RECORD +83 -0
- python_navitia_client-1.1.0.dist-info/WHEEL +5 -0
- python_navitia_client-1.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# ruff: noqa: F401
|
|
2
|
+
|
|
3
|
+
from .base_entity import BaseEntity
|
|
4
|
+
from .coord import Coord
|
|
5
|
+
from .administrative_region import AdministrativeRegion
|
|
6
|
+
from .stand import StandStatus, Stands
|
|
7
|
+
from .poi import POIType, POI
|
|
8
|
+
from .trip import Trip
|
|
9
|
+
from .stop_area import StopArea, StopPoint
|
|
10
|
+
from .network import Network
|
|
11
|
+
from .address import Address
|
|
12
|
+
from .physical_mode import PhysicalModeId, CommercialMode, PhysicalMode
|
|
13
|
+
from .place import Place, PlaceEmbeddedType
|
|
14
|
+
from .pt_object import PtObject, PtObjectEmbeddedType
|
|
15
|
+
from .line_and_route import Line, Route
|
|
16
|
+
from .disruption import DisruptionStatus, Disruption
|
|
17
|
+
from .context import Context
|
|
18
|
+
from .pt_datetime import PTDatetime
|
|
19
|
+
from .note import Note
|
|
20
|
+
from .stop_datetime import StopDateTime
|
|
21
|
+
from .equipment import EquipmentAvailability, EquipmentDetails, StopAreaEquipments
|
|
22
|
+
from .equipment_reports import EquipmentReports
|
|
23
|
+
from .display_information import DisplayInformation
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any, Sequence
|
|
3
|
+
|
|
4
|
+
from .base_entity import BaseEntity
|
|
5
|
+
from .coord import Coord
|
|
6
|
+
from .administrative_region import AdministrativeRegion
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class Address(BaseEntity):
|
|
11
|
+
label: str
|
|
12
|
+
coord: Coord
|
|
13
|
+
house_number: int
|
|
14
|
+
administrative_regions: Sequence[AdministrativeRegion]
|
|
15
|
+
|
|
16
|
+
@classmethod
|
|
17
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Address":
|
|
18
|
+
return Address(
|
|
19
|
+
id=payload["id"],
|
|
20
|
+
name=payload["name"],
|
|
21
|
+
label=payload["label"],
|
|
22
|
+
coord=Coord.from_payload(payload["coord"]),
|
|
23
|
+
house_number=payload["house_number"],
|
|
24
|
+
administrative_regions=[
|
|
25
|
+
AdministrativeRegion.from_payload(data)
|
|
26
|
+
for data in payload["administrative_regions)"]
|
|
27
|
+
],
|
|
28
|
+
)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Any, Optional
|
|
4
|
+
from .base_entity import BaseEntity
|
|
5
|
+
from .coord import Coord
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class Region(BaseEntity):
|
|
10
|
+
dataset_created_at: Optional[datetime]
|
|
11
|
+
end_production_date: Optional[datetime]
|
|
12
|
+
last_load_at: Optional[datetime]
|
|
13
|
+
shape: Optional[str]
|
|
14
|
+
start_production_date: Optional[datetime]
|
|
15
|
+
status: Optional[str]
|
|
16
|
+
|
|
17
|
+
@classmethod
|
|
18
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Region":
|
|
19
|
+
return cls(
|
|
20
|
+
id=payload["id"],
|
|
21
|
+
name=payload["name"],
|
|
22
|
+
dataset_created_at=datetime.fromisoformat(payload["dataset_created_at"])
|
|
23
|
+
if "dataset_created_at" in payload
|
|
24
|
+
else None,
|
|
25
|
+
end_production_date=datetime.strptime(
|
|
26
|
+
payload["end_production_date"], "%Y%m%d"
|
|
27
|
+
)
|
|
28
|
+
if "end_production_date" in payload
|
|
29
|
+
else None,
|
|
30
|
+
last_load_at=datetime.fromisoformat(payload["last_load_at"])
|
|
31
|
+
if "last_load_at" in payload
|
|
32
|
+
else None,
|
|
33
|
+
shape=payload["shape"],
|
|
34
|
+
start_production_date=datetime.strptime(
|
|
35
|
+
payload["start_production_date"], "%Y%m%d"
|
|
36
|
+
)
|
|
37
|
+
if "end_production_date" in payload
|
|
38
|
+
else None,
|
|
39
|
+
status=payload["status"],
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass
|
|
44
|
+
class AdministrativeRegion(BaseEntity):
|
|
45
|
+
label: str
|
|
46
|
+
coord: Coord
|
|
47
|
+
level: int
|
|
48
|
+
zip_code: str
|
|
49
|
+
|
|
50
|
+
@staticmethod
|
|
51
|
+
def from_payload(payload: dict[str, Any]) -> "AdministrativeRegion":
|
|
52
|
+
return AdministrativeRegion(
|
|
53
|
+
id=payload["id"],
|
|
54
|
+
name=payload["name"],
|
|
55
|
+
label=payload["label"],
|
|
56
|
+
coord=Coord.from_payload(payload["coord"]),
|
|
57
|
+
level=payload["level"],
|
|
58
|
+
zip_code=payload["zip_code"],
|
|
59
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from navitia_client.entities.line_and_route import Route
|
|
5
|
+
from navitia_client.entities.stop_area import StopPoint
|
|
6
|
+
from navitia_client.entities.stop_datetime import StopDateTime
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class Arrival:
|
|
11
|
+
route: Route
|
|
12
|
+
stop_date_time: StopDateTime
|
|
13
|
+
stop_point: StopPoint
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Arrival":
|
|
17
|
+
return cls(
|
|
18
|
+
route=Route.from_payload(payload["route"]),
|
|
19
|
+
stop_point=StopPoint.from_payload(payload["stop_point"]),
|
|
20
|
+
stop_date_time=StopDateTime.from_payload(payload["stop_date_time"]),
|
|
21
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from .base_entity import BaseEntity
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class Company(BaseEntity):
|
|
9
|
+
pass
|
|
10
|
+
|
|
11
|
+
@classmethod
|
|
12
|
+
def from_payload(cls, payload: Any) -> "Company":
|
|
13
|
+
return cls(
|
|
14
|
+
id=payload.get("id"),
|
|
15
|
+
name=payload.get("name"),
|
|
16
|
+
)
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any, Optional
|
|
3
|
+
|
|
4
|
+
from navitia_client.entities.base_entity import BaseEntity
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class Contributor(BaseEntity):
|
|
9
|
+
license: str
|
|
10
|
+
website: Optional[str]
|
|
11
|
+
|
|
12
|
+
@classmethod
|
|
13
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Contributor":
|
|
14
|
+
return cls(
|
|
15
|
+
id=payload["id"],
|
|
16
|
+
name=payload["name"],
|
|
17
|
+
license=payload["license"],
|
|
18
|
+
website=payload["website"],
|
|
19
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
@dataclass
|
|
6
|
+
class Coord:
|
|
7
|
+
lon: float
|
|
8
|
+
lat: float
|
|
9
|
+
|
|
10
|
+
@classmethod
|
|
11
|
+
def from_payload(cls, payload: Any) -> "Coord":
|
|
12
|
+
return cls(
|
|
13
|
+
lon=payload.get("lon"),
|
|
14
|
+
lat=payload.get("lat"),
|
|
15
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Any, Optional
|
|
4
|
+
|
|
5
|
+
from navitia_client.entities.contributor import Contributor
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class Dataset:
|
|
10
|
+
contributor: Contributor
|
|
11
|
+
description: Optional[str]
|
|
12
|
+
end_validation_date: datetime
|
|
13
|
+
id: str
|
|
14
|
+
realtime_level: str
|
|
15
|
+
start_validation_date: datetime
|
|
16
|
+
system: Optional[str]
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Dataset":
|
|
20
|
+
return cls(
|
|
21
|
+
contributor=Contributor.from_payload(payload["contributor"]),
|
|
22
|
+
description=payload["description"],
|
|
23
|
+
end_validation_date=datetime.strptime(
|
|
24
|
+
payload["end_validation_date"], "%Y%m%dT%H%M%S"
|
|
25
|
+
),
|
|
26
|
+
id=payload["id"],
|
|
27
|
+
realtime_level=payload["realtime_level"],
|
|
28
|
+
start_validation_date=datetime.strptime(
|
|
29
|
+
payload["start_validation_date"], "%Y%m%dT%H%M%S"
|
|
30
|
+
),
|
|
31
|
+
system=payload["system"],
|
|
32
|
+
)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
from navitia_client.entities.line_and_route import Route
|
|
5
|
+
from navitia_client.entities.stop_area import StopPoint
|
|
6
|
+
from navitia_client.entities.stop_datetime import StopDateTime
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
@dataclass
|
|
10
|
+
class Departure:
|
|
11
|
+
route: Route
|
|
12
|
+
stop_date_time: StopDateTime
|
|
13
|
+
stop_point: StopPoint
|
|
14
|
+
|
|
15
|
+
@classmethod
|
|
16
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Departure":
|
|
17
|
+
return cls(
|
|
18
|
+
route=Route.from_payload(payload["route"]),
|
|
19
|
+
stop_point=StopPoint.from_payload(payload["stop_point"]),
|
|
20
|
+
stop_date_time=StopDateTime.from_payload(payload["stop_date_time"]),
|
|
21
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any
|
|
3
|
+
from navitia_client.entities.base_entity import BaseEntity
|
|
4
|
+
from navitia_client.entities.stop_area import StopArea
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class Direction(BaseEntity):
|
|
9
|
+
embedded_type: str
|
|
10
|
+
quality: int
|
|
11
|
+
stop_area: StopArea
|
|
12
|
+
|
|
13
|
+
@classmethod
|
|
14
|
+
def from_payload(
|
|
15
|
+
cls,
|
|
16
|
+
payload: dict[str, Any],
|
|
17
|
+
) -> "Direction":
|
|
18
|
+
return cls(
|
|
19
|
+
id=payload["id"],
|
|
20
|
+
name=payload["name"],
|
|
21
|
+
embedded_type=payload["embedded_type"],
|
|
22
|
+
quality=payload["quality"],
|
|
23
|
+
stop_area=StopArea.from_payload(payload["stop_area"]),
|
|
24
|
+
)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from typing import Any, Optional, Sequence
|
|
3
|
+
|
|
4
|
+
from .equipment import Equipment
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@dataclass
|
|
8
|
+
class DisplayInformation:
|
|
9
|
+
network: str
|
|
10
|
+
physical_mode: Optional[str]
|
|
11
|
+
commercial_mode: Optional[str]
|
|
12
|
+
code: str
|
|
13
|
+
color: str
|
|
14
|
+
text_color: str
|
|
15
|
+
direction: str
|
|
16
|
+
headsign: Optional[str]
|
|
17
|
+
label: Optional[str]
|
|
18
|
+
name: str
|
|
19
|
+
trip_short_name: Optional[str]
|
|
20
|
+
equipments: Optional[Sequence[Equipment]]
|
|
21
|
+
description: Optional[str]
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def from_payload(cls, payload: dict[str, Any]) -> "DisplayInformation":
|
|
25
|
+
return cls(
|
|
26
|
+
network=payload["network"],
|
|
27
|
+
physical_mode=payload.get("physical_mode"),
|
|
28
|
+
commercial_mode=payload.get("commercial_mode"),
|
|
29
|
+
code=payload["code"],
|
|
30
|
+
color=payload["color"],
|
|
31
|
+
text_color=payload["text_color"],
|
|
32
|
+
direction=payload["direction"],
|
|
33
|
+
headsign=payload.get("headsign"),
|
|
34
|
+
label=payload.get("label"),
|
|
35
|
+
name=payload["name"],
|
|
36
|
+
trip_short_name=payload.get("trip_short_name"),
|
|
37
|
+
equipments=[
|
|
38
|
+
Equipment(equipment_data) for equipment_data in payload["equipments"]
|
|
39
|
+
]
|
|
40
|
+
if payload.get("equipments")
|
|
41
|
+
else None,
|
|
42
|
+
description=payload.get("description"),
|
|
43
|
+
)
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from enum import Enum
|
|
4
|
+
from typing import Any, Optional, Sequence
|
|
5
|
+
|
|
6
|
+
from .pt_object import PtObject
|
|
7
|
+
from .line_and_route import Route
|
|
8
|
+
from .stop_area import StopPoint
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class DisruptionStatus(Enum):
|
|
12
|
+
PAST = "past"
|
|
13
|
+
ACTIVE = "active"
|
|
14
|
+
FUTURE = "future"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Effect(Enum):
|
|
18
|
+
NO_SERVICE = "NO_SERVICE"
|
|
19
|
+
REDUCED_SERVICE = "REDUCED_SERVICE"
|
|
20
|
+
SIGNIFICANT_DELAYS = "SIGNIFICANT_DELAYS"
|
|
21
|
+
DETOUR = "DETOUR"
|
|
22
|
+
ADDITIONAL_SERVICE = "ADDITIONAL_SERVICE"
|
|
23
|
+
MODIFIED_SERVICE = "MODIFIED_SERVICE"
|
|
24
|
+
OTHER_EFFECT = "OTHER_EFFECT"
|
|
25
|
+
UNKNOWN_EFFECT = "UNKNOWN_EFFECT"
|
|
26
|
+
STOP_MOVED = "STOP_MOVED"
|
|
27
|
+
NO_EFFECT = "NO_EFFECT"
|
|
28
|
+
ACCESSIBILITY_ISSUE = "ACCESSIBILITY_ISSUE"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass
|
|
32
|
+
class Severity:
|
|
33
|
+
color: str
|
|
34
|
+
priority: int | None
|
|
35
|
+
name: str
|
|
36
|
+
effect: Effect
|
|
37
|
+
|
|
38
|
+
@classmethod
|
|
39
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Severity":
|
|
40
|
+
return cls(
|
|
41
|
+
color=payload["color"],
|
|
42
|
+
priority=payload["priority"],
|
|
43
|
+
name=payload["name"],
|
|
44
|
+
effect=Effect(payload["effect"]),
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@dataclass
|
|
49
|
+
class DisruptionPeriod:
|
|
50
|
+
begin: datetime
|
|
51
|
+
end: datetime
|
|
52
|
+
|
|
53
|
+
@classmethod
|
|
54
|
+
def from_payload(cls, payload: dict[str, Any]) -> "DisruptionPeriod":
|
|
55
|
+
return cls(
|
|
56
|
+
begin=datetime.strptime(payload["begin"], "%Y%m%dT%H%M%S"),
|
|
57
|
+
end=datetime.strptime(payload["end"], "%Y%m%dT%H%M%S"),
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
@dataclass
|
|
62
|
+
class Channel:
|
|
63
|
+
id: str
|
|
64
|
+
content_type: str
|
|
65
|
+
name: str
|
|
66
|
+
|
|
67
|
+
@classmethod
|
|
68
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Channel":
|
|
69
|
+
return cls(
|
|
70
|
+
id=payload["id"], content_type=payload["content_type"], name=payload["name"]
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass
|
|
75
|
+
class DisruptionMessage:
|
|
76
|
+
text: str
|
|
77
|
+
channel: Channel
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def from_payload(cls, payload: dict[str, Any]) -> "DisruptionMessage":
|
|
81
|
+
return cls(
|
|
82
|
+
text=payload["text"], channel=Channel.from_payload(payload["channel"])
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@dataclass
|
|
87
|
+
class ImpactedSection:
|
|
88
|
+
section_from: PtObject
|
|
89
|
+
section_to: PtObject
|
|
90
|
+
routes: Sequence[Route]
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def from_payload(cls, payload: dict[str, Any]) -> "ImpactedSection":
|
|
94
|
+
routes = [Route.from_payload(route_data) for route_data in payload["routes"]]
|
|
95
|
+
|
|
96
|
+
return cls(
|
|
97
|
+
section_from=PtObject.from_payload(payload["section_from"]),
|
|
98
|
+
section_to=PtObject.from_payload(payload["section_to"]),
|
|
99
|
+
routes=routes,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
class StopTimeEffect(Enum):
|
|
104
|
+
ADDED = "added"
|
|
105
|
+
DELETED = "deleted"
|
|
106
|
+
DELAYED = "delayed"
|
|
107
|
+
UNCHANGED = "unchanged"
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
@dataclass
|
|
111
|
+
class ImpactedStop:
|
|
112
|
+
stop_point: StopPoint
|
|
113
|
+
amended_departure_time: str
|
|
114
|
+
amended_arrival_time: str
|
|
115
|
+
base_departure_time: Optional[str]
|
|
116
|
+
base_arrival_time: Optional[str]
|
|
117
|
+
cause: str
|
|
118
|
+
stop_time_effect: StopTimeEffect # written as deprecated in the doc
|
|
119
|
+
arrival_status: StopTimeEffect
|
|
120
|
+
departure_status: StopTimeEffect
|
|
121
|
+
is_detour: bool
|
|
122
|
+
|
|
123
|
+
@classmethod
|
|
124
|
+
def from_payload(cls, payload: dict[str, Any]) -> "ImpactedStop":
|
|
125
|
+
return cls(
|
|
126
|
+
amended_arrival_time=payload["amended_arrival_time"],
|
|
127
|
+
amended_departure_time=payload["amended_departure_time"],
|
|
128
|
+
arrival_status=StopTimeEffect(payload["arrival_status"]),
|
|
129
|
+
base_arrival_time=payload["base_arrival_time"]
|
|
130
|
+
if "base_arrival_time" in payload
|
|
131
|
+
else None,
|
|
132
|
+
base_departure_time=payload["base_departure_time"]
|
|
133
|
+
if "base_departure_time" in payload
|
|
134
|
+
else None,
|
|
135
|
+
cause=payload["cause"],
|
|
136
|
+
departure_status=StopTimeEffect(payload["departure_status"]),
|
|
137
|
+
is_detour=bool(payload["is_detour"]),
|
|
138
|
+
stop_point=StopPoint.from_payload(payload["stop_point"]),
|
|
139
|
+
stop_time_effect=StopTimeEffect(payload["stop_time_effect"]),
|
|
140
|
+
)
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
@dataclass
|
|
144
|
+
class ImpactedObject:
|
|
145
|
+
pt_object: Optional[PtObject]
|
|
146
|
+
impacted_section: Optional[ImpactedSection]
|
|
147
|
+
impacted_stops: Optional[Sequence[ImpactedStop]]
|
|
148
|
+
|
|
149
|
+
@classmethod
|
|
150
|
+
def from_payload(
|
|
151
|
+
cls,
|
|
152
|
+
payload: dict[str, Any],
|
|
153
|
+
) -> "ImpactedObject":
|
|
154
|
+
impacted_stops = (
|
|
155
|
+
[
|
|
156
|
+
ImpactedStop.from_payload(impacted_stop_data)
|
|
157
|
+
for impacted_stop_data in payload["impacted_stops"]
|
|
158
|
+
]
|
|
159
|
+
if "impacted_stops" in payload
|
|
160
|
+
else None
|
|
161
|
+
)
|
|
162
|
+
return cls(
|
|
163
|
+
pt_object=PtObject.from_payload(payload["pt_object"])
|
|
164
|
+
if "pt_object" in payload
|
|
165
|
+
else None,
|
|
166
|
+
impacted_section=ImpactedSection.from_payload(payload["impacted_section"])
|
|
167
|
+
if "impacted_section" in payload
|
|
168
|
+
else None,
|
|
169
|
+
impacted_stops=impacted_stops,
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
@dataclass
|
|
174
|
+
class Disruption:
|
|
175
|
+
id: str
|
|
176
|
+
status: Optional[DisruptionStatus]
|
|
177
|
+
disruption_id: Optional[str]
|
|
178
|
+
impact_id: Optional[str]
|
|
179
|
+
severity: Optional[Severity]
|
|
180
|
+
application_periods: Optional[Sequence[DisruptionPeriod]]
|
|
181
|
+
messages: Optional[Sequence[DisruptionMessage]]
|
|
182
|
+
updated_at: Optional[datetime]
|
|
183
|
+
impacted_objects: Optional[Sequence[ImpactedObject]]
|
|
184
|
+
cause: Optional[str]
|
|
185
|
+
category: Optional[str]
|
|
186
|
+
contributor: Optional[str]
|
|
187
|
+
|
|
188
|
+
@classmethod
|
|
189
|
+
def from_payload(
|
|
190
|
+
cls,
|
|
191
|
+
payload: dict[str, Any],
|
|
192
|
+
) -> "Disruption":
|
|
193
|
+
print(payload)
|
|
194
|
+
application_periods = (
|
|
195
|
+
[
|
|
196
|
+
DisruptionPeriod.from_payload(application_period)
|
|
197
|
+
for application_period in payload["application_periods"]
|
|
198
|
+
]
|
|
199
|
+
if "application_periods" in payload
|
|
200
|
+
else None
|
|
201
|
+
)
|
|
202
|
+
messages = (
|
|
203
|
+
[DisruptionMessage.from_payload(message) for message in payload["messages"]]
|
|
204
|
+
if "messages" in payload
|
|
205
|
+
else None
|
|
206
|
+
)
|
|
207
|
+
impacted_objects = (
|
|
208
|
+
[
|
|
209
|
+
ImpactedObject.from_payload(object)
|
|
210
|
+
for object in payload["impacted_objects"]
|
|
211
|
+
]
|
|
212
|
+
if "impacted_objects" in payload
|
|
213
|
+
else None
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
return cls(
|
|
217
|
+
id=payload["id"],
|
|
218
|
+
status=DisruptionStatus(payload["status"]) if "status" in payload else None,
|
|
219
|
+
disruption_id=payload.get("disruption_id"),
|
|
220
|
+
impact_id=payload.get("impact_id"),
|
|
221
|
+
severity=Severity.from_payload(payload["severity"])
|
|
222
|
+
if "severity" in payload
|
|
223
|
+
else None,
|
|
224
|
+
application_periods=application_periods,
|
|
225
|
+
messages=messages,
|
|
226
|
+
updated_at=datetime.strptime(payload["updated_at"], "%Y%m%dT%H%M%S")
|
|
227
|
+
if "updated_at" in payload
|
|
228
|
+
else None,
|
|
229
|
+
impacted_objects=impacted_objects,
|
|
230
|
+
cause=payload.get("cause"),
|
|
231
|
+
category=payload.get("category"),
|
|
232
|
+
contributor=payload.get("contributor"),
|
|
233
|
+
)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from enum import Enum
|
|
3
|
+
from typing import Optional
|
|
4
|
+
|
|
5
|
+
from .base_entity import BaseEntity
|
|
6
|
+
from .stop_area import StopArea
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class Equipment(Enum):
|
|
10
|
+
WHEELCHAIR_ACCESSIBILITY = "has_wheelchair_accessibility"
|
|
11
|
+
BIKE_ACCEPTED = "has_bike_accepted"
|
|
12
|
+
AIR_CONDITIONED = "has_air_conditioned"
|
|
13
|
+
VISUAL_ANNOUNCEMENT = "has_visual_announcement"
|
|
14
|
+
AUDIBLE_ANNOUNCEMENT = "has_audible_announcement"
|
|
15
|
+
APPROPRIATE_ESCORT = "has_appropriate_escort"
|
|
16
|
+
APPROPRIATE_SIGNAGE = "has_appropriate_signage"
|
|
17
|
+
SCHOOL_VEHICLE = "has_school_vehicle"
|
|
18
|
+
WHEELCHAR_BOARDING = "has_wheelchair_boarding"
|
|
19
|
+
SHELTERED = "has_sheltered"
|
|
20
|
+
ELEVATOR = "has_elevator"
|
|
21
|
+
ESCALATOR = "has_escalator"
|
|
22
|
+
BIKE_DEPOT = "has_bike_depot"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@dataclass
|
|
26
|
+
class EquipmentAvailability:
|
|
27
|
+
status: str
|
|
28
|
+
cause: Optional[str]
|
|
29
|
+
effect: Optional[str]
|
|
30
|
+
periods: Optional[dict[str, str]]
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@dataclass
|
|
34
|
+
class EquipmentDetails(BaseEntity):
|
|
35
|
+
current_availability: EquipmentAvailability
|
|
36
|
+
embedded_type: str
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@dataclass
|
|
40
|
+
class StopAreaEquipments:
|
|
41
|
+
equiment_details: EquipmentDetails
|
|
42
|
+
stop_area: StopArea
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
from datetime import datetime
|
|
3
|
+
from typing import Any
|
|
4
|
+
|
|
5
|
+
from navitia_client.entities.place import Place
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
@dataclass
|
|
9
|
+
class Isochrone:
|
|
10
|
+
from_: Place
|
|
11
|
+
geojson: Any
|
|
12
|
+
max_date_time: datetime
|
|
13
|
+
max_duration: int
|
|
14
|
+
min_date_time: datetime
|
|
15
|
+
min_duration: int
|
|
16
|
+
requested_date_time: datetime
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def from_payload(cls, payload: dict[str, Any]) -> "Isochrone":
|
|
20
|
+
return cls(
|
|
21
|
+
from_=Place.from_payload(payload["from"]),
|
|
22
|
+
geojson=payload["geojson"],
|
|
23
|
+
max_date_time=datetime.strptime(payload["max_date_time"], "%Y%m%dT%H%M%S"),
|
|
24
|
+
max_duration=payload["max_duration"],
|
|
25
|
+
min_date_time=datetime.strptime(payload["min_date_time"], "%Y%m%dT%H%M%S"),
|
|
26
|
+
min_duration=payload["min_duration"],
|
|
27
|
+
requested_date_time=datetime.strptime(
|
|
28
|
+
payload["requested_date_time"], "%Y%m%dT%H%M%S"
|
|
29
|
+
),
|
|
30
|
+
)
|