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.
Files changed (83) hide show
  1. navitia_client/__init__.py +0 -0
  2. navitia_client/client/__init__.py +0 -0
  3. navitia_client/client/apis/__init__.py +0 -0
  4. navitia_client/client/apis/api_base_client.py +50 -0
  5. navitia_client/client/apis/arrival_apis.py +191 -0
  6. navitia_client/client/apis/contributors_apis.py +107 -0
  7. navitia_client/client/apis/coverage_apis.py +131 -0
  8. navitia_client/client/apis/datasets_apis.py +105 -0
  9. navitia_client/client/apis/departure_apis.py +211 -0
  10. navitia_client/client/apis/inverted_geocoding_apis.py +199 -0
  11. navitia_client/client/apis/isochrone_apis.py +196 -0
  12. navitia_client/client/apis/journeys_apis.py +629 -0
  13. navitia_client/client/apis/line_report_apis.py +106 -0
  14. navitia_client/client/apis/place_apis.py +74 -0
  15. navitia_client/client/apis/places_nearby_apis.py +354 -0
  16. navitia_client/client/apis/public_transport_objects_apis.py +88 -0
  17. navitia_client/client/apis/public_transportation_apis/__init__.py +10 -0
  18. navitia_client/client/apis/public_transportation_apis/commercial_mode_apis.py +251 -0
  19. navitia_client/client/apis/public_transportation_apis/company_apis.py +303 -0
  20. navitia_client/client/apis/public_transportation_apis/disruption_apis.py +305 -0
  21. navitia_client/client/apis/public_transportation_apis/entity_apis.py +330 -0
  22. navitia_client/client/apis/public_transportation_apis/line_apis.py +303 -0
  23. navitia_client/client/apis/public_transportation_apis/network_apis.py +303 -0
  24. navitia_client/client/apis/public_transportation_apis/physical_mode_apis.py +303 -0
  25. navitia_client/client/apis/public_transportation_apis/route_apis.py +303 -0
  26. navitia_client/client/apis/public_transportation_apis/stop_area_apis.py +303 -0
  27. navitia_client/client/apis/public_transportation_apis/stop_point_apis.py +303 -0
  28. navitia_client/client/apis/public_transportation_apis/vehicle_journey_apis.py +304 -0
  29. navitia_client/client/apis/route_schedules_apis.py +177 -0
  30. navitia_client/client/apis/stop_schedules_apis.py +181 -0
  31. navitia_client/client/apis/terminus_schedules_apis.py +186 -0
  32. navitia_client/client/apis/traffic_report_apis.py +106 -0
  33. navitia_client/client/exceptions.py +18 -0
  34. navitia_client/client/navitia_client.py +302 -0
  35. navitia_client/client/raw/__init__.py +0 -0
  36. navitia_client/client/raw/raw_client.py +58 -0
  37. navitia_client/entities/__init__.py +23 -0
  38. navitia_client/entities/access_point.py +10 -0
  39. navitia_client/entities/address.py +28 -0
  40. navitia_client/entities/administrative_region.py +59 -0
  41. navitia_client/entities/arrival.py +21 -0
  42. navitia_client/entities/base_entity.py +7 -0
  43. navitia_client/entities/company.py +16 -0
  44. navitia_client/entities/context.py +10 -0
  45. navitia_client/entities/contributor.py +19 -0
  46. navitia_client/entities/coord.py +15 -0
  47. navitia_client/entities/dataset.py +32 -0
  48. navitia_client/entities/departure.py +21 -0
  49. navitia_client/entities/direction.py +24 -0
  50. navitia_client/entities/display_information.py +43 -0
  51. navitia_client/entities/disruption.py +233 -0
  52. navitia_client/entities/equipment.py +42 -0
  53. navitia_client/entities/equipment_reports.py +10 -0
  54. navitia_client/entities/isochrones.py +30 -0
  55. navitia_client/entities/journey.py +133 -0
  56. navitia_client/entities/line_and_route.py +76 -0
  57. navitia_client/entities/line_report.py +18 -0
  58. navitia_client/entities/link.py +44 -0
  59. navitia_client/entities/network.py +16 -0
  60. navitia_client/entities/note.py +7 -0
  61. navitia_client/entities/pagination.py +19 -0
  62. navitia_client/entities/path.py +30 -0
  63. navitia_client/entities/pathway.py +11 -0
  64. navitia_client/entities/physical_mode.py +92 -0
  65. navitia_client/entities/place.py +40 -0
  66. navitia_client/entities/poi.py +16 -0
  67. navitia_client/entities/pt_datetime.py +31 -0
  68. navitia_client/entities/pt_object.py +57 -0
  69. navitia_client/entities/route_schedule.py +19 -0
  70. navitia_client/entities/schedule_table.py +59 -0
  71. navitia_client/entities/stand.py +16 -0
  72. navitia_client/entities/stop_area.py +82 -0
  73. navitia_client/entities/stop_datetime.py +39 -0
  74. navitia_client/entities/stop_schedule.py +59 -0
  75. navitia_client/entities/ticket.py +49 -0
  76. navitia_client/entities/traffic_report.py +21 -0
  77. navitia_client/entities/trip.py +13 -0
  78. navitia_client/entities/vehicle_journey.py +163 -0
  79. python_navitia_client-1.1.0.dist-info/LICENSE +21 -0
  80. python_navitia_client-1.1.0.dist-info/METADATA +114 -0
  81. python_navitia_client-1.1.0.dist-info/RECORD +83 -0
  82. python_navitia_client-1.1.0.dist-info/WHEEL +5 -0
  83. 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,10 @@
1
+ from dataclasses import dataclass
2
+
3
+ from .base_entity import BaseEntity
4
+ from .coord import Coord
5
+
6
+
7
+ @dataclass
8
+ class AccessPoint(BaseEntity):
9
+ coord: Coord
10
+ access_point_code: str
@@ -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,7 @@
1
+ from dataclasses import dataclass
2
+
3
+
4
+ @dataclass
5
+ class BaseEntity:
6
+ id: str
7
+ name: str
@@ -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,10 @@
1
+ from dataclasses import dataclass
2
+ from datetime import datetime
3
+ from typing import Any
4
+
5
+
6
+ @dataclass
7
+ class Context:
8
+ timezone: str
9
+ current_datetime: datetime
10
+ car_direct_path: dict[str, Any]
@@ -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,10 @@
1
+ from dataclasses import dataclass
2
+
3
+ from .line_and_route import Line
4
+ from .equipment import StopAreaEquipments
5
+
6
+
7
+ @dataclass
8
+ class EquipmentReports:
9
+ line: Line
10
+ stop_area_equipments: StopAreaEquipments
@@ -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
+ )