Skip to content

Commit 45271bf

Browse files
committed
stop-registry-importer Quay accessibilityAssessment
1 parent 02cbe0a commit 45271bf

1 file changed

Lines changed: 97 additions & 23 deletions

File tree

stop-registry-importer/importer.py

Lines changed: 97 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -349,11 +349,56 @@ def mapStopCondition(jore3condition):
349349
return 'bad'
350350

351351
def mapBoolean(jore3value):
352-
match jore3value:
353-
case 1:
354-
return True
355-
case _:
356-
return False
352+
if jore3value is None:
353+
return False
354+
if isinstance(jore3value, bool):
355+
return jore3value
356+
normalized = str(jore3value).strip().lower()
357+
return normalized in ('1', '01', 'true', 't', 'yes', 'y')
358+
359+
def mapOptionalBoolean(jore3value):
360+
if jore3value is None:
361+
return None
362+
return mapBoolean(jore3value)
363+
364+
def mapLimitationStatus(jore3value):
365+
if jore3value is None:
366+
return 'UNKNOWN'
367+
return 'TRUE' if mapBoolean(jore3value) else 'FALSE'
368+
369+
def mapAccessibilityLevel(jore3row):
370+
if jore3row.get('esteeton_kulku') is not None:
371+
return 'mostlyAccessible' if mapBoolean(jore3row.get('esteeton_kulku')) else 'partiallyInaccessible'
372+
if jore3row.get('esteettomyys') is not None:
373+
return 'mostlyAccessible' if mapBoolean(jore3row.get('esteettomyys')) else 'inaccessible'
374+
return 'unknown'
375+
376+
def mapGuidanceType(jore3row):
377+
if mapBoolean(jore3row.get('varoitusalue')) or mapBoolean(jore3row.get('erotus_varoitusalue')):
378+
return 'other'
379+
if jore3row.get('varoitusalue') is None and jore3row.get('erotus_varoitusalue') is None:
380+
return None
381+
return 'none'
382+
383+
def mapMapType(jore3row):
384+
if jore3row.get('kartat_hsl') is not None or jore3row.get('kartat_hkl') is not None:
385+
return 'other'
386+
return None
387+
388+
def mapShelterWidthType(jore3row):
389+
width = jore3row.get('max_leveys')
390+
if width is None:
391+
return None
392+
return 'wide' if width >= 250 else 'narrow'
393+
394+
def mapWheelchairLimitationStatus(jore3row):
395+
if jore3row.get('esteettomyys') is not None:
396+
return mapLimitationStatus(jore3row.get('esteettomyys'))
397+
if jore3row.get('esteeton_kulku') is not None:
398+
return mapLimitationStatus(jore3row.get('esteeton_kulku'))
399+
if jore3row.get('luokka') is not None:
400+
return 'PARTIAL'
401+
return 'UNKNOWN'
357402

358403
def toFloat(value):
359404
jsonval = json.dumps(value)
@@ -368,7 +413,6 @@ def getShelterEquipment(jore3row):
368413
"enclosed": jore3row['pysakkityyppi'] == '01' or jore3row['pysakkityyppi'] == '02',
369414
"shelterType": mapStopType(jore3row['pysakkityyppi']),
370415
"shelterElectricity": mapStopElectricity(jore3row['sahko']),
371-
# shelterLighting: primary jr_esteettomyys.valaistus, fallback inferred from jr_varustelutiedot_uusi.sahko
372416
"shelterLighting": mapBoolean(jore3row.get('valaistus')) if jore3row.get('valaistus') is not None else False,
373417
"shelterCondition": mapStopCondition(jore3row['katos_kunto']),
374418
"timetableCabinets": toFloat(jore3row['kpl_lisavarusteet']) if jore3row['lisavarusteet'] == '01' else 0,
@@ -395,6 +439,50 @@ def getShelterEquipment(jore3row):
395439
shelterEquipment = [firstShelter] + [baseShelterEquipment.copy() for _ in range(shelterCount - 1)]
396440
return shelterEquipment
397441

