├── .gitignore ├── keys ├── requirements.txt ├── sql ├── stoptimes.sql └── schema.sql ├── src ├── model.py ├── nyct-subway.proto ├── nyct_subway_pb2.py ├── gtfsrtdb.py ├── gtfs-realtime.proto └── gtfs_realtime_pb2.py └── Makefile /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | __pycache__ 3 | output 4 | 2018 -------------------------------------------------------------------------------- /keys: -------------------------------------------------------------------------------- 1 | export MBTA_KEY=TwqpQWDalUeVG1ULkRvD7A 2 | export MTA_KEY=dacce061-b9e7-433e-9fd8-35ea535d0773 3 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | psycopg2-binary>=2.7,<3 2 | protobuf>=3.3.0,<4 3 | pytz>=2015.6 4 | requests>=2.11,<3 5 | gsutil>=4.27 6 | -------------------------------------------------------------------------------- /sql/stoptimes.sql: -------------------------------------------------------------------------------- 1 | -- Assumes rt and gtfs schemas. 2 | 3 | WITH d (year, month) AS ( 4 | VALUES (2018, 5) 5 | ) 6 | CREATE materialized view rt.stop_time_update_collection AS 7 | SELECT 8 | trip_id, 9 | stop_id, 10 | (array_agg(arrival_time order by m.timestamp desc))[1] as arrival_time, 11 | max(m.timestamp) prediction_time 12 | FROM rt.trip_updates t 13 | left join rt.stop_time_updates st ON (st.trip_update_id = t.oid) 14 | left join rt.messages m on mid=m.oid, 15 | d 16 | WHERE extract('year' from trip_start_date) = d.year 17 | AND extract('month' from trip_start_date) = d.month 18 | GROUP BY trip_id, stop_id; 19 | 20 | -- MTA encodes the route-id in the trip-id, extract it is a shortcut to joining against gtfs.trips table 21 | SELECT 22 | regexp_replace(trip_id, '^\d+_([A-Z0-9]+)(.+)$', '\1') route_id, 23 | stop_id, 24 | stop_name, 25 | arrival_time AT TIME ZONE 'US/Eastern', 26 | prediction_time AT TIME ZONE 'US/Eastern' 27 | FROM rt.stop_time_update_collection a 28 | left JOIN gtfs.stops using (stop_id) 29 | WHERE arrival_time::date > '2018-05-01'::date; 30 | -------------------------------------------------------------------------------- /src/model.py: -------------------------------------------------------------------------------- 1 | # gtfsrdb.py: load gtfs-realtime data to a database 2 | # recommended to have the (static) GTFS data for the agency you are connecting 3 | # to already loaded. 4 | 5 | # Copyright 2017 Transit Center 6 | 7 | # Licensed under the Apache License, Version 2.0 (the "License") 8 | # you may not use this file except in compliance with the License. 9 | # You may obtain a copy of the License at 10 | 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | # Authors: 18 | # Neil Freeman 19 | 20 | from enum import Enum 21 | 22 | 23 | class OccupancyStatus(Enum): 24 | EMPTY = 0 25 | MANY_SEATS_AVAILABLE = 1 26 | FEW_SEATS_AVAILABLE = 2 27 | STANDING_ROOM_ONLY = 3 28 | CRUSHED_STANDING_ROOM_ONLY = 4 29 | FULL = 5 30 | NOT_ACCEPTING_PASSENGERS = 6 31 | 32 | 33 | class CongestionLevel(Enum): 34 | UNKNOWN_CONGESTION_LEVEL = 0 35 | RUNNING_SMOOTHLY = 1 36 | STOP_AND_GO = 2 37 | CONGESTION = 3 38 | 39 | 40 | class StopTimeSchedule(Enum): 41 | SCHEDULED = 0 42 | SKIPPED = 1 43 | NO_DATA = 2 44 | 45 | 46 | class TripSchedule(Enum): 47 | SCHEDULED = 0 48 | ADDED = 1 49 | UNSCHEDULED = 2 50 | CANCELED = 3 51 | 52 | 53 | class AlertCause(Enum): 54 | UNKNOWN_CAUSE = 1 55 | TECHNICAL_PROBLEM = 3 56 | ACCIDENT = 6 57 | HOLIDAY = 7 58 | WEATHER = 8 59 | MAINTENANCE = 9 60 | CONSTRUCTION = 10 61 | POLICE_ACTIVITY = 11 62 | MEDICAL_EMERGENCY = 12 63 | 64 | 65 | class AlertEffect(Enum): 66 | NO_SERVICE = 1 67 | REDUCED_SERVICE = 2 68 | SIGNIFICANT_DELAYS = 3 69 | DETOUR = 4 70 | ADDITIONAL_SERVICE = 5 71 | MODIFIED_SERVICE = 6 72 | OTHER_EFFECT = 7 73 | UNKNOWN_EFFECT = 8 74 | STOP_MOVED = 9 75 | 76 | 77 | class StopStatus(Enum): 78 | INCOMING_AT = 0 79 | STOPPED_AT = 1 80 | IN_TRANSIT_TO = 2 81 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | shell = bash 2 | 3 | PYTHON = python 4 | 5 | PGUSER ?= $(USER) 6 | PGDATABASE ?= $(PGUSER) 7 | PSQLFLAGS = $(PGDATABASE) 8 | PSQL = psql $(PSQLFLAGS) 9 | 10 | export PGDATABASE PGUSER 11 | 12 | hours = 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 13 | DATE = 2001-01-01 14 | year = $(shell echo $(DATE) | sed 's/\(.\{4\}\)-.*/\1/') 15 | month = $(shell echo $(DATE) | sed 's/.\{4\}-\(.\{2\}\)-.*/\1/') 16 | day = $(shell echo $(DATE) | sed 's/.\{4\}-.\{2\}-\(.\{2\}\)/\1/') 17 | 18 | PB2 = src/gtfs_realtime_pb2.py src/nyct_subway_pb2 19 | 20 | ARCHIVE_URL = https://2m9ldwhcmh.execute-api.us-east-2.amazonaws.com/gtfs_rt/historic.mta 21 | 22 | # https://groups.google.com/forum/#!searchin/mtadeveloperresources/archive%7Csort:date/mtadeveloperresources/aQqS_f9oYSY/Ps_yIX5FCQAJ 23 | # https://2m9ldwhcmh.execute-api.us-east-2.amazonaws.com/gtfs_rt/historic.mta/{feed}/{year}/{month}/{day}/{archive} 24 | # where {archive} = {feed}-{year}-{month}-{day}-{hour}.tar.bz2 25 | # and feed = feed{n}, where n is one of 1, 26, 16, 21, 2, 11, 31, 36, 51 26 | 27 | FEED = 26 28 | 29 | .PHONY: all psql psql-% init install clean-date 30 | 31 | all: 32 | 33 | hour-tars = $(foreach h,$(hours),data/$(year)/$(month)/$(day)/feed$(FEED)-$(DATE)-$(h).tar.bz2) 34 | 35 | load: $(foreach h,$(hours),load-$h) 36 | 37 | $(foreach h,$(hours),load-$h): load-%: data/$(year)/$(month)/$(day)/feed$(FEED)-$(DATE)-%.tar.bz2 38 | @mkdir -p $(/dev/null 40 | parallel $(PYTHON) src/gtfsrtdb.py ::: $(\n\x06\x65\x66\x66\x65\x63t\x18\x07 \x01(\x0e\x32\x1e.transit_realtime.Alert.Effect:\x0eUNKNOWN_EFFECT\x12/\n\x03url\x18\x08 \x01(\x0b\x32\".transit_realtime.TranslatedString\x12\x37\n\x0bheader_text\x18\n \x01(\x0b\x32\".transit_realtime.TranslatedString\x12<\n\x10\x64\x65scription_text\x18\x0b \x01(\x0b\x32\".transit_realtime.TranslatedString\"\xd8\x01\n\x05\x43\x61use\x12\x11\n\rUNKNOWN_CAUSE\x10\x01\x12\x0f\n\x0bOTHER_CAUSE\x10\x02\x12\x15\n\x11TECHNICAL_PROBLEM\x10\x03\x12\n\n\x06STRIKE\x10\x04\x12\x11\n\rDEMONSTRATION\x10\x05\x12\x0c\n\x08\x41\x43\x43IDENT\x10\x06\x12\x0b\n\x07HOLIDAY\x10\x07\x12\x0b\n\x07WEATHER\x10\x08\x12\x0f\n\x0bMAINTENANCE\x10\t\x12\x10\n\x0c\x43ONSTRUCTION\x10\n\x12\x13\n\x0fPOLICE_ACTIVITY\x10\x0b\x12\x15\n\x11MEDICAL_EMERGENCY\x10\x0c\"\xb5\x01\n\x06\x45\x66\x66\x65\x63t\x12\x0e\n\nNO_SERVICE\x10\x01\x12\x13\n\x0fREDUCED_SERVICE\x10\x02\x12\x16\n\x12SIGNIFICANT_DELAYS\x10\x03\x12\n\n\x06\x44\x45TOUR\x10\x04\x12\x16\n\x12\x41\x44\x44ITIONAL_SERVICE\x10\x05\x12\x14\n\x10MODIFIED_SERVICE\x10\x06\x12\x10\n\x0cOTHER_EFFECT\x10\x07\x12\x12\n\x0eUNKNOWN_EFFECT\x10\x08\x12\x0e\n\nSTOP_MOVED\x10\t*\x06\x08\xe8\x07\x10\xd0\x0f\"/\n\tTimeRange\x12\r\n\x05start\x18\x01 \x01(\x04\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x04*\x06\x08\xe8\x07\x10\xd0\x0f\"i\n\x08Position\x12\x10\n\x08latitude\x18\x01 \x02(\x02\x12\x11\n\tlongitude\x18\x02 \x02(\x02\x12\x0f\n\x07\x62\x65\x61ring\x18\x03 \x01(\x02\x12\x10\n\x08odometer\x18\x04 \x01(\x01\x12\r\n\x05speed\x18\x05 \x01(\x02*\x06\x08\xe8\x07\x10\xd0\x0f\"\xa0\x02\n\x0eTripDescriptor\x12\x0f\n\x07trip_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x05 \x01(\t\x12\x14\n\x0c\x64irection_id\x18\x06 \x01(\r\x12\x12\n\nstart_time\x18\x02 \x01(\t\x12\x12\n\nstart_date\x18\x03 \x01(\t\x12T\n\x15schedule_relationship\x18\x04 \x01(\x0e\x32\x35.transit_realtime.TripDescriptor.ScheduleRelationship\"O\n\x14ScheduleRelationship\x12\r\n\tSCHEDULED\x10\x00\x12\t\n\x05\x41\x44\x44\x45\x44\x10\x01\x12\x0f\n\x0bUNSCHEDULED\x10\x02\x12\x0c\n\x08\x43\x41NCELED\x10\x03*\x06\x08\xe8\x07\x10\xd0\x0f\"M\n\x11VehicleDescriptor\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05label\x18\x02 \x01(\t\x12\x15\n\rlicense_plate\x18\x03 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f\"\x92\x01\n\x0e\x45ntitySelector\x12\x11\n\tagency_id\x18\x01 \x01(\t\x12\x10\n\x08route_id\x18\x02 \x01(\t\x12\x12\n\nroute_type\x18\x03 \x01(\x05\x12.\n\x04trip\x18\x04 \x01(\x0b\x32 .transit_realtime.TripDescriptor\x12\x0f\n\x07stop_id\x18\x05 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f\"\x96\x01\n\x10TranslatedString\x12\x43\n\x0btranslation\x18\x01 \x03(\x0b\x32..transit_realtime.TranslatedString.Translation\x1a\x35\n\x0bTranslation\x12\x0c\n\x04text\x18\x01 \x02(\t\x12\x10\n\x08language\x18\x02 \x01(\t*\x06\x08\xe8\x07\x10\xd0\x0f*\x06\x08\xe8\x07\x10\xd0\x0f\x42\x1d\n\x1b\x63om.google.transit.realtime') 23 | ) 24 | 25 | 26 | 27 | _FEEDHEADER_INCREMENTALITY = _descriptor.EnumDescriptor( 28 | name='Incrementality', 29 | full_name='transit_realtime.FeedHeader.Incrementality', 30 | filename=None, 31 | file=DESCRIPTOR, 32 | values=[ 33 | _descriptor.EnumValueDescriptor( 34 | name='FULL_DATASET', index=0, number=0, 35 | options=None, 36 | type=None), 37 | _descriptor.EnumValueDescriptor( 38 | name='DIFFERENTIAL', index=1, number=1, 39 | options=None, 40 | type=None), 41 | ], 42 | containing_type=None, 43 | options=None, 44 | serialized_start=304, 45 | serialized_end=356, 46 | ) 47 | _sym_db.RegisterEnumDescriptor(_FEEDHEADER_INCREMENTALITY) 48 | 49 | _TRIPUPDATE_STOPTIMEUPDATE_SCHEDULERELATIONSHIP = _descriptor.EnumDescriptor( 50 | name='ScheduleRelationship', 51 | full_name='transit_realtime.TripUpdate.StopTimeUpdate.ScheduleRelationship', 52 | filename=None, 53 | file=DESCRIPTOR, 54 | values=[ 55 | _descriptor.EnumValueDescriptor( 56 | name='SCHEDULED', index=0, number=0, 57 | options=None, 58 | type=None), 59 | _descriptor.EnumValueDescriptor( 60 | name='SKIPPED', index=1, number=1, 61 | options=None, 62 | type=None), 63 | _descriptor.EnumValueDescriptor( 64 | name='NO_DATA', index=2, number=2, 65 | options=None, 66 | type=None), 67 | ], 68 | containing_type=None, 69 | options=None, 70 | serialized_start=1159, 71 | serialized_end=1222, 72 | ) 73 | _sym_db.RegisterEnumDescriptor(_TRIPUPDATE_STOPTIMEUPDATE_SCHEDULERELATIONSHIP) 74 | 75 | _VEHICLEPOSITION_VEHICLESTOPSTATUS = _descriptor.EnumDescriptor( 76 | name='VehicleStopStatus', 77 | full_name='transit_realtime.VehiclePosition.VehicleStopStatus', 78 | filename=None, 79 | file=DESCRIPTOR, 80 | values=[ 81 | _descriptor.EnumValueDescriptor( 82 | name='INCOMING_AT', index=0, number=0, 83 | options=None, 84 | type=None), 85 | _descriptor.EnumValueDescriptor( 86 | name='STOPPED_AT', index=1, number=1, 87 | options=None, 88 | type=None), 89 | _descriptor.EnumValueDescriptor( 90 | name='IN_TRANSIT_TO', index=2, number=2, 91 | options=None, 92 | type=None), 93 | ], 94 | containing_type=None, 95 | options=None, 96 | serialized_start=1721, 97 | serialized_end=1792, 98 | ) 99 | _sym_db.RegisterEnumDescriptor(_VEHICLEPOSITION_VEHICLESTOPSTATUS) 100 | 101 | _VEHICLEPOSITION_CONGESTIONLEVEL = _descriptor.EnumDescriptor( 102 | name='CongestionLevel', 103 | full_name='transit_realtime.VehiclePosition.CongestionLevel', 104 | filename=None, 105 | file=DESCRIPTOR, 106 | values=[ 107 | _descriptor.EnumValueDescriptor( 108 | name='UNKNOWN_CONGESTION_LEVEL', index=0, number=0, 109 | options=None, 110 | type=None), 111 | _descriptor.EnumValueDescriptor( 112 | name='RUNNING_SMOOTHLY', index=1, number=1, 113 | options=None, 114 | type=None), 115 | _descriptor.EnumValueDescriptor( 116 | name='STOP_AND_GO', index=2, number=2, 117 | options=None, 118 | type=None), 119 | _descriptor.EnumValueDescriptor( 120 | name='CONGESTION', index=3, number=3, 121 | options=None, 122 | type=None), 123 | _descriptor.EnumValueDescriptor( 124 | name='SEVERE_CONGESTION', index=4, number=4, 125 | options=None, 126 | type=None), 127 | ], 128 | containing_type=None, 129 | options=None, 130 | serialized_start=1794, 131 | serialized_end=1919, 132 | ) 133 | _sym_db.RegisterEnumDescriptor(_VEHICLEPOSITION_CONGESTIONLEVEL) 134 | 135 | _VEHICLEPOSITION_OCCUPANCYSTATUS = _descriptor.EnumDescriptor( 136 | name='OccupancyStatus', 137 | full_name='transit_realtime.VehiclePosition.OccupancyStatus', 138 | filename=None, 139 | file=DESCRIPTOR, 140 | values=[ 141 | _descriptor.EnumValueDescriptor( 142 | name='EMPTY', index=0, number=0, 143 | options=None, 144 | type=None), 145 | _descriptor.EnumValueDescriptor( 146 | name='MANY_SEATS_AVAILABLE', index=1, number=1, 147 | options=None, 148 | type=None), 149 | _descriptor.EnumValueDescriptor( 150 | name='FEW_SEATS_AVAILABLE', index=2, number=2, 151 | options=None, 152 | type=None), 153 | _descriptor.EnumValueDescriptor( 154 | name='STANDING_ROOM_ONLY', index=3, number=3, 155 | options=None, 156 | type=None), 157 | _descriptor.EnumValueDescriptor( 158 | name='CRUSHED_STANDING_ROOM_ONLY', index=4, number=4, 159 | options=None, 160 | type=None), 161 | _descriptor.EnumValueDescriptor( 162 | name='FULL', index=5, number=5, 163 | options=None, 164 | type=None), 165 | _descriptor.EnumValueDescriptor( 166 | name='NOT_ACCEPTING_PASSENGERS', index=6, number=6, 167 | options=None, 168 | type=None), 169 | ], 170 | containing_type=None, 171 | options=None, 172 | serialized_start=1922, 173 | serialized_end=2097, 174 | ) 175 | _sym_db.RegisterEnumDescriptor(_VEHICLEPOSITION_OCCUPANCYSTATUS) 176 | 177 | _ALERT_CAUSE = _descriptor.EnumDescriptor( 178 | name='Cause', 179 | full_name='transit_realtime.Alert.Cause', 180 | filename=None, 181 | file=DESCRIPTOR, 182 | values=[ 183 | _descriptor.EnumValueDescriptor( 184 | name='UNKNOWN_CAUSE', index=0, number=1, 185 | options=None, 186 | type=None), 187 | _descriptor.EnumValueDescriptor( 188 | name='OTHER_CAUSE', index=1, number=2, 189 | options=None, 190 | type=None), 191 | _descriptor.EnumValueDescriptor( 192 | name='TECHNICAL_PROBLEM', index=2, number=3, 193 | options=None, 194 | type=None), 195 | _descriptor.EnumValueDescriptor( 196 | name='STRIKE', index=3, number=4, 197 | options=None, 198 | type=None), 199 | _descriptor.EnumValueDescriptor( 200 | name='DEMONSTRATION', index=4, number=5, 201 | options=None, 202 | type=None), 203 | _descriptor.EnumValueDescriptor( 204 | name='ACCIDENT', index=5, number=6, 205 | options=None, 206 | type=None), 207 | _descriptor.EnumValueDescriptor( 208 | name='HOLIDAY', index=6, number=7, 209 | options=None, 210 | type=None), 211 | _descriptor.EnumValueDescriptor( 212 | name='WEATHER', index=7, number=8, 213 | options=None, 214 | type=None), 215 | _descriptor.EnumValueDescriptor( 216 | name='MAINTENANCE', index=8, number=9, 217 | options=None, 218 | type=None), 219 | _descriptor.EnumValueDescriptor( 220 | name='CONSTRUCTION', index=9, number=10, 221 | options=None, 222 | type=None), 223 | _descriptor.EnumValueDescriptor( 224 | name='POLICE_ACTIVITY', index=10, number=11, 225 | options=None, 226 | type=None), 227 | _descriptor.EnumValueDescriptor( 228 | name='MEDICAL_EMERGENCY', index=11, number=12, 229 | options=None, 230 | type=None), 231 | ], 232 | containing_type=None, 233 | options=None, 234 | serialized_start=2522, 235 | serialized_end=2738, 236 | ) 237 | _sym_db.RegisterEnumDescriptor(_ALERT_CAUSE) 238 | 239 | _ALERT_EFFECT = _descriptor.EnumDescriptor( 240 | name='Effect', 241 | full_name='transit_realtime.Alert.Effect', 242 | filename=None, 243 | file=DESCRIPTOR, 244 | values=[ 245 | _descriptor.EnumValueDescriptor( 246 | name='NO_SERVICE', index=0, number=1, 247 | options=None, 248 | type=None), 249 | _descriptor.EnumValueDescriptor( 250 | name='REDUCED_SERVICE', index=1, number=2, 251 | options=None, 252 | type=None), 253 | _descriptor.EnumValueDescriptor( 254 | name='SIGNIFICANT_DELAYS', index=2, number=3, 255 | options=None, 256 | type=None), 257 | _descriptor.EnumValueDescriptor( 258 | name='DETOUR', index=3, number=4, 259 | options=None, 260 | type=None), 261 | _descriptor.EnumValueDescriptor( 262 | name='ADDITIONAL_SERVICE', index=4, number=5, 263 | options=None, 264 | type=None), 265 | _descriptor.EnumValueDescriptor( 266 | name='MODIFIED_SERVICE', index=5, number=6, 267 | options=None, 268 | type=None), 269 | _descriptor.EnumValueDescriptor( 270 | name='OTHER_EFFECT', index=6, number=7, 271 | options=None, 272 | type=None), 273 | _descriptor.EnumValueDescriptor( 274 | name='UNKNOWN_EFFECT', index=7, number=8, 275 | options=None, 276 | type=None), 277 | _descriptor.EnumValueDescriptor( 278 | name='STOP_MOVED', index=8, number=9, 279 | options=None, 280 | type=None), 281 | ], 282 | containing_type=None, 283 | options=None, 284 | serialized_start=2741, 285 | serialized_end=2922, 286 | ) 287 | _sym_db.RegisterEnumDescriptor(_ALERT_EFFECT) 288 | 289 | _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP = _descriptor.EnumDescriptor( 290 | name='ScheduleRelationship', 291 | full_name='transit_realtime.TripDescriptor.ScheduleRelationship', 292 | filename=None, 293 | file=DESCRIPTOR, 294 | values=[ 295 | _descriptor.EnumValueDescriptor( 296 | name='SCHEDULED', index=0, number=0, 297 | options=None, 298 | type=None), 299 | _descriptor.EnumValueDescriptor( 300 | name='ADDED', index=1, number=1, 301 | options=None, 302 | type=None), 303 | _descriptor.EnumValueDescriptor( 304 | name='UNSCHEDULED', index=2, number=2, 305 | options=None, 306 | type=None), 307 | _descriptor.EnumValueDescriptor( 308 | name='CANCELED', index=3, number=3, 309 | options=None, 310 | type=None), 311 | ], 312 | containing_type=None, 313 | options=None, 314 | serialized_start=3290, 315 | serialized_end=3369, 316 | ) 317 | _sym_db.RegisterEnumDescriptor(_TRIPDESCRIPTOR_SCHEDULERELATIONSHIP) 318 | 319 | 320 | _FEEDMESSAGE = _descriptor.Descriptor( 321 | name='FeedMessage', 322 | full_name='transit_realtime.FeedMessage', 323 | filename=None, 324 | file=DESCRIPTOR, 325 | containing_type=None, 326 | fields=[ 327 | _descriptor.FieldDescriptor( 328 | name='header', full_name='transit_realtime.FeedMessage.header', index=0, 329 | number=1, type=11, cpp_type=10, label=2, 330 | has_default_value=False, default_value=None, 331 | message_type=None, enum_type=None, containing_type=None, 332 | is_extension=False, extension_scope=None, 333 | options=None), 334 | _descriptor.FieldDescriptor( 335 | name='entity', full_name='transit_realtime.FeedMessage.entity', index=1, 336 | number=2, type=11, cpp_type=10, label=3, 337 | has_default_value=False, default_value=[], 338 | message_type=None, enum_type=None, containing_type=None, 339 | is_extension=False, extension_scope=None, 340 | options=None), 341 | ], 342 | extensions=[ 343 | ], 344 | nested_types=[], 345 | enum_types=[ 346 | ], 347 | options=None, 348 | is_extendable=True, 349 | syntax='proto2', 350 | extension_ranges=[(1000, 2000), ], 351 | oneofs=[ 352 | ], 353 | serialized_start=41, 354 | serialized_end=154, 355 | ) 356 | 357 | 358 | _FEEDHEADER = _descriptor.Descriptor( 359 | name='FeedHeader', 360 | full_name='transit_realtime.FeedHeader', 361 | filename=None, 362 | file=DESCRIPTOR, 363 | containing_type=None, 364 | fields=[ 365 | _descriptor.FieldDescriptor( 366 | name='gtfs_realtime_version', full_name='transit_realtime.FeedHeader.gtfs_realtime_version', index=0, 367 | number=1, type=9, cpp_type=9, label=2, 368 | has_default_value=False, default_value=_b("").decode('utf-8'), 369 | message_type=None, enum_type=None, containing_type=None, 370 | is_extension=False, extension_scope=None, 371 | options=None), 372 | _descriptor.FieldDescriptor( 373 | name='incrementality', full_name='transit_realtime.FeedHeader.incrementality', index=1, 374 | number=2, type=14, cpp_type=8, label=1, 375 | has_default_value=True, default_value=0, 376 | message_type=None, enum_type=None, containing_type=None, 377 | is_extension=False, extension_scope=None, 378 | options=None), 379 | _descriptor.FieldDescriptor( 380 | name='timestamp', full_name='transit_realtime.FeedHeader.timestamp', index=2, 381 | number=3, type=4, cpp_type=4, label=1, 382 | has_default_value=False, default_value=0, 383 | message_type=None, enum_type=None, containing_type=None, 384 | is_extension=False, extension_scope=None, 385 | options=None), 386 | ], 387 | extensions=[ 388 | ], 389 | nested_types=[], 390 | enum_types=[ 391 | _FEEDHEADER_INCREMENTALITY, 392 | ], 393 | options=None, 394 | is_extendable=True, 395 | syntax='proto2', 396 | extension_ranges=[(1000, 2000), ], 397 | oneofs=[ 398 | ], 399 | serialized_start=157, 400 | serialized_end=364, 401 | ) 402 | 403 | 404 | _FEEDENTITY = _descriptor.Descriptor( 405 | name='FeedEntity', 406 | full_name='transit_realtime.FeedEntity', 407 | filename=None, 408 | file=DESCRIPTOR, 409 | containing_type=None, 410 | fields=[ 411 | _descriptor.FieldDescriptor( 412 | name='id', full_name='transit_realtime.FeedEntity.id', index=0, 413 | number=1, type=9, cpp_type=9, label=2, 414 | has_default_value=False, default_value=_b("").decode('utf-8'), 415 | message_type=None, enum_type=None, containing_type=None, 416 | is_extension=False, extension_scope=None, 417 | options=None), 418 | _descriptor.FieldDescriptor( 419 | name='is_deleted', full_name='transit_realtime.FeedEntity.is_deleted', index=1, 420 | number=2, type=8, cpp_type=7, label=1, 421 | has_default_value=True, default_value=False, 422 | message_type=None, enum_type=None, containing_type=None, 423 | is_extension=False, extension_scope=None, 424 | options=None), 425 | _descriptor.FieldDescriptor( 426 | name='trip_update', full_name='transit_realtime.FeedEntity.trip_update', index=2, 427 | number=3, type=11, cpp_type=10, label=1, 428 | has_default_value=False, default_value=None, 429 | message_type=None, enum_type=None, containing_type=None, 430 | is_extension=False, extension_scope=None, 431 | options=None), 432 | _descriptor.FieldDescriptor( 433 | name='vehicle', full_name='transit_realtime.FeedEntity.vehicle', index=3, 434 | number=4, type=11, cpp_type=10, label=1, 435 | has_default_value=False, default_value=None, 436 | message_type=None, enum_type=None, containing_type=None, 437 | is_extension=False, extension_scope=None, 438 | options=None), 439 | _descriptor.FieldDescriptor( 440 | name='alert', full_name='transit_realtime.FeedEntity.alert', index=4, 441 | number=5, type=11, cpp_type=10, label=1, 442 | has_default_value=False, default_value=None, 443 | message_type=None, enum_type=None, containing_type=None, 444 | is_extension=False, extension_scope=None, 445 | options=None), 446 | ], 447 | extensions=[ 448 | ], 449 | nested_types=[], 450 | enum_types=[ 451 | ], 452 | options=None, 453 | is_extendable=True, 454 | syntax='proto2', 455 | extension_ranges=[(1000, 2000), ], 456 | oneofs=[ 457 | ], 458 | serialized_start=367, 459 | serialized_end=569, 460 | ) 461 | 462 | 463 | _TRIPUPDATE_STOPTIMEEVENT = _descriptor.Descriptor( 464 | name='StopTimeEvent', 465 | full_name='transit_realtime.TripUpdate.StopTimeEvent', 466 | filename=None, 467 | file=DESCRIPTOR, 468 | containing_type=None, 469 | fields=[ 470 | _descriptor.FieldDescriptor( 471 | name='delay', full_name='transit_realtime.TripUpdate.StopTimeEvent.delay', index=0, 472 | number=1, type=5, cpp_type=1, label=1, 473 | has_default_value=False, default_value=0, 474 | message_type=None, enum_type=None, containing_type=None, 475 | is_extension=False, extension_scope=None, 476 | options=None), 477 | _descriptor.FieldDescriptor( 478 | name='time', full_name='transit_realtime.TripUpdate.StopTimeEvent.time', index=1, 479 | number=2, type=3, cpp_type=2, label=1, 480 | has_default_value=False, default_value=0, 481 | message_type=None, enum_type=None, containing_type=None, 482 | is_extension=False, extension_scope=None, 483 | options=None), 484 | _descriptor.FieldDescriptor( 485 | name='uncertainty', full_name='transit_realtime.TripUpdate.StopTimeEvent.uncertainty', index=2, 486 | number=3, type=5, cpp_type=1, label=1, 487 | has_default_value=False, default_value=0, 488 | message_type=None, enum_type=None, containing_type=None, 489 | is_extension=False, extension_scope=None, 490 | options=None), 491 | ], 492 | extensions=[ 493 | ], 494 | nested_types=[], 495 | enum_types=[ 496 | ], 497 | options=None, 498 | is_extendable=True, 499 | syntax='proto2', 500 | extension_ranges=[(1000, 2000), ], 501 | oneofs=[ 502 | ], 503 | serialized_start=793, 504 | serialized_end=866, 505 | ) 506 | 507 | _TRIPUPDATE_STOPTIMEUPDATE = _descriptor.Descriptor( 508 | name='StopTimeUpdate', 509 | full_name='transit_realtime.TripUpdate.StopTimeUpdate', 510 | filename=None, 511 | file=DESCRIPTOR, 512 | containing_type=None, 513 | fields=[ 514 | _descriptor.FieldDescriptor( 515 | name='stop_sequence', full_name='transit_realtime.TripUpdate.StopTimeUpdate.stop_sequence', index=0, 516 | number=1, type=13, cpp_type=3, label=1, 517 | has_default_value=False, default_value=0, 518 | message_type=None, enum_type=None, containing_type=None, 519 | is_extension=False, extension_scope=None, 520 | options=None), 521 | _descriptor.FieldDescriptor( 522 | name='stop_id', full_name='transit_realtime.TripUpdate.StopTimeUpdate.stop_id', index=1, 523 | number=4, type=9, cpp_type=9, label=1, 524 | has_default_value=False, default_value=_b("").decode('utf-8'), 525 | message_type=None, enum_type=None, containing_type=None, 526 | is_extension=False, extension_scope=None, 527 | options=None), 528 | _descriptor.FieldDescriptor( 529 | name='arrival', full_name='transit_realtime.TripUpdate.StopTimeUpdate.arrival', index=2, 530 | number=2, type=11, cpp_type=10, label=1, 531 | has_default_value=False, default_value=None, 532 | message_type=None, enum_type=None, containing_type=None, 533 | is_extension=False, extension_scope=None, 534 | options=None), 535 | _descriptor.FieldDescriptor( 536 | name='departure', full_name='transit_realtime.TripUpdate.StopTimeUpdate.departure', index=3, 537 | number=3, type=11, cpp_type=10, label=1, 538 | has_default_value=False, default_value=None, 539 | message_type=None, enum_type=None, containing_type=None, 540 | is_extension=False, extension_scope=None, 541 | options=None), 542 | _descriptor.FieldDescriptor( 543 | name='schedule_relationship', full_name='transit_realtime.TripUpdate.StopTimeUpdate.schedule_relationship', index=4, 544 | number=5, type=14, cpp_type=8, label=1, 545 | has_default_value=True, default_value=0, 546 | message_type=None, enum_type=None, containing_type=None, 547 | is_extension=False, extension_scope=None, 548 | options=None), 549 | ], 550 | extensions=[ 551 | ], 552 | nested_types=[], 553 | enum_types=[ 554 | _TRIPUPDATE_STOPTIMEUPDATE_SCHEDULERELATIONSHIP, 555 | ], 556 | options=None, 557 | is_extendable=True, 558 | syntax='proto2', 559 | extension_ranges=[(1000, 2000), ], 560 | oneofs=[ 561 | ], 562 | serialized_start=869, 563 | serialized_end=1230, 564 | ) 565 | 566 | _TRIPUPDATE = _descriptor.Descriptor( 567 | name='TripUpdate', 568 | full_name='transit_realtime.TripUpdate', 569 | filename=None, 570 | file=DESCRIPTOR, 571 | containing_type=None, 572 | fields=[ 573 | _descriptor.FieldDescriptor( 574 | name='trip', full_name='transit_realtime.TripUpdate.trip', index=0, 575 | number=1, type=11, cpp_type=10, label=2, 576 | has_default_value=False, default_value=None, 577 | message_type=None, enum_type=None, containing_type=None, 578 | is_extension=False, extension_scope=None, 579 | options=None), 580 | _descriptor.FieldDescriptor( 581 | name='vehicle', full_name='transit_realtime.TripUpdate.vehicle', index=1, 582 | number=3, type=11, cpp_type=10, label=1, 583 | has_default_value=False, default_value=None, 584 | message_type=None, enum_type=None, containing_type=None, 585 | is_extension=False, extension_scope=None, 586 | options=None), 587 | _descriptor.FieldDescriptor( 588 | name='stop_time_update', full_name='transit_realtime.TripUpdate.stop_time_update', index=2, 589 | number=2, type=11, cpp_type=10, label=3, 590 | has_default_value=False, default_value=[], 591 | message_type=None, enum_type=None, containing_type=None, 592 | is_extension=False, extension_scope=None, 593 | options=None), 594 | _descriptor.FieldDescriptor( 595 | name='timestamp', full_name='transit_realtime.TripUpdate.timestamp', index=3, 596 | number=4, type=4, cpp_type=4, label=1, 597 | has_default_value=False, default_value=0, 598 | message_type=None, enum_type=None, containing_type=None, 599 | is_extension=False, extension_scope=None, 600 | options=None), 601 | _descriptor.FieldDescriptor( 602 | name='delay', full_name='transit_realtime.TripUpdate.delay', index=4, 603 | number=5, type=5, cpp_type=1, label=1, 604 | has_default_value=False, default_value=0, 605 | message_type=None, enum_type=None, containing_type=None, 606 | is_extension=False, extension_scope=None, 607 | options=None), 608 | ], 609 | extensions=[ 610 | ], 611 | nested_types=[_TRIPUPDATE_STOPTIMEEVENT, _TRIPUPDATE_STOPTIMEUPDATE, ], 612 | enum_types=[ 613 | ], 614 | options=None, 615 | is_extendable=True, 616 | syntax='proto2', 617 | extension_ranges=[(1000, 2000), ], 618 | oneofs=[ 619 | ], 620 | serialized_start=572, 621 | serialized_end=1238, 622 | ) 623 | 624 | 625 | _VEHICLEPOSITION = _descriptor.Descriptor( 626 | name='VehiclePosition', 627 | full_name='transit_realtime.VehiclePosition', 628 | filename=None, 629 | file=DESCRIPTOR, 630 | containing_type=None, 631 | fields=[ 632 | _descriptor.FieldDescriptor( 633 | name='trip', full_name='transit_realtime.VehiclePosition.trip', index=0, 634 | number=1, type=11, cpp_type=10, label=1, 635 | has_default_value=False, default_value=None, 636 | message_type=None, enum_type=None, containing_type=None, 637 | is_extension=False, extension_scope=None, 638 | options=None), 639 | _descriptor.FieldDescriptor( 640 | name='vehicle', full_name='transit_realtime.VehiclePosition.vehicle', index=1, 641 | number=8, type=11, cpp_type=10, label=1, 642 | has_default_value=False, default_value=None, 643 | message_type=None, enum_type=None, containing_type=None, 644 | is_extension=False, extension_scope=None, 645 | options=None), 646 | _descriptor.FieldDescriptor( 647 | name='position', full_name='transit_realtime.VehiclePosition.position', index=2, 648 | number=2, type=11, cpp_type=10, label=1, 649 | has_default_value=False, default_value=None, 650 | message_type=None, enum_type=None, containing_type=None, 651 | is_extension=False, extension_scope=None, 652 | options=None), 653 | _descriptor.FieldDescriptor( 654 | name='current_stop_sequence', full_name='transit_realtime.VehiclePosition.current_stop_sequence', index=3, 655 | number=3, type=13, cpp_type=3, label=1, 656 | has_default_value=False, default_value=0, 657 | message_type=None, enum_type=None, containing_type=None, 658 | is_extension=False, extension_scope=None, 659 | options=None), 660 | _descriptor.FieldDescriptor( 661 | name='stop_id', full_name='transit_realtime.VehiclePosition.stop_id', index=4, 662 | number=7, type=9, cpp_type=9, label=1, 663 | has_default_value=False, default_value=_b("").decode('utf-8'), 664 | message_type=None, enum_type=None, containing_type=None, 665 | is_extension=False, extension_scope=None, 666 | options=None), 667 | _descriptor.FieldDescriptor( 668 | name='current_status', full_name='transit_realtime.VehiclePosition.current_status', index=5, 669 | number=4, type=14, cpp_type=8, label=1, 670 | has_default_value=True, default_value=2, 671 | message_type=None, enum_type=None, containing_type=None, 672 | is_extension=False, extension_scope=None, 673 | options=None), 674 | _descriptor.FieldDescriptor( 675 | name='timestamp', full_name='transit_realtime.VehiclePosition.timestamp', index=6, 676 | number=5, type=4, cpp_type=4, label=1, 677 | has_default_value=False, default_value=0, 678 | message_type=None, enum_type=None, containing_type=None, 679 | is_extension=False, extension_scope=None, 680 | options=None), 681 | _descriptor.FieldDescriptor( 682 | name='congestion_level', full_name='transit_realtime.VehiclePosition.congestion_level', index=7, 683 | number=6, type=14, cpp_type=8, label=1, 684 | has_default_value=False, default_value=0, 685 | message_type=None, enum_type=None, containing_type=None, 686 | is_extension=False, extension_scope=None, 687 | options=None), 688 | _descriptor.FieldDescriptor( 689 | name='occupancy_status', full_name='transit_realtime.VehiclePosition.occupancy_status', index=8, 690 | number=9, type=14, cpp_type=8, label=1, 691 | has_default_value=False, default_value=0, 692 | message_type=None, enum_type=None, containing_type=None, 693 | is_extension=False, extension_scope=None, 694 | options=None), 695 | ], 696 | extensions=[ 697 | ], 698 | nested_types=[], 699 | enum_types=[ 700 | _VEHICLEPOSITION_VEHICLESTOPSTATUS, 701 | _VEHICLEPOSITION_CONGESTIONLEVEL, 702 | _VEHICLEPOSITION_OCCUPANCYSTATUS, 703 | ], 704 | options=None, 705 | is_extendable=True, 706 | syntax='proto2', 707 | extension_ranges=[(1000, 2000), ], 708 | oneofs=[ 709 | ], 710 | serialized_start=1241, 711 | serialized_end=2105, 712 | ) 713 | 714 | 715 | _ALERT = _descriptor.Descriptor( 716 | name='Alert', 717 | full_name='transit_realtime.Alert', 718 | filename=None, 719 | file=DESCRIPTOR, 720 | containing_type=None, 721 | fields=[ 722 | _descriptor.FieldDescriptor( 723 | name='active_period', full_name='transit_realtime.Alert.active_period', index=0, 724 | number=1, type=11, cpp_type=10, label=3, 725 | has_default_value=False, default_value=[], 726 | message_type=None, enum_type=None, containing_type=None, 727 | is_extension=False, extension_scope=None, 728 | options=None), 729 | _descriptor.FieldDescriptor( 730 | name='informed_entity', full_name='transit_realtime.Alert.informed_entity', index=1, 731 | number=5, type=11, cpp_type=10, label=3, 732 | has_default_value=False, default_value=[], 733 | message_type=None, enum_type=None, containing_type=None, 734 | is_extension=False, extension_scope=None, 735 | options=None), 736 | _descriptor.FieldDescriptor( 737 | name='cause', full_name='transit_realtime.Alert.cause', index=2, 738 | number=6, type=14, cpp_type=8, label=1, 739 | has_default_value=True, default_value=1, 740 | message_type=None, enum_type=None, containing_type=None, 741 | is_extension=False, extension_scope=None, 742 | options=None), 743 | _descriptor.FieldDescriptor( 744 | name='effect', full_name='transit_realtime.Alert.effect', index=3, 745 | number=7, type=14, cpp_type=8, label=1, 746 | has_default_value=True, default_value=8, 747 | message_type=None, enum_type=None, containing_type=None, 748 | is_extension=False, extension_scope=None, 749 | options=None), 750 | _descriptor.FieldDescriptor( 751 | name='url', full_name='transit_realtime.Alert.url', index=4, 752 | number=8, type=11, cpp_type=10, label=1, 753 | has_default_value=False, default_value=None, 754 | message_type=None, enum_type=None, containing_type=None, 755 | is_extension=False, extension_scope=None, 756 | options=None), 757 | _descriptor.FieldDescriptor( 758 | name='header_text', full_name='transit_realtime.Alert.header_text', index=5, 759 | number=10, type=11, cpp_type=10, label=1, 760 | has_default_value=False, default_value=None, 761 | message_type=None, enum_type=None, containing_type=None, 762 | is_extension=False, extension_scope=None, 763 | options=None), 764 | _descriptor.FieldDescriptor( 765 | name='description_text', full_name='transit_realtime.Alert.description_text', index=6, 766 | number=11, type=11, cpp_type=10, label=1, 767 | has_default_value=False, default_value=None, 768 | message_type=None, enum_type=None, containing_type=None, 769 | is_extension=False, extension_scope=None, 770 | options=None), 771 | ], 772 | extensions=[ 773 | ], 774 | nested_types=[], 775 | enum_types=[ 776 | _ALERT_CAUSE, 777 | _ALERT_EFFECT, 778 | ], 779 | options=None, 780 | is_extendable=True, 781 | syntax='proto2', 782 | extension_ranges=[(1000, 2000), ], 783 | oneofs=[ 784 | ], 785 | serialized_start=2108, 786 | serialized_end=2930, 787 | ) 788 | 789 | 790 | _TIMERANGE = _descriptor.Descriptor( 791 | name='TimeRange', 792 | full_name='transit_realtime.TimeRange', 793 | filename=None, 794 | file=DESCRIPTOR, 795 | containing_type=None, 796 | fields=[ 797 | _descriptor.FieldDescriptor( 798 | name='start', full_name='transit_realtime.TimeRange.start', index=0, 799 | number=1, type=4, cpp_type=4, label=1, 800 | has_default_value=False, default_value=0, 801 | message_type=None, enum_type=None, containing_type=None, 802 | is_extension=False, extension_scope=None, 803 | options=None), 804 | _descriptor.FieldDescriptor( 805 | name='end', full_name='transit_realtime.TimeRange.end', index=1, 806 | number=2, type=4, cpp_type=4, label=1, 807 | has_default_value=False, default_value=0, 808 | message_type=None, enum_type=None, containing_type=None, 809 | is_extension=False, extension_scope=None, 810 | options=None), 811 | ], 812 | extensions=[ 813 | ], 814 | nested_types=[], 815 | enum_types=[ 816 | ], 817 | options=None, 818 | is_extendable=True, 819 | syntax='proto2', 820 | extension_ranges=[(1000, 2000), ], 821 | oneofs=[ 822 | ], 823 | serialized_start=2932, 824 | serialized_end=2979, 825 | ) 826 | 827 | 828 | _POSITION = _descriptor.Descriptor( 829 | name='Position', 830 | full_name='transit_realtime.Position', 831 | filename=None, 832 | file=DESCRIPTOR, 833 | containing_type=None, 834 | fields=[ 835 | _descriptor.FieldDescriptor( 836 | name='latitude', full_name='transit_realtime.Position.latitude', index=0, 837 | number=1, type=2, cpp_type=6, label=2, 838 | has_default_value=False, default_value=float(0), 839 | message_type=None, enum_type=None, containing_type=None, 840 | is_extension=False, extension_scope=None, 841 | options=None), 842 | _descriptor.FieldDescriptor( 843 | name='longitude', full_name='transit_realtime.Position.longitude', index=1, 844 | number=2, type=2, cpp_type=6, label=2, 845 | has_default_value=False, default_value=float(0), 846 | message_type=None, enum_type=None, containing_type=None, 847 | is_extension=False, extension_scope=None, 848 | options=None), 849 | _descriptor.FieldDescriptor( 850 | name='bearing', full_name='transit_realtime.Position.bearing', index=2, 851 | number=3, type=2, cpp_type=6, label=1, 852 | has_default_value=False, default_value=float(0), 853 | message_type=None, enum_type=None, containing_type=None, 854 | is_extension=False, extension_scope=None, 855 | options=None), 856 | _descriptor.FieldDescriptor( 857 | name='odometer', full_name='transit_realtime.Position.odometer', index=3, 858 | number=4, type=1, cpp_type=5, label=1, 859 | has_default_value=False, default_value=float(0), 860 | message_type=None, enum_type=None, containing_type=None, 861 | is_extension=False, extension_scope=None, 862 | options=None), 863 | _descriptor.FieldDescriptor( 864 | name='speed', full_name='transit_realtime.Position.speed', index=4, 865 | number=5, type=2, cpp_type=6, label=1, 866 | has_default_value=False, default_value=float(0), 867 | message_type=None, enum_type=None, containing_type=None, 868 | is_extension=False, extension_scope=None, 869 | options=None), 870 | ], 871 | extensions=[ 872 | ], 873 | nested_types=[], 874 | enum_types=[ 875 | ], 876 | options=None, 877 | is_extendable=True, 878 | syntax='proto2', 879 | extension_ranges=[(1000, 2000), ], 880 | oneofs=[ 881 | ], 882 | serialized_start=2981, 883 | serialized_end=3086, 884 | ) 885 | 886 | 887 | _TRIPDESCRIPTOR = _descriptor.Descriptor( 888 | name='TripDescriptor', 889 | full_name='transit_realtime.TripDescriptor', 890 | filename=None, 891 | file=DESCRIPTOR, 892 | containing_type=None, 893 | fields=[ 894 | _descriptor.FieldDescriptor( 895 | name='trip_id', full_name='transit_realtime.TripDescriptor.trip_id', index=0, 896 | number=1, type=9, cpp_type=9, label=1, 897 | has_default_value=False, default_value=_b("").decode('utf-8'), 898 | message_type=None, enum_type=None, containing_type=None, 899 | is_extension=False, extension_scope=None, 900 | options=None), 901 | _descriptor.FieldDescriptor( 902 | name='route_id', full_name='transit_realtime.TripDescriptor.route_id', index=1, 903 | number=5, type=9, cpp_type=9, label=1, 904 | has_default_value=False, default_value=_b("").decode('utf-8'), 905 | message_type=None, enum_type=None, containing_type=None, 906 | is_extension=False, extension_scope=None, 907 | options=None), 908 | _descriptor.FieldDescriptor( 909 | name='direction_id', full_name='transit_realtime.TripDescriptor.direction_id', index=2, 910 | number=6, type=13, cpp_type=3, label=1, 911 | has_default_value=False, default_value=0, 912 | message_type=None, enum_type=None, containing_type=None, 913 | is_extension=False, extension_scope=None, 914 | options=None), 915 | _descriptor.FieldDescriptor( 916 | name='start_time', full_name='transit_realtime.TripDescriptor.start_time', index=3, 917 | number=2, type=9, cpp_type=9, label=1, 918 | has_default_value=False, default_value=_b("").decode('utf-8'), 919 | message_type=None, enum_type=None, containing_type=None, 920 | is_extension=False, extension_scope=None, 921 | options=None), 922 | _descriptor.FieldDescriptor( 923 | name='start_date', full_name='transit_realtime.TripDescriptor.start_date', index=4, 924 | number=3, type=9, cpp_type=9, label=1, 925 | has_default_value=False, default_value=_b("").decode('utf-8'), 926 | message_type=None, enum_type=None, containing_type=None, 927 | is_extension=False, extension_scope=None, 928 | options=None), 929 | _descriptor.FieldDescriptor( 930 | name='schedule_relationship', full_name='transit_realtime.TripDescriptor.schedule_relationship', index=5, 931 | number=4, type=14, cpp_type=8, label=1, 932 | has_default_value=False, default_value=0, 933 | message_type=None, enum_type=None, containing_type=None, 934 | is_extension=False, extension_scope=None, 935 | options=None), 936 | ], 937 | extensions=[ 938 | ], 939 | nested_types=[], 940 | enum_types=[ 941 | _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP, 942 | ], 943 | options=None, 944 | is_extendable=True, 945 | syntax='proto2', 946 | extension_ranges=[(1000, 2000), ], 947 | oneofs=[ 948 | ], 949 | serialized_start=3089, 950 | serialized_end=3377, 951 | ) 952 | 953 | 954 | _VEHICLEDESCRIPTOR = _descriptor.Descriptor( 955 | name='VehicleDescriptor', 956 | full_name='transit_realtime.VehicleDescriptor', 957 | filename=None, 958 | file=DESCRIPTOR, 959 | containing_type=None, 960 | fields=[ 961 | _descriptor.FieldDescriptor( 962 | name='id', full_name='transit_realtime.VehicleDescriptor.id', index=0, 963 | number=1, type=9, cpp_type=9, label=1, 964 | has_default_value=False, default_value=_b("").decode('utf-8'), 965 | message_type=None, enum_type=None, containing_type=None, 966 | is_extension=False, extension_scope=None, 967 | options=None), 968 | _descriptor.FieldDescriptor( 969 | name='label', full_name='transit_realtime.VehicleDescriptor.label', index=1, 970 | number=2, type=9, cpp_type=9, label=1, 971 | has_default_value=False, default_value=_b("").decode('utf-8'), 972 | message_type=None, enum_type=None, containing_type=None, 973 | is_extension=False, extension_scope=None, 974 | options=None), 975 | _descriptor.FieldDescriptor( 976 | name='license_plate', full_name='transit_realtime.VehicleDescriptor.license_plate', index=2, 977 | number=3, type=9, cpp_type=9, label=1, 978 | has_default_value=False, default_value=_b("").decode('utf-8'), 979 | message_type=None, enum_type=None, containing_type=None, 980 | is_extension=False, extension_scope=None, 981 | options=None), 982 | ], 983 | extensions=[ 984 | ], 985 | nested_types=[], 986 | enum_types=[ 987 | ], 988 | options=None, 989 | is_extendable=True, 990 | syntax='proto2', 991 | extension_ranges=[(1000, 2000), ], 992 | oneofs=[ 993 | ], 994 | serialized_start=3379, 995 | serialized_end=3456, 996 | ) 997 | 998 | 999 | _ENTITYSELECTOR = _descriptor.Descriptor( 1000 | name='EntitySelector', 1001 | full_name='transit_realtime.EntitySelector', 1002 | filename=None, 1003 | file=DESCRIPTOR, 1004 | containing_type=None, 1005 | fields=[ 1006 | _descriptor.FieldDescriptor( 1007 | name='agency_id', full_name='transit_realtime.EntitySelector.agency_id', index=0, 1008 | number=1, type=9, cpp_type=9, label=1, 1009 | has_default_value=False, default_value=_b("").decode('utf-8'), 1010 | message_type=None, enum_type=None, containing_type=None, 1011 | is_extension=False, extension_scope=None, 1012 | options=None), 1013 | _descriptor.FieldDescriptor( 1014 | name='route_id', full_name='transit_realtime.EntitySelector.route_id', index=1, 1015 | number=2, type=9, cpp_type=9, label=1, 1016 | has_default_value=False, default_value=_b("").decode('utf-8'), 1017 | message_type=None, enum_type=None, containing_type=None, 1018 | is_extension=False, extension_scope=None, 1019 | options=None), 1020 | _descriptor.FieldDescriptor( 1021 | name='route_type', full_name='transit_realtime.EntitySelector.route_type', index=2, 1022 | number=3, type=5, cpp_type=1, label=1, 1023 | has_default_value=False, default_value=0, 1024 | message_type=None, enum_type=None, containing_type=None, 1025 | is_extension=False, extension_scope=None, 1026 | options=None), 1027 | _descriptor.FieldDescriptor( 1028 | name='trip', full_name='transit_realtime.EntitySelector.trip', index=3, 1029 | number=4, type=11, cpp_type=10, label=1, 1030 | has_default_value=False, default_value=None, 1031 | message_type=None, enum_type=None, containing_type=None, 1032 | is_extension=False, extension_scope=None, 1033 | options=None), 1034 | _descriptor.FieldDescriptor( 1035 | name='stop_id', full_name='transit_realtime.EntitySelector.stop_id', index=4, 1036 | number=5, type=9, cpp_type=9, label=1, 1037 | has_default_value=False, default_value=_b("").decode('utf-8'), 1038 | message_type=None, enum_type=None, containing_type=None, 1039 | is_extension=False, extension_scope=None, 1040 | options=None), 1041 | ], 1042 | extensions=[ 1043 | ], 1044 | nested_types=[], 1045 | enum_types=[ 1046 | ], 1047 | options=None, 1048 | is_extendable=True, 1049 | syntax='proto2', 1050 | extension_ranges=[(1000, 2000), ], 1051 | oneofs=[ 1052 | ], 1053 | serialized_start=3459, 1054 | serialized_end=3605, 1055 | ) 1056 | 1057 | 1058 | _TRANSLATEDSTRING_TRANSLATION = _descriptor.Descriptor( 1059 | name='Translation', 1060 | full_name='transit_realtime.TranslatedString.Translation', 1061 | filename=None, 1062 | file=DESCRIPTOR, 1063 | containing_type=None, 1064 | fields=[ 1065 | _descriptor.FieldDescriptor( 1066 | name='text', full_name='transit_realtime.TranslatedString.Translation.text', index=0, 1067 | number=1, type=9, cpp_type=9, label=2, 1068 | has_default_value=False, default_value=_b("").decode('utf-8'), 1069 | message_type=None, enum_type=None, containing_type=None, 1070 | is_extension=False, extension_scope=None, 1071 | options=None), 1072 | _descriptor.FieldDescriptor( 1073 | name='language', full_name='transit_realtime.TranslatedString.Translation.language', index=1, 1074 | number=2, type=9, cpp_type=9, label=1, 1075 | has_default_value=False, default_value=_b("").decode('utf-8'), 1076 | message_type=None, enum_type=None, containing_type=None, 1077 | is_extension=False, extension_scope=None, 1078 | options=None), 1079 | ], 1080 | extensions=[ 1081 | ], 1082 | nested_types=[], 1083 | enum_types=[ 1084 | ], 1085 | options=None, 1086 | is_extendable=True, 1087 | syntax='proto2', 1088 | extension_ranges=[(1000, 2000), ], 1089 | oneofs=[ 1090 | ], 1091 | serialized_start=3697, 1092 | serialized_end=3750, 1093 | ) 1094 | 1095 | _TRANSLATEDSTRING = _descriptor.Descriptor( 1096 | name='TranslatedString', 1097 | full_name='transit_realtime.TranslatedString', 1098 | filename=None, 1099 | file=DESCRIPTOR, 1100 | containing_type=None, 1101 | fields=[ 1102 | _descriptor.FieldDescriptor( 1103 | name='translation', full_name='transit_realtime.TranslatedString.translation', index=0, 1104 | number=1, type=11, cpp_type=10, label=3, 1105 | has_default_value=False, default_value=[], 1106 | message_type=None, enum_type=None, containing_type=None, 1107 | is_extension=False, extension_scope=None, 1108 | options=None), 1109 | ], 1110 | extensions=[ 1111 | ], 1112 | nested_types=[_TRANSLATEDSTRING_TRANSLATION, ], 1113 | enum_types=[ 1114 | ], 1115 | options=None, 1116 | is_extendable=True, 1117 | syntax='proto2', 1118 | extension_ranges=[(1000, 2000), ], 1119 | oneofs=[ 1120 | ], 1121 | serialized_start=3608, 1122 | serialized_end=3758, 1123 | ) 1124 | 1125 | _FEEDMESSAGE.fields_by_name['header'].message_type = _FEEDHEADER 1126 | _FEEDMESSAGE.fields_by_name['entity'].message_type = _FEEDENTITY 1127 | _FEEDHEADER.fields_by_name['incrementality'].enum_type = _FEEDHEADER_INCREMENTALITY 1128 | _FEEDHEADER_INCREMENTALITY.containing_type = _FEEDHEADER 1129 | _FEEDENTITY.fields_by_name['trip_update'].message_type = _TRIPUPDATE 1130 | _FEEDENTITY.fields_by_name['vehicle'].message_type = _VEHICLEPOSITION 1131 | _FEEDENTITY.fields_by_name['alert'].message_type = _ALERT 1132 | _TRIPUPDATE_STOPTIMEEVENT.containing_type = _TRIPUPDATE 1133 | _TRIPUPDATE_STOPTIMEUPDATE.fields_by_name['arrival'].message_type = _TRIPUPDATE_STOPTIMEEVENT 1134 | _TRIPUPDATE_STOPTIMEUPDATE.fields_by_name['departure'].message_type = _TRIPUPDATE_STOPTIMEEVENT 1135 | _TRIPUPDATE_STOPTIMEUPDATE.fields_by_name['schedule_relationship'].enum_type = _TRIPUPDATE_STOPTIMEUPDATE_SCHEDULERELATIONSHIP 1136 | _TRIPUPDATE_STOPTIMEUPDATE.containing_type = _TRIPUPDATE 1137 | _TRIPUPDATE_STOPTIMEUPDATE_SCHEDULERELATIONSHIP.containing_type = _TRIPUPDATE_STOPTIMEUPDATE 1138 | _TRIPUPDATE.fields_by_name['trip'].message_type = _TRIPDESCRIPTOR 1139 | _TRIPUPDATE.fields_by_name['vehicle'].message_type = _VEHICLEDESCRIPTOR 1140 | _TRIPUPDATE.fields_by_name['stop_time_update'].message_type = _TRIPUPDATE_STOPTIMEUPDATE 1141 | _VEHICLEPOSITION.fields_by_name['trip'].message_type = _TRIPDESCRIPTOR 1142 | _VEHICLEPOSITION.fields_by_name['vehicle'].message_type = _VEHICLEDESCRIPTOR 1143 | _VEHICLEPOSITION.fields_by_name['position'].message_type = _POSITION 1144 | _VEHICLEPOSITION.fields_by_name['current_status'].enum_type = _VEHICLEPOSITION_VEHICLESTOPSTATUS 1145 | _VEHICLEPOSITION.fields_by_name['congestion_level'].enum_type = _VEHICLEPOSITION_CONGESTIONLEVEL 1146 | _VEHICLEPOSITION.fields_by_name['occupancy_status'].enum_type = _VEHICLEPOSITION_OCCUPANCYSTATUS 1147 | _VEHICLEPOSITION_VEHICLESTOPSTATUS.containing_type = _VEHICLEPOSITION 1148 | _VEHICLEPOSITION_CONGESTIONLEVEL.containing_type = _VEHICLEPOSITION 1149 | _VEHICLEPOSITION_OCCUPANCYSTATUS.containing_type = _VEHICLEPOSITION 1150 | _ALERT.fields_by_name['active_period'].message_type = _TIMERANGE 1151 | _ALERT.fields_by_name['informed_entity'].message_type = _ENTITYSELECTOR 1152 | _ALERT.fields_by_name['cause'].enum_type = _ALERT_CAUSE 1153 | _ALERT.fields_by_name['effect'].enum_type = _ALERT_EFFECT 1154 | _ALERT.fields_by_name['url'].message_type = _TRANSLATEDSTRING 1155 | _ALERT.fields_by_name['header_text'].message_type = _TRANSLATEDSTRING 1156 | _ALERT.fields_by_name['description_text'].message_type = _TRANSLATEDSTRING 1157 | _ALERT_CAUSE.containing_type = _ALERT 1158 | _ALERT_EFFECT.containing_type = _ALERT 1159 | _TRIPDESCRIPTOR.fields_by_name['schedule_relationship'].enum_type = _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP 1160 | _TRIPDESCRIPTOR_SCHEDULERELATIONSHIP.containing_type = _TRIPDESCRIPTOR 1161 | _ENTITYSELECTOR.fields_by_name['trip'].message_type = _TRIPDESCRIPTOR 1162 | _TRANSLATEDSTRING_TRANSLATION.containing_type = _TRANSLATEDSTRING 1163 | _TRANSLATEDSTRING.fields_by_name['translation'].message_type = _TRANSLATEDSTRING_TRANSLATION 1164 | DESCRIPTOR.message_types_by_name['FeedMessage'] = _FEEDMESSAGE 1165 | DESCRIPTOR.message_types_by_name['FeedHeader'] = _FEEDHEADER 1166 | DESCRIPTOR.message_types_by_name['FeedEntity'] = _FEEDENTITY 1167 | DESCRIPTOR.message_types_by_name['TripUpdate'] = _TRIPUPDATE 1168 | DESCRIPTOR.message_types_by_name['VehiclePosition'] = _VEHICLEPOSITION 1169 | DESCRIPTOR.message_types_by_name['Alert'] = _ALERT 1170 | DESCRIPTOR.message_types_by_name['TimeRange'] = _TIMERANGE 1171 | DESCRIPTOR.message_types_by_name['Position'] = _POSITION 1172 | DESCRIPTOR.message_types_by_name['TripDescriptor'] = _TRIPDESCRIPTOR 1173 | DESCRIPTOR.message_types_by_name['VehicleDescriptor'] = _VEHICLEDESCRIPTOR 1174 | DESCRIPTOR.message_types_by_name['EntitySelector'] = _ENTITYSELECTOR 1175 | DESCRIPTOR.message_types_by_name['TranslatedString'] = _TRANSLATEDSTRING 1176 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 1177 | 1178 | FeedMessage = _reflection.GeneratedProtocolMessageType('FeedMessage', (_message.Message,), dict( 1179 | DESCRIPTOR = _FEEDMESSAGE, 1180 | __module__ = 'gtfs_realtime_pb2' 1181 | # @@protoc_insertion_point(class_scope:transit_realtime.FeedMessage) 1182 | )) 1183 | _sym_db.RegisterMessage(FeedMessage) 1184 | 1185 | FeedHeader = _reflection.GeneratedProtocolMessageType('FeedHeader', (_message.Message,), dict( 1186 | DESCRIPTOR = _FEEDHEADER, 1187 | __module__ = 'gtfs_realtime_pb2' 1188 | # @@protoc_insertion_point(class_scope:transit_realtime.FeedHeader) 1189 | )) 1190 | _sym_db.RegisterMessage(FeedHeader) 1191 | 1192 | FeedEntity = _reflection.GeneratedProtocolMessageType('FeedEntity', (_message.Message,), dict( 1193 | DESCRIPTOR = _FEEDENTITY, 1194 | __module__ = 'gtfs_realtime_pb2' 1195 | # @@protoc_insertion_point(class_scope:transit_realtime.FeedEntity) 1196 | )) 1197 | _sym_db.RegisterMessage(FeedEntity) 1198 | 1199 | TripUpdate = _reflection.GeneratedProtocolMessageType('TripUpdate', (_message.Message,), dict( 1200 | 1201 | StopTimeEvent = _reflection.GeneratedProtocolMessageType('StopTimeEvent', (_message.Message,), dict( 1202 | DESCRIPTOR = _TRIPUPDATE_STOPTIMEEVENT, 1203 | __module__ = 'gtfs_realtime_pb2' 1204 | # @@protoc_insertion_point(class_scope:transit_realtime.TripUpdate.StopTimeEvent) 1205 | )) 1206 | , 1207 | 1208 | StopTimeUpdate = _reflection.GeneratedProtocolMessageType('StopTimeUpdate', (_message.Message,), dict( 1209 | DESCRIPTOR = _TRIPUPDATE_STOPTIMEUPDATE, 1210 | __module__ = 'gtfs_realtime_pb2' 1211 | # @@protoc_insertion_point(class_scope:transit_realtime.TripUpdate.StopTimeUpdate) 1212 | )) 1213 | , 1214 | DESCRIPTOR = _TRIPUPDATE, 1215 | __module__ = 'gtfs_realtime_pb2' 1216 | # @@protoc_insertion_point(class_scope:transit_realtime.TripUpdate) 1217 | )) 1218 | _sym_db.RegisterMessage(TripUpdate) 1219 | _sym_db.RegisterMessage(TripUpdate.StopTimeEvent) 1220 | _sym_db.RegisterMessage(TripUpdate.StopTimeUpdate) 1221 | 1222 | VehiclePosition = _reflection.GeneratedProtocolMessageType('VehiclePosition', (_message.Message,), dict( 1223 | DESCRIPTOR = _VEHICLEPOSITION, 1224 | __module__ = 'gtfs_realtime_pb2' 1225 | # @@protoc_insertion_point(class_scope:transit_realtime.VehiclePosition) 1226 | )) 1227 | _sym_db.RegisterMessage(VehiclePosition) 1228 | 1229 | Alert = _reflection.GeneratedProtocolMessageType('Alert', (_message.Message,), dict( 1230 | DESCRIPTOR = _ALERT, 1231 | __module__ = 'gtfs_realtime_pb2' 1232 | # @@protoc_insertion_point(class_scope:transit_realtime.Alert) 1233 | )) 1234 | _sym_db.RegisterMessage(Alert) 1235 | 1236 | TimeRange = _reflection.GeneratedProtocolMessageType('TimeRange', (_message.Message,), dict( 1237 | DESCRIPTOR = _TIMERANGE, 1238 | __module__ = 'gtfs_realtime_pb2' 1239 | # @@protoc_insertion_point(class_scope:transit_realtime.TimeRange) 1240 | )) 1241 | _sym_db.RegisterMessage(TimeRange) 1242 | 1243 | Position = _reflection.GeneratedProtocolMessageType('Position', (_message.Message,), dict( 1244 | DESCRIPTOR = _POSITION, 1245 | __module__ = 'gtfs_realtime_pb2' 1246 | # @@protoc_insertion_point(class_scope:transit_realtime.Position) 1247 | )) 1248 | _sym_db.RegisterMessage(Position) 1249 | 1250 | TripDescriptor = _reflection.GeneratedProtocolMessageType('TripDescriptor', (_message.Message,), dict( 1251 | DESCRIPTOR = _TRIPDESCRIPTOR, 1252 | __module__ = 'gtfs_realtime_pb2' 1253 | # @@protoc_insertion_point(class_scope:transit_realtime.TripDescriptor) 1254 | )) 1255 | _sym_db.RegisterMessage(TripDescriptor) 1256 | 1257 | VehicleDescriptor = _reflection.GeneratedProtocolMessageType('VehicleDescriptor', (_message.Message,), dict( 1258 | DESCRIPTOR = _VEHICLEDESCRIPTOR, 1259 | __module__ = 'gtfs_realtime_pb2' 1260 | # @@protoc_insertion_point(class_scope:transit_realtime.VehicleDescriptor) 1261 | )) 1262 | _sym_db.RegisterMessage(VehicleDescriptor) 1263 | 1264 | EntitySelector = _reflection.GeneratedProtocolMessageType('EntitySelector', (_message.Message,), dict( 1265 | DESCRIPTOR = _ENTITYSELECTOR, 1266 | __module__ = 'gtfs_realtime_pb2' 1267 | # @@protoc_insertion_point(class_scope:transit_realtime.EntitySelector) 1268 | )) 1269 | _sym_db.RegisterMessage(EntitySelector) 1270 | 1271 | TranslatedString = _reflection.GeneratedProtocolMessageType('TranslatedString', (_message.Message,), dict( 1272 | 1273 | Translation = _reflection.GeneratedProtocolMessageType('Translation', (_message.Message,), dict( 1274 | DESCRIPTOR = _TRANSLATEDSTRING_TRANSLATION, 1275 | __module__ = 'gtfs_realtime_pb2' 1276 | # @@protoc_insertion_point(class_scope:transit_realtime.TranslatedString.Translation) 1277 | )) 1278 | , 1279 | DESCRIPTOR = _TRANSLATEDSTRING, 1280 | __module__ = 'gtfs_realtime_pb2' 1281 | # @@protoc_insertion_point(class_scope:transit_realtime.TranslatedString) 1282 | )) 1283 | _sym_db.RegisterMessage(TranslatedString) 1284 | _sym_db.RegisterMessage(TranslatedString.Translation) 1285 | 1286 | 1287 | DESCRIPTOR.has_options = True 1288 | DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), _b('\n\033com.google.transit.realtime')) 1289 | # @@protoc_insertion_point(module_scope) 1290 | --------------------------------------------------------------------------------