lmmx / tubeulator

TfL open data interface library
https://tubeulator.vercel.app
MIT License
2 stars 0 forks source link

Legacy namespace inventory #1

Closed lmmx closed 2 years ago

lmmx commented 2 years ago

As described in the document at src/tubeulator/data/openapi/naming.md, it is possible to match the JSON schemas of the new "unbundled" APIs up automatically to those in the legacy "unified" API, following extraction of JSON schemas with openapi2jsonschema.

The resulting correspondence is only partially successful due to the 'recursive' or referential nature of the schemas however. The simplest example of this is how one of the entities in the Place API cannot be mapped to the corresponding one in the unified API because it references another entity.

One solution (which may also simply be nice to have to kick off development of the library) would be an inventory of the unified namespace, which would facilitate the completion of the matching and therefore the naming of the entities in the data model.

lmmx commented 2 years ago

Package update to use names subcommand: ae74bbe9808e366650dfd1387f960852f5969b46

lmmx commented 2 years ago
lmmx commented 2 years ago

https://github.com/lmmx/tubeulator/commit/226c2f51a5b51bc6d191603a90757baa3b729fe5#diff-ab646d0124bc39583b19a517004ead17873eaeca4dd1e09530c94d7c7f619b04

lmmx commented 2 years ago

The two options to search through are:

lmmx commented 2 years ago

A report on the 'remaining' part of the problem: 793aa78861d52b52aa6e87adc6187e3433d39746, dea7f02d999b687439af61f71150a00c90998e97

