Coverage for src/overturetoosm/segments.py: 99%
205 statements
« prev ^ index » next coverage.py v7.6.1, created at 2025-07-22 06:43 -0400
« prev ^ index » next coverage.py v7.6.1, created at 2025-07-22 06:43 -0400
1"""Pydantic models needed for transportation segments.
3Partly autogenerated by datamodel-codegen.
4"""
6from enum import Enum
7from typing import Any
9try:
10 from typing import Annotated
11except ImportError:
12 from typing import Annotated
14from pydantic import BaseModel, ConfigDict, Field, RootModel
16from .objects import Names, Sources, Wikidata
19class Subtype(str, Enum):
20 """Model for transportation segment subtype."""
22 road = "road"
23 rail = "rail"
24 water = "water"
27class AccessType(str, Enum):
28 """Model for transportation segment access type."""
30 allowed = "allowed"
31 denied = "denied"
32 designated = "designated"
35class Id(RootModel):
36 """Model for transportation segment id.
38 A feature ID. This may be an ID associated with the Global Entity Reference System
39 (GERS) if—and-only-if the feature represents an entity that is part of GERS.
40 """
42 root: str
45class Level(RootModel):
46 """Model for transportation segment level."""
48 root: int = Field(default=0)
51class LinearlyReferencedPosition(RootModel):
52 """Model for transportation segment linearly referenced position."""
54 root: Annotated[float, Field(strict=True, ge=0.0, le=1.0)]
57class LinearlyReferencedRange(RootModel):
58 """Model for transportation segment linearly referenced range."""
60 root: Annotated[list, Field(float, min_length=2, max_length=2)]
63class RoadClass(str, Enum):
64 """Model for transportation segment road class."""
66 motorway = "motorway"
67 primary = "primary"
68 secondary = "secondary"
69 tertiary = "tertiary"
70 residential = "residential"
71 living_street = "living_street"
72 trunk = "trunk"
73 unclassified = "unclassified"
74 service = "service"
75 pedestrian = "pedestrian"
76 footway = "footway"
77 steps = "steps"
78 path = "path"
79 track = "track"
80 cycleway = "cycleway"
81 bridleway = "bridleway"
82 sidewalk = "sidewalk"
83 crosswalk = "crosswalk"
84 parking_aisle = "parking_aisle"
85 driveway = "driveway"
86 alley = "alley"
87 cycle_crossing = "cycle_crossing"
88 unknown = "unknown"
91class Subclass(str, Enum):
92 """Model for transportation segment subclass."""
94 link = "link"
95 sidewalk = "sidewalk"
96 crosswalk = "crosswalk"
97 parking_aisle = "parking_aisle"
98 driveway = "driveway"
99 alley = "alley"
100 cycle_crossing = "cycle_crossing"
103class TemporalScopeContainer(BaseModel):
104 """Model for transportation segment temporal scope container."""
106 during: Any | None = None
109class Heading(str, Enum):
110 """Model for transportation segment heading."""
112 forward = "forward"
113 backward = "backward"
116class PurposeOfUse(str, Enum):
117 """Model for transportation segment purpose of use."""
119 as_customer = "as_customer"
120 at_destination = "at_destination"
121 to_deliver = "to_deliver"
122 to_farm = "to_farm"
123 for_forestry = "for_forestry"
126class RecognizedStatus(str, Enum):
127 """Model for transportation segment recognized status."""
129 as_permitted = "as_permitted"
130 as_private = "as_private"
131 as_disabled = "as_disabled"
132 as_employee = "as_employee"
133 as_student = "as_student"
136class TravelMode(str, Enum):
137 """Model for transportation segment travel mode."""
139 vehicle = "vehicle"
140 motor_vehicle = "motor_vehicle"
141 car = "car"
142 truck = "truck"
143 motorcycle = "motorcycle"
144 foot = "foot"
145 bicycle = "bicycle"
146 bus = "bus"
147 hgv = "hgv"
148 hov = "hov"
149 emergency = "emergency"
152class VehicleScopeComparison(str, Enum):
153 """Model for transportation segment vehicle scope comparison."""
155 greater_than = "greater_than"
156 greater_than_equal = "greater_than_equal"
157 equal = "equal"
158 less_than = "less_than"
159 less_than_equal = "less_than_equal"
162class VehicleScopeDimension(str, Enum):
163 """Model for transportation segment vehicle scope dimension."""
165 axle_count = "axle_count"
166 height = "height"
167 length = "length"
168 weight = "weight"
169 width = "width"
172class LengthUnit(str, Enum):
173 """Model for transportation segment length unit."""
175 in_ = "in"
176 ft = "ft"
177 yd = "yd"
178 mi = "mi"
179 cm = "cm"
180 m = "m"
181 km = "km"
184class WeightUnit(str, Enum):
185 """Model for transportation segment weight unit."""
187 oz = "oz"
188 lb = "lb"
189 st = "st"
190 lt = "lt"
191 g = "g"
192 kg = "kg"
193 t = "t"
196class Connector(BaseModel):
197 """Model for transportation segment connector."""
199 connector_id: Id
200 at: LinearlyReferencedPosition
203class LevelRules(BaseModel):
204 """Model for transportation segment level rules container item."""
206 value: Level
207 between: LinearlyReferencedRange | None = None
210class Route(BaseModel):
211 """Model for transportation segment route."""
213 name: str | None = Field(description="Full name of the route")
214 network: str | None = Field(
215 description="Name of the highway system this route belongs to"
216 )
217 ref: str | None = Field(description="Code or number used to reference the route")
218 symbol: str | None = Field(description="URL or description of route signage")
219 wikidata: Wikidata | None = None
222class Routes(RootModel):
223 """Model for transportation segment routes."""
225 root: list[Route] = Field(description="Routes this segment belongs to.")
228class HeadingScopeContainer(BaseModel):
229 """Model for transportation segment heading scope container."""
231 heading: Heading | None = None
234class PurposeOfUseScopeContainer(BaseModel):
235 """Model for transportation segment purpose of use scope container."""
237 using: list[PurposeOfUse] | None = Field(None, min_length=1)
240class RecognizedStatusScopeContainer(BaseModel):
241 """Model for transportation segment recognized status scope container."""
243 recognized: list[RecognizedStatus] | None = Field(None, min_length=1)
246class TravelModeScopeContainer(BaseModel):
247 """Model for transportation segment travel mode scope container."""
249 mode: list[TravelMode] | None = Field(
250 None, min_length=1, description="Travel mode(s) to which the rule applies"
251 )
254class VehicleScopeUnit(RootModel):
255 """Model for transportation segment vehicle scope unit."""
257 root: LengthUnit | WeightUnit = Field(
258 description="Parent enum of both length and width for use in vehicle scoping"
259 )
262class VehicleItem(BaseModel):
263 """Model for transportation segment vehicle item."""
265 dimension: VehicleScopeDimension
266 comparison: VehicleScopeComparison
267 value: Annotated[float, Field(strict=True, ge=0.0)]
268 unit: VehicleScopeUnit | None = None
271class VehicleScopeContainer(BaseModel):
272 """Model for transportation segment vehicle scope container."""
274 vehicle: list[VehicleItem] | None = Field(
275 None, min_length=1, description="Vehicle attributes for which the rule applies"
276 )
279class When(
280 TemporalScopeContainer,
281 HeadingScopeContainer,
282 PurposeOfUseScopeContainer,
283 RecognizedStatusScopeContainer,
284 TravelModeScopeContainer,
285 VehicleScopeContainer,
286):
287 """Model for transportation segment when."""
290class AccessContainer(BaseModel):
291 """Model for transportation segment access container item."""
293 access_type: AccessType
294 when: When | None = None
297class RoadFlagEnum(str, Enum):
298 """Overture road flag options."""
300 is_bridge = "is_bridge"
301 is_link = "is_link"
302 is_tunnel = "is_tunnel"
303 is_under_construction = "is_under_construction"
304 is_abandoned = "is_abandoned"
305 is_covered = "is_covered"
308class RoadFlag(BaseModel):
309 """Overture road flag."""
311 values: list[RoadFlagEnum]
312 between: LinearlyReferencedRange | None = None
315class RoadSurfaceEnum(str, Enum):
316 """Overture road surface options."""
318 unknown = "unknown"
319 paved = "paved"
320 unpaved = "unpaved"
321 gravel = "gravel"
322 dirt = "dirt"
323 paving_stones = "paving_stones"
324 metal = "metal"
327class RoadSurface(BaseModel):
328 """Overture road surface."""
330 value: RoadSurfaceEnum
331 between: LinearlyReferencedRange | None = None
334class SpeedUnit(str, Enum):
335 """Overture speed unit options."""
337 kmh = "km/h"
338 mph = "mph"
341class Speed(BaseModel):
342 """Overture speed."""
344 value: Annotated[int, Field(ge=1, le=350)]
345 unit: SpeedUnit | None = None
348class SpeedLimit(BaseModel):
349 """Overture speed limit."""
351 min_speed: Speed | None = None
352 max_speed: Speed
355class Sequence(BaseModel):
356 """Overture sequence."""
358 connector_id: Id
359 segment_id: Id
362class ProhibitedTransition(BaseModel):
363 """Overture prohibited transition."""
365 sequence: list[Sequence]
366 final_heading: Heading
367 when: When
368 between: LinearlyReferencedRange | None = None
371class SegmentProperties(BaseModel):
372 """Model for transportation segment properties."""
374 model_config = ConfigDict(extra="forbid")
376 version: int = Field(
377 ge=0,
378 description="""Version number of the feature, incremented in each Overture
379 release where the geometry or attributes of this feature changed.""",
380 )
381 id: Id
382 subtype: Subtype = Field(description="Broad category of transportation segment.")
383 sources: list[Sources] | None = None
384 class_: RoadClass | None = Field(None, alias="class")
385 access_restrictions: list[AccessContainer] | None = Field(
386 None, description="Rules governing access to this road segment or lane"
387 )
388 level: Level | None = Field(
389 0, description="Z-order of the feature where 0 is visual level"
390 )
391 level_rules: list[LevelRules] | None = None
392 connector_ids: list[Id] | None = Field(
393 None, min_length=2, description="** DEPRECATED **"
394 )
395 connectors: Annotated[list[Connector], Field(min_length=2)] | None = Field([])
396 """
397 List of connectors which this segment is physically connected to and their relative
398 location. Each connector is a possible routing decision point, meaning it defines a
399 place along the segment in which there is possibility to transition to other
400 segments which share the same connector.
401 """
402 road_surface: list[RoadSurface] | None = None
403 road_flags: list[RoadFlag] | None = None
404 speed_limits: list[SpeedLimit] | None = None
405 prohibited_transitions: list[ProhibitedTransition] | None = None
406 routes: Routes | None = None
407 names: Names | None = None