442+
def getHslAccessibilityProperties(jore3row):
443+
hslAccessibilityProperties = {
444+
"accessibilityLevel": mapAccessibilityLevel(jore3row),
445+
"curbBackOfRailDistance": toFloat(jore3row['korotus_ajorataan']),
446+
"curbDriveSideOfRailDistance": None,
447+
"curvedStop": None,
448+
"endRampSlope": None,
449+
"guidanceStripe": mapOptionalBoolean(jore3row.get('erotus_varoitusalue')),
450+
"guidanceTiles": mapOptionalBoolean(jore3row.get('varoitusalue')),
451+
"guidanceType": mapGuidanceType(jore3row),
452+
#"id": None,
453+
"lowerCleatHeight": toFloat(jore3row['alapiena_korkeus']),
454+
"mapType": mapMapType(jore3row),
455+
"pedestrianCrossingRampType": None,
456+
"platformEdgeWarningArea": mapBoolean(jore3row['varoitusalue']),
457+
"serviceAreaLength": toFloat(jore3row.get('syvyys')),
458+
"serviceAreaStripes": mapOptionalBoolean(jore3row.get('erotus_odotusalue')),
459+
"serviceAreaWidth": toFloat(jore3row.get('min_leveys')),
460+
"shelterLaneDistance": None,
461+
"shelterType": mapShelterWidthType(jore3row),
462+
"sidewalkAccessibleConnection": mapOptionalBoolean(jore3row.get('esteeton_kulku')),
463+
"stopAreaLengthwiseSlope": toFloat(jore3row['pituuskaltevuus']),
464+
"stopAreaSideSlope": toFloat(jore3row['sivukaltevuus']),
465+
"stopAreaSurroundingsAccessible": mapBoolean(jore3row['esteeton_kulku']),
466+
"stopElevationFromRailTop": toFloat(jore3row.get('korotus_ajorataan')),
467+
"stopElevationFromSidewalk": toFloat(jore3row['korotus_kaytavaan']),
468+
"stopType": mapStopModel(jore3row['pysakin_malli']),
469+
"structureLaneDistance": None
470+
}
471+
472+
return hslAccessibilityProperties
473+
474+
def getAccessibilityLimitations(jore3row):
475+
limitations = {
476+
"audibleSignalsAvailable": 'UNKNOWN',
477+
"escalatorFreeAccess": 'UNKNOWN',
478+
#"id": None,
479+
"liftFreeAccess": 'UNKNOWN',
480+
"stepFreeAccess": mapLimitationStatus(jore3row.get('esteeton_kulku')),
481+
"wheelchairAccess": mapWheelchairLimitationStatus(jore3row)
482+
}
483+
484+
return limitations
485+
398486
def quayInputForJore4Stop(jore3row, label, validityStart, validityEnd, lon, lat):
399487
return {
400488
"publicCode": label,
@@ -458,23 +546,9 @@ def quayInputForJore4Stop(jore3row, label, validityStart, validityEnd, lon, lat)
458546
}
459547
],
460548
"accessibilityAssessment": {
461-
"hslAccessibilityProperties": {
462-
"curbBackOfRailDistance": toFloat(jore3row['korotus_ajorataan']),
463-
"lowerCleatHeight": toFloat(jore3row['alapiena_korkeus']),
464-
"platformEdgeWarningArea": mapBoolean(jore3row['varoitusalue']),
465-
"stopAreaLengthwiseSlope": toFloat(jore3row['pituuskaltevuus']),
466-
"stopAreaSideSlope": toFloat(jore3row['sivukaltevuus']),
467-
"stopAreaSurroundingsAccessible": mapBoolean(jore3row['esteeton_kulku']),
468-
"stopElevationFromSidewalk": toFloat(jore3row['korotus_kaytavaan']),
469-
"stopType": mapStopModel(jore3row['pysakin_malli'])
470-
},
471-
"limitations": {
472-
"audibleSignalsAvailable": "FALSE",
473-
"escalatorFreeAccess": "FALSE",
474-
"liftFreeAccess": "FALSE",
475-
"stepFreeAccess": "FALSE",
476-
"wheelchairAccess": "FALSE"
477-
}
549+
#"id": None,
550+
"hslAccessibilityProperties": getHslAccessibilityProperties(jore3row),
551+
"limitations": getAccessibilityLimitations(jore3row)
478552
},
479553
"placeEquipments": {
480554
"shelterEquipment": getShelterEquipment(jore3row),

0 commit comments

Comments
 (0)