[Reference(schema='occupancy',
           alias='Tfl-2',
           referential_property='bays',
           is_array=True,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
{'Tfl': ['Tfl.Api.Presentation.Entities.Bay'],
 'Tfl-2': [],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy'],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.BikePointOccupancy']}

[Reference(schema='StopPoint',
           alias='Tfl-5',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='StopPoint',
           alias='Tfl-5',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-4')]
Completable: 2, incomplete: 0
[Reference(schema='StopPoint',
           alias='Tfl-6',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 0, incomplete: 1
[Reference(schema='StopPoint',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='StopPoint',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 1, incomplete: 1
[Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 3, incomplete: 2
[Reference(schema='StopPoint',
           alias='Tfl-13',
           referential_property='serviceType',
           is_array=False,
           entity='#/components/schemas/Tfl-12')]
Completable: 1, incomplete: 0
[Reference(schema='StopPoint',
           alias='Tfl-14',
           referential_property='lineSpecificServiceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-13')]
Completable: 0, incomplete: 1
[Reference(schema='StopPoint',
           alias='Tfl-16',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-15')]
Completable: 1, incomplete: 0
[Reference(schema='StopPoint',
           alias='Tfl-17',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-15')]
Completable: 1, incomplete: 0
[Reference(schema='StopPoint',
           alias='Tfl-20',
           referential_property='stopPoints',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 1
[Reference(schema='StopPoint',
           alias='Tfl-22',
           referential_property='matches',
           is_array=True,
           entity='#/components/schemas/Tfl-21')]
Completable: 1, incomplete: 0
{'System': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
         'Tfl.Api.Presentation.Entities.StopPointCategory'],
 'Tfl-10': [],
 'Tfl-11': [],
 'Tfl-12': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-13': [],
 'Tfl-14': [],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-16': [],
 'Tfl-17': [],
 'Tfl-18': ['Tfl.Api.Presentation.Entities.StopPointRouteSection'],
 'Tfl-19': ['Tfl.Api.Presentation.Entities.DisruptedPoint'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-20': [],
 'Tfl-21': ['Tfl.Api.Presentation.Entities.SearchMatch'],
 'Tfl-22': [],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-5': [],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']}

[Reference(schema='Search',
           alias='Tfl-2',
           referential_property='matches',
           is_array=True,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
{'Tfl': ['Tfl.Api.Presentation.Entities.SearchMatch'], 'Tfl-2': []}

[Reference(schema='Mode',
           alias='Tfl.Api.Presentation.Entities.Prediction',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.PredictionTiming')]
Completable: 1, incomplete: 0
{'Tfl.Api.Presentation.Entities.ActiveServiceType': ['Tfl.Api.Presentation.Entities.ActiveServiceType'],
 'Tfl.Api.Presentation.Entities.Prediction': ['Tfl.Api.Presentation.Entities.Prediction'],
 'Tfl.Api.Presentation.Entities.PredictionTiming': ['Tfl.Api.Presentation.Entities.PredictionTiming']}

[Reference(schema='Vehicle',
           alias='Tfl-2',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
{'Tfl': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-2': [],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.VehicleMatch']}

[Reference(schema='AccidentStats',
           alias='Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
           referential_property='casualties',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AccidentStats.Casualty'),
 Reference(schema='AccidentStats',
           alias='Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
           referential_property='vehicles',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AccidentStats.Vehicle')]
Completable: 2, incomplete: 0
{'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail': ['Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail'],
 'Tfl.Api.Presentation.Entities.AccidentStats.Casualty': ['Tfl.Api.Presentation.Entities.AccidentStats.Casualty'],
 'Tfl.Api.Presentation.Entities.AccidentStats.Vehicle': ['Tfl.Api.Presentation.Entities.AccidentStats.Vehicle']}

[Reference(schema='Road',
           alias='System-2',
           referential_property='geography',
           is_array=False,
           entity='#/components/schemas/System')]
Completable: 1, incomplete: 0
[Reference(schema='Road',
           alias='Tfl-3',
           referential_property='segments',
           is_array=True,
           entity='#/components/schemas/Tfl-2')]
Completable: 1, incomplete: 0
[Reference(schema='Road',
           alias='Tfl-5',
           referential_property='multiLineString',
           is_array=False,
           entity='#/components/schemas/System-2')]
Completable: 0, incomplete: 1
[Reference(schema='Road',
           alias='Tfl-6',
           referential_property='polygon',
           is_array=False,
           entity='#/components/schemas/System-2')]
Completable: 0, incomplete: 1
[Reference(schema='Road',
           alias='Tfl-8',
           referential_property='geography',
           is_array=False,
           entity='#/components/schemas/System-2'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='geometry',
           is_array=False,
           entity='#/components/schemas/System-2'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='streets',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadProject',
           is_array=False,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadDisruptionLines',
           is_array=True,
           entity='#/components/schemas/Tfl-5'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadDisruptionImpactAreas',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='recurringSchedules',
           is_array=True,
           entity='#/components/schemas/Tfl-7')]
Completable: 2, incomplete: 5
{'System': ['System.Data.Spatial.DbGeographyWellKnownValue'],
 'System-2': [],
 'System-3': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.RoadCorridor'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.StreetSegment'],
 'Tfl-3': [],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.RoadProject'],
 'Tfl-5': [],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.RoadDisruptionSchedule'],
 'Tfl-8': [],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.StatusSeverity']}

[Reference(schema='BikePoint',
           alias='Tfl.Api.Presentation.Entities.Place',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AdditionalProperties'),
 Reference(schema='BikePoint',
           alias='Tfl.Api.Presentation.Entities.Place',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.Place')]
Completable: 2, incomplete: 0
{'Tfl.Api.Presentation.Entities.AdditionalProperties': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl.Api.Presentation.Entities.Place': ['Tfl.Api.Presentation.Entities.Place']}

[Reference(schema='Journey',
           alias='Tfl-3',
           referential_property='pathAttribute',
           is_array=False,
           entity='#/components/schemas/Tfl-2')]
Completable: 1, incomplete: 0
[Reference(schema='Journey',
           alias='Tfl-4',
           referential_property='steps',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-9',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Journey',
           alias='Tfl-9',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-8')]
Completable: 2, incomplete: 0
[Reference(schema='Journey',
           alias='Tfl-10',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-9')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-12',
           referential_property='stopPoints',
           is_array=True,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-12',
           referential_property='elevation',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 1, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-13',
           referential_property='lineIdentifier',
           is_array=False,
           entity='#/components/schemas/Tfl-10')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-17',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Journey',
           alias='Tfl-17',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-17')]
Completable: 1, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-14'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-15'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-17')]
Completable: 3, incomplete: 2
[Reference(schema='Journey',
           alias='Tfl-19',
           referential_property='stopPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-18')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-20',
           referential_property='routeSectionNaptanEntrySequence',
           is_array=True,
           entity='#/components/schemas/Tfl-19')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-21',
           referential_property='affectedRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Journey',
           alias='Tfl-21',
           referential_property='affectedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-18')]
Completable: 0, incomplete: 2
[Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='instruction',
           is_array=False,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='obstacles',
           is_array=True,
           entity='#/components/schemas/Tfl-5'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='departurePoint',
           is_array=False,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='arrivalPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='path',
           is_array=False,
           entity='#/components/schemas/Tfl-12'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='routeOptions',
           is_array=True,
           entity='#/components/schemas/Tfl-13'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='mode',
           is_array=False,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='plannedWorks',
           is_array=True,
           entity='#/components/schemas/Tfl-22')]
Completable: 4, incomplete: 5
[Reference(schema='Journey',
           alias='Tfl-25',
           referential_property='tapDetails',
           is_array=False,
           entity='#/components/schemas/Tfl-24')]
Completable: 1, incomplete: 0
[Reference(schema='Journey',
           alias='Tfl-26',
           referential_property='taps',
           is_array=True,
           entity='#/components/schemas/Tfl-25')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-28',
           referential_property='fares',
           is_array=True,
           entity='#/components/schemas/Tfl-26'),
 Reference(schema='Journey',
           alias='Tfl-28',
           referential_property='caveats',
           is_array=True,
           entity='#/components/schemas/Tfl-27')]
Completable: 1, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-29',
           referential_property='legs',
           is_array=True,
           entity='#/components/schemas/Tfl-23'),
 Reference(schema='Journey',
           alias='Tfl-29',
           referential_property='fare',
           is_array=False,
           entity='#/components/schemas/Tfl-28')]
Completable: 0, incomplete: 2
[Reference(schema='Journey',
           alias='Tfl-31',
           referential_property='validityPeriods',
           is_array=True,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Journey',
           alias='Tfl-31',
           referential_property='disruption',
           is_array=False,
           entity='#/components/schemas/Tfl-21')]
Completable: 1, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='lineStatuses',
           is_array=True,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='routeSections',
           is_array=True,
           entity='#/components/schemas/Tfl-32'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='serviceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-33'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-9')]
Completable: 2, incomplete: 3
[Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='earliest',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='earlier',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='later',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='latest',
           is_array=False,
           entity='#/components/schemas/Tfl-36')]
Completable: 4, incomplete: 0
[Reference(schema='Journey',
           alias='Tfl-38',
           referential_property='timeAdjustments',
           is_array=False,
           entity='#/components/schemas/Tfl-37')]
Completable: 0, incomplete: 1
[Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='journeys',
           is_array=True,
           entity='#/components/schemas/Tfl-29'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-34'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='cycleHireDockingStationData',
           is_array=False,
           entity='#/components/schemas/Tfl-35'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='searchCriteria',
           is_array=False,
           entity='#/components/schemas/Tfl-38'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='journeyVector',
           is_array=False,
           entity='#/components/schemas/Tfl-39')]
Completable: 2, incomplete: 3
{'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-10': [],
 'Tfl-11': ['Tfl.Api.Common.JourneyPlanner.JpElevation'],
 'Tfl-12': [],
 'Tfl-13': [],
 'Tfl-14': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-16': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl-17': [],
 'Tfl-18': [],
 'Tfl-19': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.PathAttribute'],
 'Tfl-20': [],
 'Tfl-21': [],
 'Tfl-22': ['Tfl.Api.Presentation.Entities.JourneyPlanner.PlannedWork'],
 'Tfl-23': [],
 'Tfl-24': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTapDetails'],
 'Tfl-25': [],
 'Tfl-26': [],
 'Tfl-27': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareCaveat'],
 'Tfl-28': [],
 'Tfl-29': [],
 'Tfl-3': [],
 'Tfl-30': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
 'Tfl-31': [],
 'Tfl-32': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
 'Tfl-33': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-34': [],
 'Tfl-35': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyPlannerCycleHireDockingStationData'],
 'Tfl-36': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustment'],
 'Tfl-37': [],
 'Tfl-38': [],
 'Tfl-39': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyVector'],
 'Tfl-4': [],
 'Tfl-40': [],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Obstacle'],
 'Tfl-6': ['Tfl.Api.Presentation.Entities.Point'],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-9': []}

[Reference(schema='Line',
           alias='Tfl-5',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='Line',
           alias='Tfl-5',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-4')]
Completable: 2, incomplete: 0
[Reference(schema='Line',
           alias='Tfl-6',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Line',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 1, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 3, incomplete: 2
[Reference(schema='Line',
           alias='Tfl-12',
           referential_property='stopPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-13',
           referential_property='routeSectionNaptanEntrySequence',
           is_array=True,
           entity='#/components/schemas/Tfl-12')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-14',
           referential_property='affectedRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-13'),
 Reference(schema='Line',
           alias='Tfl-14',
           referential_property='affectedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 2
[Reference(schema='Line',
           alias='Tfl-16',
           referential_property='validityPeriods',
           is_array=True,
           entity='#/components/schemas/Tfl-15'),
 Reference(schema='Line',
           alias='Tfl-16',
           referential_property='disruption',
           is_array=False,
           entity='#/components/schemas/Tfl-14')]
Completable: 1, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-19',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-14'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='lineStatuses',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='routeSections',
           is_array=True,
           entity='#/components/schemas/Tfl-17'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='serviceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-18'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 2, incomplete: 3
[Reference(schema='Line',
           alias='Tfl-20',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-21',
           referential_property='stopPoint',
           is_array=True,
           entity='#/components/schemas/Tfl-20')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-23',
           referential_property='stations',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-23',
           referential_property='stopPointSequences',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Line',
           alias='Tfl-23',
           referential_property='orderedLineRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-22')]
Completable: 1, incomplete: 2
[Reference(schema='Line',
           alias='Tfl-26',
           referential_property='lineRouteSection',
           is_array=True,
           entity='#/components/schemas/Tfl-24'),
 Reference(schema='Line',
           alias='Tfl-26',
           referential_property='matchedRouteSections',
           is_array=True,
           entity='#/components/schemas/Tfl-25'),
 Reference(schema='Line',
           alias='Tfl-26',
           referential_property='matchedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-20')]
Completable: 2, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-27',
           referential_property='searchMatches',
           is_array=True,
           entity='#/components/schemas/Tfl-26')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-29',
           referential_property='intervals',
           is_array=True,
           entity='#/components/schemas/Tfl-28')]
Completable: 1, incomplete: 0
[Reference(schema='Line',
           alias='Tfl-33',
           referential_property='fromTime',
           is_array=False,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Line',
           alias='Tfl-33',
           referential_property='toTime',
           is_array=False,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Line',
           alias='Tfl-33',
           referential_property='frequency',
           is_array=False,
           entity='#/components/schemas/Tfl-32')]
Completable: 3, incomplete: 0
[Reference(schema='Line',
           alias='Tfl-34',
           referential_property='knownJourneys',
           is_array=True,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='firstJourney',
           is_array=False,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='lastJourney',
           is_array=False,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='periods',
           is_array=True,
           entity='#/components/schemas/Tfl-33')]
Completable: 3, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-35',
           referential_property='stationIntervals',
           is_array=True,
           entity='#/components/schemas/Tfl-29'),
 Reference(schema='Line',
           alias='Tfl-35',
           referential_property='schedules',
           is_array=True,
           entity='#/components/schemas/Tfl-34')]
Completable: 0, incomplete: 2
[Reference(schema='Line',
           alias='Tfl-36',
           referential_property='routes',
           is_array=True,
           entity='#/components/schemas/Tfl-35')]
Completable: 0, incomplete: 1
[Reference(schema='Line',
           alias='Tfl-38',
           referential_property='disambiguationOptions',
           is_array=True,
           entity='#/components/schemas/Tfl-37')]
Completable: 1, incomplete: 0
[Reference(schema='Line',
           alias='Tfl-39',
           referential_property='stations',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='stops',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='timetable',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='disambiguation',
           is_array=False,
           entity='#/components/schemas/Tfl-38')]
Completable: 0, incomplete: 4
[Reference(schema='Line',
           alias='Tfl-41',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-40')]
Completable: 1, incomplete: 0
{'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-10': [],
 'Tfl-11': [],
 'Tfl-12': [],
 'Tfl-13': [],
 'Tfl-14': [],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
 'Tfl-16': [],
 'Tfl-17': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
 'Tfl-18': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-19': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.StatusSeverity'],
 'Tfl-20': [],
 'Tfl-21': [],
 'Tfl-22': ['Tfl.Api.Presentation.Entities.OrderedRoute'],
 'Tfl-23': [],
 'Tfl-24': ['Tfl.Api.Presentation.Entities.LineRouteSection'],
 'Tfl-25': ['Tfl.Api.Presentation.Entities.MatchedRouteSections'],
 'Tfl-26': [],
 'Tfl-27': [],
 'Tfl-28': ['Tfl.Api.Presentation.Entities.Interval'],
 'Tfl-29': [],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-30': ['Tfl.Api.Presentation.Entities.KnownJourney'],
 'Tfl-31': ['Tfl.Api.Presentation.Entities.TwentyFourHourClockTime'],
 'Tfl-32': ['Tfl.Api.Presentation.Entities.ServiceFrequency'],
 'Tfl-33': [],
 'Tfl-34': [],
 'Tfl-35': [],
 'Tfl-36': [],
 'Tfl-37': ['Tfl.Api.Presentation.Entities.Timetables.DisambiguationOption'],
 'Tfl-38': [],
 'Tfl-39': [],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-40': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-41': [],
 'Tfl-5': [],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']}

[Reference(schema='Place',
           alias='Tfl-3',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-2'),
 Reference(schema='Place',
           alias='Tfl-3',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 1, incomplete: 1
[Reference(schema='Place',
           alias='Tfl-6',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Place',
           alias='Tfl-6',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-5')]
Completable: 2, incomplete: 0
[Reference(schema='Place',
           alias='Tfl-7',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-6')]
Completable: 0, incomplete: 1
[Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-2'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 3, incomplete: 2
{'System': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
         'Tfl.Api.Presentation.Entities.StopPointCategory'],
 'Tfl-10': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl-3': [],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-6': [],
 'Tfl-7': [],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.LineModeGroup']}

Just from looking at some of these, I expect this to be sufficient to fully resolve all of the remaining entity names, without 'fuzzy' matching (using both the "$ref" and "items" keys).

lmmx commented 2 years ago

Begun work on dealiasing the references:

lmmx commented 2 years ago

References now resolved and used to modify schema properties when comparing against the unified API c4248d9ae536b6608081ad6ff05791883e6c9460

[Reference(schema='occupancy',
           alias='Tfl-2',
           referential_property='bays',
           is_array=True,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'Tfl': ['Tfl.Api.Presentation.Entities.Bay'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.CarParkOccupancy'],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy'],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.BikePointOccupancy']}

[Reference(schema='StopPoint',
           alias='Tfl-5',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='StopPoint',
           alias='Tfl-5',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-4')]
Completable: 2, incomplete: 0
Resolved property refs: 2
[Reference(schema='StopPoint',
           alias='Tfl-6',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='StopPoint',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='StopPoint',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='StopPoint',
           alias='Tfl-11',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 3, incomplete: 2
Resolved property refs: 3
[Reference(schema='StopPoint',
           alias='Tfl-13',
           referential_property='serviceType',
           is_array=False,
           entity='#/components/schemas/Tfl-12')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='StopPoint',
           alias='Tfl-14',
           referential_property='lineSpecificServiceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-13')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='StopPoint',
           alias='Tfl-16',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-15')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='StopPoint',
           alias='Tfl-17',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-15')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='StopPoint',
           alias='Tfl-20',
           referential_property='stopPoints',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='StopPoint',
           alias='Tfl-22',
           referential_property='matches',
           is_array=True,
           entity='#/components/schemas/Tfl-21')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'System': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
         'Tfl.Api.Presentation.Entities.StopPointCategory'],
 'Tfl-10': [],
 'Tfl-11': [],
 'Tfl-12': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-13': ['Tfl.Api.Presentation.Entities.LineSpecificServiceType'],
 'Tfl-14': [],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-16': ['Tfl.Api.Presentation.Entities.Prediction'],
 'Tfl-17': ['Tfl.Api.Presentation.Entities.ArrivalDeparture'],
 'Tfl-18': ['Tfl.Api.Presentation.Entities.StopPointRouteSection'],
 'Tfl-19': ['Tfl.Api.Presentation.Entities.DisruptedPoint'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-20': [],
 'Tfl-21': ['Tfl.Api.Presentation.Entities.SearchMatch'],
 'Tfl-22': ['Tfl.Api.Presentation.Entities.SearchResponse'],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']}

[Reference(schema='Search',
           alias='Tfl-2',
           referential_property='matches',
           is_array=True,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'Tfl': ['Tfl.Api.Presentation.Entities.SearchMatch'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.SearchResponse']}

[Reference(schema='Mode',
           alias='Tfl.Api.Presentation.Entities.Prediction',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.PredictionTiming')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'Tfl.Api.Presentation.Entities.ActiveServiceType': ['Tfl.Api.Presentation.Entities.ActiveServiceType'],
 'Tfl.Api.Presentation.Entities.Prediction': ['Tfl.Api.Presentation.Entities.Prediction',
                                              'Tfl.Api.Presentation.Entities.Prediction'],
 'Tfl.Api.Presentation.Entities.PredictionTiming': ['Tfl.Api.Presentation.Entities.PredictionTiming']}

[Reference(schema='Vehicle',
           alias='Tfl-2',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'Tfl': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.Prediction'],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.VehicleMatch']}

[Reference(schema='AccidentStats',
           alias='Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
           referential_property='casualties',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AccidentStats.Casualty'),
 Reference(schema='AccidentStats',
           alias='Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
           referential_property='vehicles',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AccidentStats.Vehicle')]
Completable: 2, incomplete: 0
Resolved property refs: 2
{'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail': ['Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
                                                                'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail'],
 'Tfl.Api.Presentation.Entities.AccidentStats.Casualty': ['Tfl.Api.Presentation.Entities.AccidentStats.Casualty'],
 'Tfl.Api.Presentation.Entities.AccidentStats.Vehicle': ['Tfl.Api.Presentation.Entities.AccidentStats.Vehicle']}

[Reference(schema='Road',
           alias='System-2',
           referential_property='geography',
           is_array=False,
           entity='#/components/schemas/System')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Road',
           alias='Tfl-3',
           referential_property='segments',
           is_array=True,
           entity='#/components/schemas/Tfl-2')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Road',
           alias='Tfl-5',
           referential_property='multiLineString',
           is_array=False,
           entity='#/components/schemas/System-2')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Road',
           alias='Tfl-6',
           referential_property='polygon',
           is_array=False,
           entity='#/components/schemas/System-2')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Road',
           alias='Tfl-8',
           referential_property='geography',
           is_array=False,
           entity='#/components/schemas/System-2'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='geometry',
           is_array=False,
           entity='#/components/schemas/System-2'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='streets',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadProject',
           is_array=False,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadDisruptionLines',
           is_array=True,
           entity='#/components/schemas/Tfl-5'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='roadDisruptionImpactAreas',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Road',
           alias='Tfl-8',
           referential_property='recurringSchedules',
           is_array=True,
           entity='#/components/schemas/Tfl-7')]
Completable: 2, incomplete: 5
Resolved property refs: 2
{'System': ['System.Data.Spatial.DbGeographyWellKnownValue'],
 'System-2': ['System.Data.Spatial.DbGeography'],
 'System-3': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.RoadCorridor'],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.StreetSegment'],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.Street'],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.RoadProject'],
 'Tfl-5': [],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.RoadDisruptionSchedule'],
 'Tfl-8': [],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.StatusSeverity']}

[Reference(schema='BikePoint',
           alias='Tfl.Api.Presentation.Entities.Place',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.AdditionalProperties'),
 Reference(schema='BikePoint',
           alias='Tfl.Api.Presentation.Entities.Place',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl.Api.Presentation.Entities.Place')]
Completable: 2, incomplete: 0
Resolved property refs: 2
{'Tfl.Api.Presentation.Entities.AdditionalProperties': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl.Api.Presentation.Entities.Place': ['Tfl.Api.Presentation.Entities.Place',
                                         'Tfl.Api.Presentation.Entities.Place']}

[Reference(schema='Journey',
           alias='Tfl-3',
           referential_property='pathAttribute',
           is_array=False,
           entity='#/components/schemas/Tfl-2')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-4',
           referential_property='steps',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-9',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Journey',
           alias='Tfl-9',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-8')]
Completable: 2, incomplete: 0
Resolved property refs: 2
[Reference(schema='Journey',
           alias='Tfl-10',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-9')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-12',
           referential_property='stopPoints',
           is_array=True,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-12',
           referential_property='elevation',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-13',
           referential_property='lineIdentifier',
           is_array=False,
           entity='#/components/schemas/Tfl-10')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-17',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Journey',
           alias='Tfl-17',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-17')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-14'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-15'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Journey',
           alias='Tfl-18',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-17')]
Completable: 3, incomplete: 2
Resolved property refs: 3
[Reference(schema='Journey',
           alias='Tfl-19',
           referential_property='stopPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-18')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-20',
           referential_property='routeSectionNaptanEntrySequence',
           is_array=True,
           entity='#/components/schemas/Tfl-19')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-21',
           referential_property='affectedRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Journey',
           alias='Tfl-21',
           referential_property='affectedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-18')]
Completable: 0, incomplete: 2
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='instruction',
           is_array=False,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='obstacles',
           is_array=True,
           entity='#/components/schemas/Tfl-5'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='departurePoint',
           is_array=False,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='arrivalPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='path',
           is_array=False,
           entity='#/components/schemas/Tfl-12'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='routeOptions',
           is_array=True,
           entity='#/components/schemas/Tfl-13'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='mode',
           is_array=False,
           entity='#/components/schemas/Tfl-10'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Journey',
           alias='Tfl-23',
           referential_property='plannedWorks',
           is_array=True,
           entity='#/components/schemas/Tfl-22')]
Completable: 4, incomplete: 5
Resolved property refs: 4
[Reference(schema='Journey',
           alias='Tfl-25',
           referential_property='tapDetails',
           is_array=False,
           entity='#/components/schemas/Tfl-24')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-26',
           referential_property='taps',
           is_array=True,
           entity='#/components/schemas/Tfl-25')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-28',
           referential_property='fares',
           is_array=True,
           entity='#/components/schemas/Tfl-26'),
 Reference(schema='Journey',
           alias='Tfl-28',
           referential_property='caveats',
           is_array=True,
           entity='#/components/schemas/Tfl-27')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-29',
           referential_property='legs',
           is_array=True,
           entity='#/components/schemas/Tfl-23'),
 Reference(schema='Journey',
           alias='Tfl-29',
           referential_property='fare',
           is_array=False,
           entity='#/components/schemas/Tfl-28')]
Completable: 0, incomplete: 2
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-31',
           referential_property='validityPeriods',
           is_array=True,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Journey',
           alias='Tfl-31',
           referential_property='disruption',
           is_array=False,
           entity='#/components/schemas/Tfl-21')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='lineStatuses',
           is_array=True,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='routeSections',
           is_array=True,
           entity='#/components/schemas/Tfl-32'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='serviceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-33'),
 Reference(schema='Journey',
           alias='Tfl-34',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-9')]
Completable: 2, incomplete: 3
Resolved property refs: 2
[Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='earliest',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='earlier',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='later',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Journey',
           alias='Tfl-37',
           referential_property='latest',
           is_array=False,
           entity='#/components/schemas/Tfl-36')]
Completable: 4, incomplete: 0
Resolved property refs: 4
[Reference(schema='Journey',
           alias='Tfl-38',
           referential_property='timeAdjustments',
           is_array=False,
           entity='#/components/schemas/Tfl-37')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='journeys',
           is_array=True,
           entity='#/components/schemas/Tfl-29'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-34'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='cycleHireDockingStationData',
           is_array=False,
           entity='#/components/schemas/Tfl-35'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='searchCriteria',
           is_array=False,
           entity='#/components/schemas/Tfl-38'),
 Reference(schema='Journey',
           alias='Tfl-40',
           referential_property='journeyVector',
           is_array=False,
           entity='#/components/schemas/Tfl-39')]
Completable: 2, incomplete: 3
Resolved property refs: 2
{'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-10': [],
 'Tfl-11': ['Tfl.Api.Common.JourneyPlanner.JpElevation'],
 'Tfl-12': [],
 'Tfl-13': [],
 'Tfl-14': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-16': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl-17': [],
 'Tfl-18': [],
 'Tfl-19': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.PathAttribute'],
 'Tfl-20': [],
 'Tfl-21': [],
 'Tfl-22': ['Tfl.Api.Presentation.Entities.JourneyPlanner.PlannedWork'],
 'Tfl-23': [],
 'Tfl-24': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTapDetails'],
 'Tfl-25': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTap'],
 'Tfl-26': [],
 'Tfl-27': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareCaveat'],
 'Tfl-28': [],
 'Tfl-29': [],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.InstructionStep'],
 'Tfl-30': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
 'Tfl-31': [],
 'Tfl-32': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
 'Tfl-33': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-34': [],
 'Tfl-35': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyPlannerCycleHireDockingStationData'],
 'Tfl-36': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustment'],
 'Tfl-37': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustments'],
 'Tfl-38': [],
 'Tfl-39': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyVector'],
 'Tfl-4': [],
 'Tfl-40': [],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Obstacle'],
 'Tfl-6': ['Tfl.Api.Presentation.Entities.Point'],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.Crowding']}

[Reference(schema='Line',
           alias='Tfl-5',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-3'),
 Reference(schema='Line',
           alias='Tfl-5',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-4')]
Completable: 2, incomplete: 0
Resolved property refs: 2
[Reference(schema='Line',
           alias='Tfl-6',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Line',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Line',
           alias='Tfl-11',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-10')]
Completable: 3, incomplete: 2
Resolved property refs: 3
[Reference(schema='Line',
           alias='Tfl-12',
           referential_property='stopPoint',
           is_array=False,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-13',
           referential_property='routeSectionNaptanEntrySequence',
           is_array=True,
           entity='#/components/schemas/Tfl-12')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-14',
           referential_property='affectedRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-13'),
 Reference(schema='Line',
           alias='Tfl-14',
           referential_property='affectedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-11')]
Completable: 0, incomplete: 2
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-16',
           referential_property='validityPeriods',
           is_array=True,
           entity='#/components/schemas/Tfl-15'),
 Reference(schema='Line',
           alias='Tfl-16',
           referential_property='disruption',
           is_array=False,
           entity='#/components/schemas/Tfl-14')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Line',
           alias='Tfl-19',
           referential_property='disruptions',
           is_array=True,
           entity='#/components/schemas/Tfl-14'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='lineStatuses',
           is_array=True,
           entity='#/components/schemas/Tfl-16'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='routeSections',
           is_array=True,
           entity='#/components/schemas/Tfl-17'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='serviceTypes',
           is_array=True,
           entity='#/components/schemas/Tfl-18'),
 Reference(schema='Line',
           alias='Tfl-19',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-5')]
Completable: 2, incomplete: 3
Resolved property refs: 2
[Reference(schema='Line',
           alias='Tfl-20',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-6')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-21',
           referential_property='stopPoint',
           is_array=True,
           entity='#/components/schemas/Tfl-20')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-23',
           referential_property='stations',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-23',
           referential_property='stopPointSequences',
           is_array=True,
           entity='#/components/schemas/Tfl-21'),
 Reference(schema='Line',
           alias='Tfl-23',
           referential_property='orderedLineRoutes',
           is_array=True,
           entity='#/components/schemas/Tfl-22')]
Completable: 1, incomplete: 2
Resolved property refs: 1
[Reference(schema='Line',
           alias='Tfl-26',
           referential_property='lineRouteSection',
           is_array=True,
           entity='#/components/schemas/Tfl-24'),
 Reference(schema='Line',
           alias='Tfl-26',
           referential_property='matchedRouteSections',
           is_array=True,
           entity='#/components/schemas/Tfl-25'),
 Reference(schema='Line',
           alias='Tfl-26',
           referential_property='matchedStops',
           is_array=True,
           entity='#/components/schemas/Tfl-20')]
Completable: 2, incomplete: 1
Resolved property refs: 2
[Reference(schema='Line',
           alias='Tfl-27',
           referential_property='searchMatches',
           is_array=True,
           entity='#/components/schemas/Tfl-26')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-29',
           referential_property='intervals',
           is_array=True,
           entity='#/components/schemas/Tfl-28')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Line',
           alias='Tfl-33',
           referential_property='fromTime',
           is_array=False,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Line',
           alias='Tfl-33',
           referential_property='toTime',
           is_array=False,
           entity='#/components/schemas/Tfl-31'),
 Reference(schema='Line',
           alias='Tfl-33',
           referential_property='frequency',
           is_array=False,
           entity='#/components/schemas/Tfl-32')]
Completable: 3, incomplete: 0
Resolved property refs: 3
[Reference(schema='Line',
           alias='Tfl-34',
           referential_property='knownJourneys',
           is_array=True,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='firstJourney',
           is_array=False,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='lastJourney',
           is_array=False,
           entity='#/components/schemas/Tfl-30'),
 Reference(schema='Line',
           alias='Tfl-34',
           referential_property='periods',
           is_array=True,
           entity='#/components/schemas/Tfl-33')]
Completable: 3, incomplete: 1
Resolved property refs: 3
[Reference(schema='Line',
           alias='Tfl-35',
           referential_property='stationIntervals',
           is_array=True,
           entity='#/components/schemas/Tfl-29'),
 Reference(schema='Line',
           alias='Tfl-35',
           referential_property='schedules',
           is_array=True,
           entity='#/components/schemas/Tfl-34')]
Completable: 0, incomplete: 2
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-36',
           referential_property='routes',
           is_array=True,
           entity='#/components/schemas/Tfl-35')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-38',
           referential_property='disambiguationOptions',
           is_array=True,
           entity='#/components/schemas/Tfl-37')]
Completable: 1, incomplete: 0
Resolved property refs: 1
[Reference(schema='Line',
           alias='Tfl-39',
           referential_property='stations',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='stops',
           is_array=True,
           entity='#/components/schemas/Tfl-20'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='timetable',
           is_array=False,
           entity='#/components/schemas/Tfl-36'),
 Reference(schema='Line',
           alias='Tfl-39',
           referential_property='disambiguation',
           is_array=False,
           entity='#/components/schemas/Tfl-38')]
Completable: 0, incomplete: 4
Resolved property refs: 0
[Reference(schema='Line',
           alias='Tfl-41',
           referential_property='timing',
           is_array=False,
           entity='#/components/schemas/Tfl-40')]
Completable: 1, incomplete: 0
Resolved property refs: 1
{'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
 'Tfl-10': [],
 'Tfl-11': [],
 'Tfl-12': [],
 'Tfl-13': [],
 'Tfl-14': [],
 'Tfl-15': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
 'Tfl-16': [],
 'Tfl-17': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
 'Tfl-18': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
 'Tfl-19': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.StatusSeverity'],
 'Tfl-20': [],
 'Tfl-21': [],
 'Tfl-22': ['Tfl.Api.Presentation.Entities.OrderedRoute'],
 'Tfl-23': [],
 'Tfl-24': ['Tfl.Api.Presentation.Entities.LineRouteSection'],
 'Tfl-25': ['Tfl.Api.Presentation.Entities.MatchedRouteSections'],
 'Tfl-26': [],
 'Tfl-27': [],
 'Tfl-28': ['Tfl.Api.Presentation.Entities.Interval'],
 'Tfl-29': ['Tfl.Api.Presentation.Entities.StationInterval'],
 'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-30': ['Tfl.Api.Presentation.Entities.KnownJourney'],
 'Tfl-31': ['Tfl.Api.Presentation.Entities.TwentyFourHourClockTime'],
 'Tfl-32': ['Tfl.Api.Presentation.Entities.ServiceFrequency'],
 'Tfl-33': ['Tfl.Api.Presentation.Entities.Period'],
 'Tfl-34': [],
 'Tfl-35': [],
 'Tfl-36': [],
 'Tfl-37': ['Tfl.Api.Presentation.Entities.Timetables.DisambiguationOption'],
 'Tfl-38': ['Tfl.Api.Presentation.Entities.Timetables.Disambiguation'],
 'Tfl-39': [],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-40': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
 'Tfl-41': ['Tfl.Api.Presentation.Entities.Prediction'],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
 'Tfl-6': [],
 'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']}

[Reference(schema='Place',
           alias='Tfl-3',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-2'),
 Reference(schema='Place',
           alias='Tfl-3',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 1, incomplete: 1
Resolved property refs: 1
[Reference(schema='Place',
           alias='Tfl-6',
           referential_property='passengerFlows',
           is_array=True,
           entity='#/components/schemas/Tfl-4'),
 Reference(schema='Place',
           alias='Tfl-6',
           referential_property='trainLoadings',
           is_array=True,
           entity='#/components/schemas/Tfl-5')]
Completable: 2, incomplete: 0
Resolved property refs: 2
[Reference(schema='Place',
           alias='Tfl-7',
           referential_property='crowding',
           is_array=False,
           entity='#/components/schemas/Tfl-6')]
Completable: 0, incomplete: 1
Resolved property refs: 0
[Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lines',
           is_array=True,
           entity='#/components/schemas/Tfl-7'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lineGroup',
           is_array=True,
           entity='#/components/schemas/Tfl-8'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='lineModeGroups',
           is_array=True,
           entity='#/components/schemas/Tfl-9'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='additionalProperties',
           is_array=True,
           entity='#/components/schemas/Tfl-2'),
 Reference(schema='Place',
           alias='Tfl-10',
           referential_property='children',
           is_array=True,
           entity='#/components/schemas/Tfl-3')]
Completable: 3, incomplete: 2
Resolved property refs: 3
{'System': ['System.Object'],
 'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
         'Tfl.Api.Presentation.Entities.StopPointCategory'],
 'Tfl-10': [],
 'Tfl-2': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
 'Tfl-3': [],
 'Tfl-4': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
 'Tfl-5': ['Tfl.Api.Presentation.Entities.TrainLoading'],
 'Tfl-6': ['Tfl.Api.Presentation.Entities.Crowding'],
 'Tfl-7': [],
 'Tfl-8': ['Tfl.Api.Presentation.Entities.LineGroup'],
 'Tfl-9': ['Tfl.Api.Presentation.Entities.LineModeGroup']}
lmmx commented 2 years ago

It seems like there'll be an indication of incremental progress: e.g. the final API, Place, went from 4 missing entities (in the output above top) to 3 missing entities (in the output directly above). The change could be deposited somewhere and then we could monitor the last element in that store (so in this case the change would be from 4 missing to 3 missing = 1 resolved, so we would append the number 1 to a list and then a loop would check it with progress_list[-1].

lmmx commented 2 years ago

Some progress tonight:

{'AccidentStats': {'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail': ['Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail',
                                                                                  'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail'],
                   'Tfl.Api.Presentation.Entities.AccidentStats.Casualty': ['Tfl.Api.Presentation.Entities.AccidentStats.Casualty'],
                   'Tfl.Api.Presentation.Entities.AccidentStats.Vehicle': ['Tfl.Api.Presentation.Entities.AccidentStats.Vehicle']},
 'AirQuality': {'System.Object': ['System.Object']},
 'BikePoint': {'Tfl.Api.Presentation.Entities.AdditionalProperties': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
               'Tfl.Api.Presentation.Entities.Place': ['Tfl.Api.Presentation.Entities.Place',
                                                       'Tfl.Api.Presentation.Entities.Place']},
 'Disruptions-Lifts-v2': {'LiftDisruption': []},
 'Journey': {'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
             'Tfl-10': [],
             'Tfl-11': ['Tfl.Api.Common.JourneyPlanner.JpElevation'],
             'Tfl-12': [],
             'Tfl-13': [],
             'Tfl-14': ['Tfl.Api.Presentation.Entities.LineGroup'],
             'Tfl-15': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
             'Tfl-16': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
             'Tfl-17': [],
             'Tfl-18': [],
             'Tfl-19': [],
             'Tfl-2': ['Tfl.Api.Presentation.Entities.PathAttribute'],
             'Tfl-20': [],
             'Tfl-21': [],
             'Tfl-22': ['Tfl.Api.Presentation.Entities.JourneyPlanner.PlannedWork'],
             'Tfl-23': [],
             'Tfl-24': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTapDetails'],
             'Tfl-25': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTap'],
             'Tfl-26': [],
             'Tfl-27': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareCaveat'],
             'Tfl-28': [],
             'Tfl-29': [],
             'Tfl-3': ['Tfl.Api.Presentation.Entities.InstructionStep'],
             'Tfl-30': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
             'Tfl-31': [],
             'Tfl-32': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
             'Tfl-33': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
             'Tfl-34': [],
             'Tfl-35': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyPlannerCycleHireDockingStationData'],
             'Tfl-36': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustment'],
             'Tfl-37': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustments'],
             'Tfl-38': [],
             'Tfl-39': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyVector'],
             'Tfl-4': [],
             'Tfl-40': [],
             'Tfl-5': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Obstacle'],
             'Tfl-6': ['Tfl.Api.Presentation.Entities.Point'],
             'Tfl-7': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
             'Tfl-8': ['Tfl.Api.Presentation.Entities.TrainLoading'],
             'Tfl-9': ['Tfl.Api.Presentation.Entities.Crowding']},
 'Line': {'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
          'Tfl-10': [],
          'Tfl-11': [],
          'Tfl-12': [],
          'Tfl-13': [],
          'Tfl-14': [],
          'Tfl-15': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
          'Tfl-16': [],
          'Tfl-17': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
          'Tfl-18': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
          'Tfl-19': [],
          'Tfl-2': ['Tfl.Api.Presentation.Entities.StatusSeverity'],
          'Tfl-20': [],
          'Tfl-21': [],
          'Tfl-22': ['Tfl.Api.Presentation.Entities.OrderedRoute'],
          'Tfl-23': [],
          'Tfl-24': ['Tfl.Api.Presentation.Entities.LineRouteSection'],
          'Tfl-25': ['Tfl.Api.Presentation.Entities.MatchedRouteSections'],
          'Tfl-26': [],
          'Tfl-27': [],
          'Tfl-28': ['Tfl.Api.Presentation.Entities.Interval'],
          'Tfl-29': ['Tfl.Api.Presentation.Entities.StationInterval'],
          'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
          'Tfl-30': ['Tfl.Api.Presentation.Entities.KnownJourney'],
          'Tfl-31': ['Tfl.Api.Presentation.Entities.TwentyFourHourClockTime'],
          'Tfl-32': ['Tfl.Api.Presentation.Entities.ServiceFrequency'],
          'Tfl-33': ['Tfl.Api.Presentation.Entities.Period'],
          'Tfl-34': [],
          'Tfl-35': [],
          'Tfl-36': [],
          'Tfl-37': ['Tfl.Api.Presentation.Entities.Timetables.DisambiguationOption'],
          'Tfl-38': ['Tfl.Api.Presentation.Entities.Timetables.Disambiguation'],
          'Tfl-39': [],
          'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
          'Tfl-40': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
          'Tfl-41': ['Tfl.Api.Presentation.Entities.Prediction'],
          'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
          'Tfl-6': [],
          'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
          'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
          'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']},
 'Mode': {'Tfl.Api.Presentation.Entities.ActiveServiceType': ['Tfl.Api.Presentation.Entities.ActiveServiceType'],
          'Tfl.Api.Presentation.Entities.Prediction': ['Tfl.Api.Presentation.Entities.Prediction',
                                                       'Tfl.Api.Presentation.Entities.Prediction'],
          'Tfl.Api.Presentation.Entities.PredictionTiming': ['Tfl.Api.Presentation.Entities.PredictionTiming']},
 'Place': {'System': ['System.Object'],
           'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
                   'Tfl.Api.Presentation.Entities.StopPointCategory'],
           'Tfl-10': [],
           'Tfl-2': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
           'Tfl-3': [],
           'Tfl-4': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
           'Tfl-5': ['Tfl.Api.Presentation.Entities.TrainLoading'],
           'Tfl-6': ['Tfl.Api.Presentation.Entities.Crowding'],
           'Tfl-7': [],
           'Tfl-8': ['Tfl.Api.Presentation.Entities.LineGroup'],
           'Tfl-9': ['Tfl.Api.Presentation.Entities.LineModeGroup']},
 'Road': {'System': ['System.Data.Spatial.DbGeographyWellKnownValue'],
          'System-2': ['System.Data.Spatial.DbGeography'],
          'System-3': ['System.Object'],
          'Tfl': ['Tfl.Api.Presentation.Entities.RoadCorridor'],
          'Tfl-2': ['Tfl.Api.Presentation.Entities.StreetSegment'],
          'Tfl-3': ['Tfl.Api.Presentation.Entities.Street'],
          'Tfl-4': ['Tfl.Api.Presentation.Entities.RoadProject'],
          'Tfl-5': [],
          'Tfl-6': [],
          'Tfl-7': ['Tfl.Api.Presentation.Entities.RoadDisruptionSchedule'],
          'Tfl-8': [],
          'Tfl-9': ['Tfl.Api.Presentation.Entities.StatusSeverity']},
 'Search': {'Tfl': ['Tfl.Api.Presentation.Entities.SearchMatch'],
            'Tfl-2': ['Tfl.Api.Presentation.Entities.SearchResponse']},
 'StopPoint': {'System': ['System.Object'],
               'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
                       'Tfl.Api.Presentation.Entities.StopPointCategory'],
               'Tfl-10': [],
               'Tfl-11': [],
               'Tfl-12': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
               'Tfl-13': ['Tfl.Api.Presentation.Entities.LineSpecificServiceType'],
               'Tfl-14': [],
               'Tfl-15': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
               'Tfl-16': ['Tfl.Api.Presentation.Entities.Prediction'],
               'Tfl-17': ['Tfl.Api.Presentation.Entities.ArrivalDeparture'],
               'Tfl-18': ['Tfl.Api.Presentation.Entities.StopPointRouteSection'],
               'Tfl-19': ['Tfl.Api.Presentation.Entities.DisruptedPoint'],
               'Tfl-2': ['Tfl.Api.Presentation.Entities.Mode'],
               'Tfl-20': [],
               'Tfl-21': ['Tfl.Api.Presentation.Entities.SearchMatch'],
               'Tfl-22': ['Tfl.Api.Presentation.Entities.SearchResponse'],
               'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
               'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
               'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
               'Tfl-6': [],
               'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
               'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
               'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']},
 'Vehicle': {'Tfl': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
             'Tfl-2': ['Tfl.Api.Presentation.Entities.Prediction'],
             'Tfl-3': ['Tfl.Api.Presentation.Entities.VehicleMatch']},
 'crowding': {},
 'occupancy': {'Tfl': ['Tfl.Api.Presentation.Entities.Bay'],
               'Tfl-2': ['Tfl.Api.Presentation.Entities.CarParkOccupancy'],
               'Tfl-3': ['Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy'],
               'Tfl-4': ['Tfl.Api.Presentation.Entities.BikePointOccupancy']}}
lmmx commented 2 years ago

It might help solve this problem by creating three types of entity:

as then it’d be more concise what we’re dealing with. These could be 3 classes (the 3rd being ‘unknown’), or the 1st and 2nd could inherit from the 3rd (since it looks like it’ll never be needed unless an error is made).

lmmx commented 2 years ago

To drill down into the minimum viable example from the above:

'Place': {'System': ['System.Object'],
           'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
                   'Tfl.Api.Presentation.Entities.StopPointCategory'],
           'Tfl-10': [],
           'Tfl-2': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
           'Tfl-3': [],
           'Tfl-4': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
           'Tfl-5': ['Tfl.Api.Presentation.Entities.TrainLoading'],
           'Tfl-6': ['Tfl.Api.Presentation.Entities.Crowding'],
           'Tfl-7': [],
           'Tfl-8': ['Tfl.Api.Presentation.Entities.LineGroup'],
           'Tfl-9': ['Tfl.Api.Presentation.Entities.LineModeGroup']},

Note: to drill down here in a code debugger, add

if self.path.stem == "Place":
    breakpoint()

to the __post_init__ method of src/tubeulator/openapi/schema/aliased.pyAliasedApiSchema

You might expect the way to approach the remaining step (resolution of Tfl-10, Tfl-3, and Tfl-7) would be to manually compare these to what we find in the place JSON schema, and you’d expect (or hope) there’d be 3 remaining unmapped entities which’d then just require matching (and could maybe be done by some simple guessing based on which property names are shared among them).

However the problem is that we don’t know which are the remaining subset of entities associated with this API: we can only narrow it down to the entities not associated with this API among all entities (since an entity used by another API may also be used here, since it’s not unified there will be duplication of entity definitions between API schemas).

What can be done however is to look at the properties and get candidate entities which share those properties.

So Tfl-10 has a property naptanId, platformName, indicator, which are common ones, but also distance (with description that begins “The distance of the place from its search point”)… So it’s clear to a human reader that the entity this property belongs to is something to do with the search endpoint of the places API (perhaps a search result then).

If we look for ‘naptanId’ in the unified schema we get 80 results, but if we look for distance we only get 8, and if we look for the description beginning “The distance of the place from its search point” we get only 2.

The 2 hits are for Tfl.Api.Presentation.Entities.Place and Tfl.Api.Presentation.Entities.StopPoint. Are these entities duplicates or can we distinguish between them? The quickest check is to count the properties: Tfl-10 has 27 properties:

So Tfl-10 can be matched to Tfl.Api.Presentation.Entities.StopPoint

and so on:

On the last one of these the difference was the property names, not the property count (both the Identifier entity and Tfl.Api.Presentation.Entities.CycleSuperhighway entity had the routeType property and both had 8 properties).

It seems likely that “find the entities with matching property names” will suffice to complete the resolution (without resorting to property descriptions).

lmmx commented 2 years ago

To summarise: after the reference-based resolution, we want to match based on a narrowing down of candidates.

Also entities should be a set not a list note the duplicates

lmmx commented 2 years ago

It turns out that you can't easily obtain the "minimum viable example" above, because it was only obtained by ignoring the presence of keys with "Response" in the name.

The schemas which are named things like 'BikePoints-ids-Get200ApplicationJsonResponse appears to be made dynamically from the responses annotated on particular APIs.

When you search for Tfl.Api.Presentation.Entities.BikePointOccupancy in vim you find Tfl-Api-Presentation-Entities-BikePointOccupancyArray which I had been ignoring. This name is clearly made 'on the fly', and it simply defines an array of items of $ref = #/components/schemas/Tfl.Api.Presentation.Entities.BikePointOccupancy.

When you look for uses of this array entity, you find it appears in the following clause

        "/Occupancy/BikePoints/{ids}": {
            "get": {
                "tags": [
                    "Occupancy"
                ],
                "summary": "Get the occupancy for bike points.",
                "description": "Get the occupancy for bike points.",
                "operationId": "Occupancy_GetBikePointsOccupancies",
                "parameters": [
                    {
                        "name": "ids",
                        "in": "path",
                        "description": "",
                        "required": true,
                        "schema": {
                            "type": "array"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Tfl-Api-Presentation-Entities-BikePointOccupancyArray"
                                },
                                "example": [
                                    {
                                        "id": "string",
                                        "name": "string",
                                        "bikesCount": 0,
                                        "emptyDocks": 0,
                                        "totalDocks": 0
                                    }
                                ]
                            },
                            "text/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Tfl-Api-Presentation-Entities-BikePointOccupancyArray-1"
                                },
                                "example": [
                                    {
                                        "id": "string",
                                        "name": "string",
                                        "bikesCount": 0,
                                        "emptyDocks": 0,
                                        "totalDocks": 0
                                    }
                                ]
                            },
                            "application/xml": {
                                "schema": {
                                    "$ref": "#/components/schemas/Tfl-Api-Presentation-Entities-BikePointOccupancyArray-2"
                                },
                                "example": "<Tfl-Api-Presentation-Entities-BikePointOccupancyArray-2> <id>string</id> <name>string</name> <bikesCount>0</bikesCount> <emptyDocks>0</emptyDocks> <totalDocks>0</totalDocks> </Tfl-Api-Presentation-Entities-BikePointOccupancyArray-2>"
                            },
                            "text/xml": {
                                "schema": {
                                    "$ref": "#/components/schemas/Tfl-Api-Presentation-Entities-BikePointOccupancyArray-3"
                                },
                                "example": "<Tfl-Api-Presentation-Entities-BikePointOccupancyArray-3> <id>string</id> <name>string</name> <bikesCount>0</bikesCount> <emptyDocks>0</emptyDocks> <totalDocks>0</totalDocks> </Tfl-Api-Presentation-Entities-BikePointOccupancyArray-3>"
                            }
                        }
                    }
                }
            }
        },

This node is in the "paths" defined right at the top of the unified JSON schema:

{
    "openapi": "3.0.1",
    "info": {
        "title": "Unified API",
        "description": "This API document is a legacy from our last portal. All the other APIs are bundled here as a single ungrouped OpenAPI document. You are advised to use the other APIs for documentation.",
        "version": "1.0"
    },
    "servers": [
        {   
            "url": "https://api.tfl.gov.uk"
        }
    ],
    "paths": {
lmmx commented 2 years ago

So far we were assuming that each entity would map to one of the "schemas" listed under "components", however...

Note the above entity BikePoints-ids-Get200ApplicationJsonResponse comes from the 'path' at /Occupancy/BikePoints/{ids} > get > responses > 200 > content > application/json. You can see the 'recipe' there:

  1. Slug the subpath (/BikePoints/{ids}) below the API name path (/Occupancy), replacing / with - and removing any non-alphanumeric characters
  2. "Camel Case" the method (get) to join it with the response code (200) and mime type parts (application/json), and singular of 'responses' (Response)

Based on that, maybe we can in fact omit the Response ones because they won't map back to an entity...?

lmmx commented 2 years ago

Done!

{'AccidentStats': {'Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray': ['Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray'],
                   'Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-1': ['Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-1'],
                   'Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-2': ['Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-2'],
                   'Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-3': ['Tfl-Api-Presentation-Entities-AccidentStats-AccidentDetailArray-3'],
                   'Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail': ['Tfl.Api.Presentation.Entities.AccidentStats.AccidentDetail'],
                   'Tfl.Api.Presentation.Entities.AccidentStats.Casualty': ['Tfl.Api.Presentation.Entities.AccidentStats.Casualty'],
                   'Tfl.Api.Presentation.Entities.AccidentStats.Vehicle': ['Tfl.Api.Presentation.Entities.AccidentStats.Vehicle']},
 'AirQuality': {'System.Object': ['System.Object']},
 'BikePoint': {'Tfl-Api-Presentation-Entities-PlaceArray': ['Tfl-Api-Presentation-Entities-PlaceArray'],
               'Tfl-Api-Presentation-Entities-PlaceArray-1': ['Tfl-Api-Presentation-Entities-PlaceArray-1'],
               'Tfl-Api-Presentation-Entities-PlaceArray-2': ['Tfl-Api-Presentation-Entities-PlaceArray-2'],
               'Tfl-Api-Presentation-Entities-PlaceArray-3': ['Tfl-Api-Presentation-Entities-PlaceArray-3'],
               'Tfl-Api-Presentation-Entities-PlaceArray-4': ['Tfl-Api-Presentation-Entities-PlaceArray-4'],
               'Tfl-Api-Presentation-Entities-PlaceArray-5': ['Tfl-Api-Presentation-Entities-PlaceArray-5'],
               'Tfl-Api-Presentation-Entities-PlaceArray-6': ['Tfl-Api-Presentation-Entities-PlaceArray-6'],
               'Tfl-Api-Presentation-Entities-PlaceArray-7': ['Tfl-Api-Presentation-Entities-PlaceArray-7'],
               'Tfl.Api.Presentation.Entities.AdditionalProperties': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
               'Tfl.Api.Presentation.Entities.Place': ['Tfl.Api.Presentation.Entities.Place']},
 'Disruptions-Lifts-v2': {'LiftDisruption': []},
 'Journey': {'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
             'Tfl-10': ['Tfl.Api.Presentation.Entities.Identifier'],
             'Tfl-11': ['Tfl.Api.Common.JourneyPlanner.JpElevation'],
             'Tfl-12': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Path'],
             'Tfl-13': ['Tfl.Api.Presentation.Entities.JourneyPlanner.RouteOption'],
             'Tfl-14': ['Tfl.Api.Presentation.Entities.LineGroup'],
             'Tfl-15': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
             'Tfl-16': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
             'Tfl-17': ['Tfl.Api.Presentation.Entities.Place'],
             'Tfl-18': ['Tfl.Api.Presentation.Entities.StopPoint'],
             'Tfl-19': ['Tfl.Api.Presentation.Entities.RouteSectionNaptanEntrySequence'],
             'Tfl-2': ['Tfl.Api.Presentation.Entities.PathAttribute'],
             'Tfl-20': ['Tfl.Api.Presentation.Entities.RouteSection'],
             'Tfl-21': ['Tfl.Api.Presentation.Entities.Disruption'],
             'Tfl-22': ['Tfl.Api.Presentation.Entities.JourneyPlanner.PlannedWork'],
             'Tfl-23': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Leg'],
             'Tfl-24': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTapDetails'],
             'Tfl-25': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareTap'],
             'Tfl-26': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Fare'],
             'Tfl-27': ['Tfl.Api.Presentation.Entities.JourneyPlanner.FareCaveat'],
             'Tfl-28': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyFare'],
             'Tfl-29': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Journey'],
             'Tfl-3': ['Tfl.Api.Presentation.Entities.InstructionStep'],
             'Tfl-30': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
             'Tfl-31': ['Tfl.Api.Presentation.Entities.LineStatus'],
             'Tfl-32': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
             'Tfl-33': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
             'Tfl-34': ['Tfl.Api.Presentation.Entities.Line'],
             'Tfl-35': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyPlannerCycleHireDockingStationData'],
             'Tfl-36': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustment'],
             'Tfl-37': ['Tfl.Api.Presentation.Entities.JourneyPlanner.TimeAdjustments'],
             'Tfl-38': ['Tfl.Api.Presentation.Entities.JourneyPlanner.SearchCriteria'],
             'Tfl-39': ['Tfl.Api.Presentation.Entities.JourneyPlanner.JourneyVector'],
             'Tfl-4': ['Tfl.Api.Presentation.Entities.Instruction'],
             'Tfl-40': ['Tfl.Api.Presentation.Entities.JourneyPlanner.ItineraryResult'],
             'Tfl-5': ['Tfl.Api.Presentation.Entities.JourneyPlanner.Obstacle'],
             'Tfl-6': ['Tfl.Api.Presentation.Entities.Point'],
             'Tfl-7': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
             'Tfl-8': ['Tfl.Api.Presentation.Entities.TrainLoading'],
             'Tfl-9': ['Tfl.Api.Presentation.Entities.Crowding']},
 'Line': {'Tfl': ['Tfl.Api.Presentation.Entities.Mode'],
          'Tfl-10': ['Tfl.Api.Presentation.Entities.Place'],
          'Tfl-11': ['Tfl.Api.Presentation.Entities.StopPoint'],
          'Tfl-12': ['Tfl.Api.Presentation.Entities.RouteSectionNaptanEntrySequence'],
          'Tfl-13': ['Tfl.Api.Presentation.Entities.RouteSection'],
          'Tfl-14': ['Tfl.Api.Presentation.Entities.Disruption'],
          'Tfl-15': ['Tfl.Api.Presentation.Entities.ValidityPeriod'],
          'Tfl-16': ['Tfl.Api.Presentation.Entities.LineStatus'],
          'Tfl-17': ['Tfl.Api.Presentation.Entities.MatchedRoute'],
          'Tfl-18': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
          'Tfl-19': ['Tfl.Api.Presentation.Entities.Line'],
          'Tfl-2': ['Tfl.Api.Presentation.Entities.StatusSeverity'],
          'Tfl-20': ['Tfl.Api.Presentation.Entities.MatchedStop'],
          'Tfl-21': ['Tfl.Api.Presentation.Entities.StopPointSequence'],
          'Tfl-22': ['Tfl.Api.Presentation.Entities.OrderedRoute'],
          'Tfl-23': ['Tfl.Api.Presentation.Entities.RouteSequence'],
          'Tfl-24': ['Tfl.Api.Presentation.Entities.LineRouteSection'],
          'Tfl-25': ['Tfl.Api.Presentation.Entities.MatchedRouteSections'],
          'Tfl-26': ['Tfl.Api.Presentation.Entities.RouteSearchMatch'],
          'Tfl-27': ['Tfl.Api.Presentation.Entities.RouteSearchResponse'],
          'Tfl-28': ['Tfl.Api.Presentation.Entities.Interval'],
          'Tfl-29': ['Tfl.Api.Presentation.Entities.StationInterval'],
          'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
          'Tfl-30': ['Tfl.Api.Presentation.Entities.KnownJourney'],
          'Tfl-31': ['Tfl.Api.Presentation.Entities.TwentyFourHourClockTime'],
          'Tfl-32': ['Tfl.Api.Presentation.Entities.ServiceFrequency'],
          'Tfl-33': ['Tfl.Api.Presentation.Entities.Period'],
          'Tfl-34': ['Tfl.Api.Presentation.Entities.Schedule'],
          'Tfl-35': ['Tfl.Api.Presentation.Entities.TimetableRoute'],
          'Tfl-36': ['Tfl.Api.Presentation.Entities.Timetable'],
          'Tfl-37': ['Tfl.Api.Presentation.Entities.Timetables.DisambiguationOption'],
          'Tfl-38': ['Tfl.Api.Presentation.Entities.Timetables.Disambiguation'],
          'Tfl-39': ['Tfl.Api.Presentation.Entities.TimetableResponse'],
          'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
          'Tfl-40': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
          'Tfl-41': ['Tfl.Api.Presentation.Entities.Prediction'],
          'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
          'Tfl-6': ['Tfl.Api.Presentation.Entities.Identifier'],
          'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
          'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
          'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']},
 'Mode': {'Tfl-Api-Presentation-Entities-ActiveServiceTypeArray': ['Tfl-Api-Presentation-Entities-ActiveServiceTypeArray'],
          'Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-1': ['Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-1'],
          'Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-2': ['Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-2'],
          'Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-3': ['Tfl-Api-Presentation-Entities-ActiveServiceTypeArray-3'],
          'Tfl-Api-Presentation-Entities-PredictionArray-4': ['Tfl-Api-Presentation-Entities-PredictionArray-4'],
          'Tfl-Api-Presentation-Entities-PredictionArray-5': ['Tfl-Api-Presentation-Entities-PredictionArray-5'],
          'Tfl-Api-Presentation-Entities-PredictionArray-6': ['Tfl-Api-Presentation-Entities-PredictionArray-6'],
          'Tfl-Api-Presentation-Entities-PredictionArray-7': ['Tfl-Api-Presentation-Entities-PredictionArray-7'],
          'Tfl.Api.Presentation.Entities.ActiveServiceType': ['Tfl.Api.Presentation.Entities.ActiveServiceType'],
          'Tfl.Api.Presentation.Entities.Prediction': ['Tfl.Api.Presentation.Entities.Prediction'],
          'Tfl.Api.Presentation.Entities.PredictionTiming': ['Tfl.Api.Presentation.Entities.PredictionTiming']},
 'Place': {'System': ['System.Object'],
           'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
                   'Tfl.Api.Presentation.Entities.StopPointCategory'],
           'Tfl-10': ['Tfl.Api.Presentation.Entities.StopPoint'],
           'Tfl-2': ['Tfl.Api.Presentation.Entities.AdditionalProperties'],
           'Tfl-3': ['Tfl.Api.Presentation.Entities.Place'],
           'Tfl-4': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
           'Tfl-5': ['Tfl.Api.Presentation.Entities.TrainLoading'],
           'Tfl-6': ['Tfl.Api.Presentation.Entities.Crowding'],
           'Tfl-7': ['Tfl.Api.Presentation.Entities.Identifier'],
           'Tfl-8': ['Tfl.Api.Presentation.Entities.LineGroup'],
           'Tfl-9': ['Tfl.Api.Presentation.Entities.LineModeGroup']},
 'Road': {'System': ['System.Data.Spatial.DbGeographyWellKnownValue'],
          'System-2': ['System.Data.Spatial.DbGeography'],
          'System-3': ['System.Object'],
          'Tfl': ['Tfl.Api.Presentation.Entities.RoadCorridor'],
          'Tfl-2': ['Tfl.Api.Presentation.Entities.StreetSegment'],
          'Tfl-3': ['Tfl.Api.Presentation.Entities.Street'],
          'Tfl-4': ['Tfl.Api.Presentation.Entities.RoadProject'],
          'Tfl-5': ['Tfl.Api.Presentation.Entities.RoadDisruptionLine'],
          'Tfl-6': ['Tfl.Api.Presentation.Entities.RoadDisruptionImpactArea'],
          'Tfl-7': ['Tfl.Api.Presentation.Entities.RoadDisruptionSchedule'],
          'Tfl-8': ['Tfl.Api.Presentation.Entities.RoadDisruption'],
          'Tfl-9': ['Tfl.Api.Presentation.Entities.StatusSeverity']},
 'Search': {'Tfl': ['Tfl.Api.Presentation.Entities.SearchMatch'],
            'Tfl-2': ['Tfl.Api.Presentation.Entities.SearchResponse']},
 'StopPoint': {'System': ['System.Object'],
               'Tfl': ['Tfl.Api.Presentation.Entities.PlaceCategory',
                       'Tfl.Api.Presentation.Entities.StopPointCategory'],
               'Tfl-10': ['Tfl.Api.Presentation.Entities.Place'],
               'Tfl-11': ['Tfl.Api.Presentation.Entities.StopPoint'],
               'Tfl-12': ['Tfl.Api.Presentation.Entities.LineServiceTypeInfo'],
               'Tfl-13': ['Tfl.Api.Presentation.Entities.LineSpecificServiceType'],
               'Tfl-14': ['Tfl.Api.Presentation.Entities.LineServiceType'],
               'Tfl-15': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
               'Tfl-16': ['Tfl.Api.Presentation.Entities.Prediction'],
               'Tfl-17': ['Tfl.Api.Presentation.Entities.ArrivalDeparture'],
               'Tfl-18': ['Tfl.Api.Presentation.Entities.StopPointRouteSection'],
               'Tfl-19': ['Tfl.Api.Presentation.Entities.DisruptedPoint'],
               'Tfl-2': ['Tfl.Api.Presentation.Entities.Mode'],
               'Tfl-20': ['Tfl.Api.Presentation.Entities.StopPointsResponse'],
               'Tfl-21': ['Tfl.Api.Presentation.Entities.SearchMatch'],
               'Tfl-22': ['Tfl.Api.Presentation.Entities.SearchResponse'],
               'Tfl-3': ['Tfl.Api.Presentation.Entities.PassengerFlow'],
               'Tfl-4': ['Tfl.Api.Presentation.Entities.TrainLoading'],
               'Tfl-5': ['Tfl.Api.Presentation.Entities.Crowding'],
               'Tfl-6': ['Tfl.Api.Presentation.Entities.Identifier'],
               'Tfl-7': ['Tfl.Api.Presentation.Entities.LineGroup'],
               'Tfl-8': ['Tfl.Api.Presentation.Entities.LineModeGroup'],
               'Tfl-9': ['Tfl.Api.Presentation.Entities.AdditionalProperties']},
 'Vehicle': {'Tfl': ['Tfl.Api.Presentation.Entities.PredictionTiming'],
             'Tfl-2': ['Tfl.Api.Presentation.Entities.Prediction'],
             'Tfl-3': ['Tfl.Api.Presentation.Entities.VehicleMatch']},
 'crowding': {},
 'occupancy': {'Tfl': ['Tfl.Api.Presentation.Entities.Bay'],
               'Tfl-2': ['Tfl.Api.Presentation.Entities.CarParkOccupancy'],
               'Tfl-3': ['Tfl.Api.Presentation.Entities.ChargeConnectorOccupancy'],
               'Tfl-4': ['Tfl.Api.Presentation.Entities.BikePointOccupancy']}}
lmmx commented 2 years ago

Backlinked to original issue: https://techforum.tfl.gov.uk/t/swagger-file-outdated/2085/8

Edit: uploaded namespace.json rather than recalculating https://github.com/lmmx/tubeulator/blob/master/src/tubeulator/data/openapi/namespace.json