Skip to content

Commit 102c602

Browse files
committed
datex2 assignments
1 parent deadd5e commit 102c602

File tree

2 files changed

+55
-1
lines changed

2 files changed

+55
-1
lines changed

webapp/public_rest_api/datex2/datex2_mapper.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,21 @@
33
Use of this source code is governed by an MIT-style license that can be found in the LICENSE.txt.
44
"""
55

6+
from validataclass.helpers import UnsetValue
7+
68
from webapp.models import ParkingSite
79
from webapp.models.parking_site import OpeningStatus, ParkingSiteType
810
from webapp.public_rest_api.datex2.datex2_models import (
11+
Datex2Assignment,
12+
Datex2AssignmentType,
913
Datex2Coordinate,
14+
Datex2FuelType,
1015
Datex2LocationAndDimension,
1116
Datex2ParkingPublicationLight,
1217
Datex2ParkingSite,
1318
Datex2ParkingSiteType,
1419
Datex2Publication,
20+
Datex2UserType,
1521
)
1622

1723

@@ -44,6 +50,53 @@ def map_parking_site(self, parking_site: ParkingSite) -> Datex2ParkingSite:
4450
else:
4551
datex2_parking_site.numberOfSpaces = parking_site.capacity
4652

53+
# Add different assignments, starting with disabled
54+
if parking_site.realtime_free_capacity_disabled is not None:
55+
datex2_parking_site.assignedFor.append(
56+
Datex2Assignment(
57+
availableSpaces=parking_site.realtime_free_capacity_disabled,
58+
typeOfAssignment=Datex2AssignmentType.onlyFor,
59+
user=Datex2UserType.wheelchairUsers,
60+
),
61+
)
62+
63+
# Assignment women
64+
if parking_site.realtime_free_capacity_woman is not None:
65+
datex2_parking_site.assignedFor.append(
66+
Datex2Assignment(
67+
availableSpaces=parking_site.realtime_free_capacity_woman,
68+
typeOfAssignment=Datex2AssignmentType.onlyFor,
69+
user=Datex2UserType.women,
70+
),
71+
)
72+
73+
# Assignment family
74+
if parking_site.realtime_free_capacity_family is not None:
75+
datex2_parking_site.assignedFor.append(
76+
Datex2Assignment(
77+
availableSpaces=parking_site.realtime_free_capacity_family,
78+
typeOfAssignment=Datex2AssignmentType.onlyFor,
79+
user=Datex2UserType.families,
80+
),
81+
)
82+
83+
# Assignment charging
84+
if parking_site.realtime_free_capacity_charging is not None:
85+
datex2_parking_site.assignedFor.append(
86+
Datex2Assignment(
87+
availableSpaces=parking_site.realtime_free_capacity_charging,
88+
typeOfAssignment=Datex2AssignmentType.onlyFor,
89+
fuelType=Datex2FuelType.battery,
90+
),
91+
)
92+
93+
# TODO: carsharing seems to be impossible to map
94+
# TODO: it seems that there is no way to make assignments to numberOfSpaces, just to availableSpaces, which is not helpful for most
95+
# data sources, as usually there is no realtime data at parking spots for groups, just static data.
96+
97+
if len(datex2_parking_site.assignedFor) == 0:
98+
datex2_parking_site.assignedFor = UnsetValue
99+
47100
if parking_site.realtime_opening_status == OpeningStatus.OPEN:
48101
datex2_parking_site.isOpenNow = True
49102
elif parking_site.realtime_opening_status == OpeningStatus.CLOSED:

webapp/public_rest_api/datex2/datex2_models.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from datetime import datetime
88
from enum import Enum
99

10+
from validataclass.dataclasses import Default
1011
from validataclass.helpers import OptionalUnset, UnsetValue
1112

1213
from webapp.common.dataclass import DataclassMixin
@@ -217,7 +218,7 @@ class Datex2LocationAndDimension(DataclassMixin):
217218
@dataclass(kw_only=True)
218219
class Datex2ParkingSite(DataclassMixin):
219220
uid: str
220-
assignedFor: OptionalUnset[list[Datex2Assignment]] = UnsetValue
221+
assignedFor: OptionalUnset[list[Datex2Assignment]] = Default([])
221222
locationAndDimension: Datex2LocationAndDimension
222223
availableSpaces: OptionalUnset[int] = UnsetValue # should be >= 0
223224
description: OptionalUnset[str] = UnsetValue

0 commit comments

Comments
 (0)