def runTest(self): schedule = transitfeed.Schedule( problem_reporter=util.ExceptionProblemReporterNoExpiration()) schedule.AddAgency("Sample Agency", "http://example.com", "America/Los_Angeles") route = transitfeed.Route() route.route_id = "SAMPLE_ID" route.route_type = 3 route.route_long_name = "Sample Route" schedule.AddRouteObject(route) service_period = transitfeed.ServicePeriod("WEEK") service_period.SetStartDate("20070101") service_period.SetEndDate("20071231") service_period.SetWeekdayService(True) schedule.AddServicePeriodObject(service_period) trip1 = transitfeed.Trip() trip1.route_id = "SAMPLE_ID" trip1.service_id = "WEEK" trip1.trip_id = "SAMPLE_TRIP" schedule.AddTripObject(trip1) trip2 = transitfeed.Trip() trip2.route_id = "SAMPLE_ID" trip2.service_id = "WEEK" trip2.trip_id = "SAMPLE_TRIP" try: schedule.AddTripObject(trip2) self.fail("Expected Duplicate ID validation failure") except transitfeed.DuplicateID as e: self.assertEqual("trip_id", e.column_name) self.assertEqual("SAMPLE_TRIP", e.value)
def runTest(self): # these should work fine trip = transitfeed.Trip() trip.trip_id = "SAMPLE_ID" trip.AddFrequency(0, 50, 1200) trip.AddFrequency("01:00:00", "02:00:00", "600") trip.AddFrequency(u"02:00:00", u"03:00:00", u"1800") headways = trip.GetFrequencyTuples() self.assertEqual(3, len(headways)) self.assertEqual((0, 50, 1200, 0), headways[0]) self.assertEqual((3600, 7200, 600, 0), headways[1]) self.assertEqual((7200, 10800, 1800, 0), headways[2]) self.assertEqual([("SAMPLE_ID", "00:00:00", "00:00:50", "1200", "0"), ("SAMPLE_ID", "01:00:00", "02:00:00", "600", "0"), ("SAMPLE_ID", "02:00:00", "03:00:00", "1800", "0")], trip.GetFrequencyOutputTuples()) # now test invalid input self.ExpectMissingValue(None, 50, 1200, "start_time") self.ExpectMissingValue("", 50, 1200, "start_time") self.ExpectInvalidValue("midnight", 50, 1200, "start_time", "midnight") self.ExpectInvalidValue(-50, 50, 1200, "start_time", -50) self.ExpectMissingValue(0, None, 1200, "end_time") self.ExpectMissingValue(0, "", 1200, "end_time") self.ExpectInvalidValue(0, "noon", 1200, "end_time", "noon") self.ExpectInvalidValue(0, -50, 1200, "end_time", -50) self.ExpectMissingValue(0, 600, 0, "headway_secs") self.ExpectMissingValue(0, 600, None, "headway_secs") self.ExpectMissingValue(0, 600, "", "headway_secs") self.ExpectInvalidValue(0, 600, "test", "headway_secs", "test") self.ExpectInvalidValue(0, 600, -60, "headway_secs", -60) self.ExpectInvalidValue(0, 0, 1200, "end_time", 0) self.ExpectInvalidValue("12:00:00", "06:00:00", 1200, "end_time", 21600)
def runTest(self): schedule = transitfeed.Schedule(problem_reporter=self.problems) schedule.AddAgency("Sample Agency", "http://example.com", "America/Los_Angeles") route = transitfeed.Route() route.route_id = "SAMPLE_ID" route.route_type = 3 route.route_long_name = "Sample Route" schedule.AddRouteObject(route) service_period = transitfeed.ServicePeriod("WEEK") service_period.SetStartDate("20070101") service_period.SetEndDate("20071231") service_period.SetWeekdayService(True) schedule.AddServicePeriodObject(service_period) trip = transitfeed.Trip() trip.route_id = "SAMPLE_ID" trip.service_id = "WEEK" trip.trip_id = "SAMPLE_TRIP" schedule.AddTripObject(trip) stop1 = transitfeed.Stop() stop1.stop_id = "STOP1" stop1.stop_name = "Stop 1" stop1.stop_lat = 78.243587 stop1.stop_lon = 32.258937 schedule.AddStopObject(stop1) trip.AddStopTime(stop1, arrival_time="12:00:00", departure_time="12:00:00") stop2 = transitfeed.Stop() stop2.stop_id = "STOP2" stop2.stop_name = "Stop 2" stop2.stop_lat = 78.253587 stop2.stop_lon = 32.258937 schedule.AddStopObject(stop2) trip.AddStopTime(stop2, arrival_time="12:05:00", departure_time="12:05:00") schedule.Validate() stop3 = transitfeed.Stop() stop3.stop_id = "STOP3" stop3.stop_name = "Stop 3" stop3.stop_lat = 78.243587 stop3.stop_lon = 32.268937 schedule.AddStopObject(stop3) trip.AddStopTime(stop3, arrival_time="12:10:00", departure_time="12:10:00") schedule.Validate() self.accumulator.AssertNoMoreExceptions() stop4 = transitfeed.Stop() stop4.stop_id = "STOP4" stop4.stop_name = "Stop 4" stop4.stop_lat = 78.243588 stop4.stop_lon = 32.268936 schedule.AddStopObject(stop4) trip.AddStopTime(stop4, arrival_time="12:15:00", departure_time="12:15:00") schedule.Validate() e = self.accumulator.PopException('StopsTooClose') self.accumulator.AssertNoMoreExceptions()
def ExpectMissingValue(self, start_time, end_time, headway, column_name): try: trip = transitfeed.Trip() trip.AddFrequency(start_time, end_time, headway) self.fail("Expected MissingValue error on %s" % column_name) except transitfeed.MissingValue as e: self.assertEqual(column_name, e.column_name) self.assertEqual(0, len(trip.GetFrequencyTuples()))
def runTest(self): schedule = self.SimpleSchedule() trip1 = transitfeed.Trip() trip1.route_id = "054C" trip1.service_id = "WEEKDAY" trip1.trip_id = "054C_WEEK" self.ExpectInvalidValueInClosure(column_name="service_id", value="WEEKDAY", c=lambda: schedule.AddTripObject(trip1, validate=True))
def ExpectInvalidValue(self, start_time, end_time, headway, column_name, value): try: trip = transitfeed.Trip() trip.add_frequency(start_time, end_time, headway) self.fail("Expected InvalidValue error on %s" % column_name) except transitfeed.InvalidValue as e: self.assertEqual(column_name, e.column_name) self.assertEqual(value, e.value) self.assertEqual(0, len(trip.get_frequency_tuples()))
def setUp(self): util.ValidationTestCase.setUp(self) self.schedule = self.SimpleSchedule() trip = transitfeed.Trip() trip.route_id = '054C' trip.service_id = 'WEEK' trip.trip_id = '054C-00' trip.trip_headsign = 'via Polish Hill' trip.direction_id = '0' trip.block_id = None trip.shape_id = None self.schedule.add_trip_object(trip, self.problems, True) self.trip = trip
def setUp(self): util.ValidationTestCase.setUp(self) self.schedule = self.SimpleSchedule() trip = transitfeed.Trip() trip.route_id = "054C" trip.service_id = "WEEK" trip.trip_id = "054C-00" trip.trip_headsign = "via Polish Hill" trip.direction_id = "0" trip.block_id = None trip.shape_id = None self.schedule.AddTripObject(trip, self.problems, True) self.trip = trip
def runTest(self): import transitfeed schedule = transitfeed.Schedule() schedule.AddAgency("Sample Agency", "http://example.com", "America/Los_Angeles") route = transitfeed.Route() route.route_id = "SAMPLE_ID" route.route_type = 3 route.route_short_name = "66" route.route_long_name = "Sample Route" schedule.AddRouteObject(route) service_period = transitfeed.ServicePeriod("WEEK") service_period.SetStartDate("20070101") service_period.SetEndDate("20071231") service_period.SetWeekdayService(True) schedule.AddServicePeriodObject(service_period) trip = transitfeed.Trip() trip.route_id = "SAMPLE_ID" trip.service_period = service_period trip.trip_id = "SAMPLE_TRIP" trip.direction_id = "0" trip.block_id = None schedule.AddTripObject(trip) stop1 = transitfeed.Stop() stop1.stop_id = "STOP1" stop1.stop_name = "Stop 1" stop1.stop_lat = 78.243587 stop1.stop_lon = 32.258937 schedule.AddStopObject(stop1) trip.AddStopTime(stop1, arrival_time="12:00:00", departure_time="12:00:00") stop2 = transitfeed.Stop() stop2.stop_id = "STOP2" stop2.stop_name = "Stop 2" stop2.stop_lat = 78.253587 stop2.stop_lon = 32.258937 schedule.AddStopObject(stop2) trip.AddStopTime(stop2, arrival_time="12:05:00", departure_time="12:05:00") schedule.Validate() # not necessary, but helpful for finding problems schedule.WriteGoogleTransitFeed("new_feed.zip")
def runTest(self): schedule = transitfeed.Schedule() schedule.AddAgency("Sample Agency", "http://example.com", "America/Los_Angeles") route = transitfeed.Route() route.route_id = "SAMPLE_ID" route.route_type = 3 route.route_short_name = "66" route.route_long_name = "Sample Route acute letter e\202" schedule.AddRouteObject(route) service_period = transitfeed.ServicePeriod("WEEK") service_period.SetStartDate("20070101") service_period.SetEndDate("20071231") service_period.SetWeekdayService(True) schedule.AddServicePeriodObject(service_period) trip = transitfeed.Trip() trip.route_id = "SAMPLE_ID" trip.service_period = service_period trip.trip_id = "SAMPLE_TRIP" schedule.AddTripObject(trip) stop1 = transitfeed.Stop() stop1.stop_id = "STOP1" stop1.stop_name = u'Stop 1 acute letter e\202' stop1.stop_lat = 78.243587 stop1.stop_lon = 32.258937 schedule.AddStopObject(stop1) trip.AddStopTime(stop1, arrival_time="12:00:00", departure_time="12:00:00") stop2 = transitfeed.Stop() stop2.stop_id = "STOP2" stop2.stop_name = "Stop 2" stop2.stop_lat = 78.253587 stop2.stop_lon = 32.258937 schedule.AddStopObject(stop2) trip.AddStopTime(stop2, arrival_time="12:05:00", departure_time="12:05:00") schedule.Validate() schedule.WriteGoogleTransitFeed(self.tempfilepath)
def runTest(self): problem_reporter = util.GetTestFailureProblemReporter(self) schedule = transitfeed.Schedule(problem_reporter=problem_reporter) route = schedule.AddRoute(short_name="10", long_name="", route_type="Bus") stop = schedule.AddStop(40, -128, "My stop") # Stop must be added to schedule so that the call # AddStopTime -> AddStopTimeObject -> GetStopTimes -> GetStop can work trip = transitfeed.Trip() trip.route_id = route.route_id trip.service_id = schedule.GetDefaultServicePeriod().service_id trip.trip_id = "SAMPLE_TRIP" schedule.AddTripObject(trip) # First stop must have time trip.AddStopTime(stop, arrival_secs=300, departure_secs=360) trip.AddStopTime(stop) trip.AddStopTime(stop, arrival_time="00:07:00", departure_time="00:07:30") trip.Validate(problem_reporter)
def testExtraObjectAttribute(self): """Extra columns added to an object are preserved when writing.""" schedule = self.MakeLoaderAndLoad() # Add an attribute to an existing trip trip1 = schedule.GetTrip("AB1") trip1.t_foo = "foo" # Make a copy of trip_id=AB1 and add an attribute before AddTripObject trip2 = transitfeed.Trip(field_dict=trip1) trip2.trip_id = "AB2" trip2.t_foo = "" trip2.n_foo = "bar" schedule.AddTripObject(trip2) trip2.AddStopTime(stop=schedule.GetStop("BULLFROG"), stop_time="09:00:00") trip2.AddStopTime(stop=schedule.GetStop("STAGECOACH"), stop_time="09:30:00") saved_schedule_file = StringIO() schedule.WriteGoogleTransitFeed(saved_schedule_file) self.accumulator.AssertNoMoreExceptions() self.assertLoadAndCheckExtraValues(saved_schedule_file)
def runTest(self): trip = transitfeed.Trip() repr(trip) # shouldn't crash schedule = self.SimpleSchedule() trip = transitfeed.Trip() repr(trip) # shouldn't crash trip = transitfeed.Trip() trip.trip_headsign = '\xBA\xDF\x0D' # Not valid ascii or utf8 repr(trip) # shouldn't crash trip.route_id = '054C' trip.service_id = 'WEEK' trip.trip_id = '054C-00' trip.trip_headsign = 'via Polish Hill' trip.trip_short_name = 'X12' trip.direction_id = '0' trip.block_id = None trip.shape_id = None trip.bikes_allowed = '1' trip.wheelchair_accessible = '2' trip.Validate(self.problems) self.accumulator.AssertNoMoreExceptions() repr(trip) # shouldn't crash # missing route ID trip.route_id = None self.ValidateAndExpectMissingValue(trip, 'route_id') trip.route_id = '054C' # missing service ID trip.service_id = None self.ValidateAndExpectMissingValue(trip, 'service_id') trip.service_id = 'WEEK' # missing trip ID trip.trip_id = None self.ValidateAndExpectMissingValue(trip, 'trip_id') trip.trip_id = '054C-00' # invalid direction ID trip.direction_id = 'NORTH' self.ValidateAndExpectInvalidValue(trip, 'direction_id') trip.direction_id = '0' # invalid bikes_allowed trip.bikes_allowed = '3' self.ValidateAndExpectInvalidValue(trip, 'bikes_allowed') trip.bikes_allowed = None # invalid wheelchair_accessible trip.wheelchair_accessible = '3' self.ValidateAndExpectInvalidValue(trip, 'wheelchair_accessible') trip.wheelchair_accessible = None # AddTripObject validates that route_id, service_id, .... are found in the # schedule. The Validate calls made by self.Expect... above can't make this # check because trip is not in a schedule. trip.route_id = '054C-notfound' schedule.AddTripObject(trip, self.problems, True) e = self.accumulator.PopException('InvalidValue') self.assertEqual('route_id', e.column_name) self.accumulator.AssertNoMoreExceptions() trip.route_id = '054C' # Make sure calling Trip.Validate validates that route_id and service_id # are found in the schedule. trip.service_id = 'WEEK-notfound' trip.Validate(self.problems) e = self.accumulator.PopException('InvalidValue') self.assertEqual('service_id', e.column_name) self.accumulator.AssertNoMoreExceptions() trip.service_id = 'WEEK' trip.Validate(self.problems) self.accumulator.AssertNoMoreExceptions() # expect no problems for non-overlapping periods trip.AddFrequency("06:00:00", "12:00:00", 600) trip.AddFrequency("01:00:00", "02:00:00", 1200) trip.AddFrequency("04:00:00", "05:00:00", 1000) trip.AddFrequency("12:00:00", "19:00:00", 700) trip.Validate(self.problems) self.accumulator.AssertNoMoreExceptions() trip.ClearFrequencies() # overlapping headway periods trip.AddFrequency("00:00:00", "12:00:00", 600) trip.AddFrequency("06:00:00", "18:00:00", 1200) self.ValidateAndExpectOtherProblem(trip) trip.ClearFrequencies() trip.AddFrequency("12:00:00", "20:00:00", 600) trip.AddFrequency("06:00:00", "18:00:00", 1200) self.ValidateAndExpectOtherProblem(trip) trip.ClearFrequencies() trip.AddFrequency("06:00:00", "12:00:00", 600) trip.AddFrequency("00:00:00", "25:00:00", 1200) self.ValidateAndExpectOtherProblem(trip) trip.ClearFrequencies() trip.AddFrequency("00:00:00", "20:00:00", 600) trip.AddFrequency("06:00:00", "18:00:00", 1200) self.ValidateAndExpectOtherProblem(trip) trip.ClearFrequencies() self.accumulator.AssertNoMoreExceptions()
def runTest(self): accumulator = util.RecordingProblemAccumulator( self, ignore_types=("ExpirationDate", )) problems = transitfeed.ProblemReporter(accumulator) schedule = transitfeed.Schedule(problem_reporter=problems) agency = transitfeed.Agency() agency.agency_id = "DTA" agency.agency_name = "Demo Transit Authority" agency.agency_url = "http://google.com" agency.agency_timezone = "America/Los_Angeles" agency.agency_lang = 'en' # Test that unknown columns, such as agency_mission, are preserved agency.agency_mission = "Get You There" schedule.AddAgencyObject(agency) routes = [] route_data = [("AB", "DTA", "10", "Airport - Bullfrog", 3), ("BFC", "DTA", "20", "Bullfrog - Furnace Creek Resort", 3), ("STBA", "DTA", "30", "Stagecoach - Airport Shuttle", 3), ("CITY", "DTA", "40", "City", 3), ("AAMV", "DTA", "50", "Airport - Amargosa Valley", 3)] for route_entry in route_data: route = transitfeed.Route() (route.route_id, route.agency_id, route.route_short_name, route.route_long_name, route.route_type) = route_entry routes.append(route) schedule.AddRouteObject(route) shape_data = [ (36.915760, -116.751709), (36.905018, -116.763206), (36.902134, -116.777969), (36.904091, -116.788185), (36.883602, -116.814537), (36.874523, -116.795593), (36.873302, -116.786491), (36.869202, -116.784241), (36.868515, -116.784729), ] shape = transitfeed.Shape("BFC1S") for (lat, lon) in shape_data: shape.AddPoint(lat, lon) schedule.AddShapeObject(shape) week_period = transitfeed.ServicePeriod() week_period.service_id = "FULLW" week_period.start_date = "20070101" week_period.end_date = "20071231" week_period.SetWeekdayService() week_period.SetWeekendService() week_period.SetDateHasService("20070604", False) schedule.AddServicePeriodObject(week_period) weekend_period = transitfeed.ServicePeriod() weekend_period.service_id = "WE" weekend_period.start_date = "20070101" weekend_period.end_date = "20071231" weekend_period.SetWeekendService() schedule.AddServicePeriodObject(weekend_period) stops = [] stop_data = [ ("FUR_CREEK_RES", "Furnace Creek Resort (Demo)", 36.425288, -117.133162, "zone-a", "1234"), ("BEATTY_AIRPORT", "Nye County Airport (Demo)", 36.868446, -116.784682, "zone-a", "1235"), ("BULLFROG", "Bullfrog (Demo)", 36.88108, -116.81797, "zone-b", "1236"), ("STAGECOACH", "Stagecoach Hotel & Casino (Demo)", 36.915682, -116.751677, "zone-c", "1237"), ("NADAV", "North Ave / D Ave N (Demo)", 36.914893, -116.76821, "", ""), ("NANAA", "North Ave / N A Ave (Demo)", 36.914944, -116.761472, "", ""), ("DADAN", "Doing AVe / D Ave N (Demo)", 36.909489, -116.768242, "", ""), ("EMSI", "E Main St / S Irving St (Demo)", 36.905697, -116.76218, "", ""), ("AMV", "Amargosa Valley (Demo)", 36.641496, -116.40094, "", ""), ] for stop_entry in stop_data: stop = transitfeed.Stop() (stop.stop_id, stop.stop_name, stop.stop_lat, stop.stop_lon, stop.zone_id, stop.stop_code) = stop_entry schedule.AddStopObject(stop) stops.append(stop) # Add a value to an unknown column and make sure it is preserved schedule.GetStop("BULLFROG").stop_sound = "croak!" trip_data = [ ("AB", "FULLW", "AB1", "to Bullfrog", "0", "1", None), ("AB", "FULLW", "AB2", "to Airport", "1", "2", None), ("STBA", "FULLW", "STBA", "Shuttle", None, None, None), ("CITY", "FULLW", "CITY1", None, "0", None, None), ("CITY", "FULLW", "CITY2", None, "1", None, None), ("BFC", "FULLW", "BFC1", "to Furnace Creek Resort", "0", "1", "BFC1S"), ("BFC", "FULLW", "BFC2", "to Bullfrog", "1", "2", None), ("AAMV", "WE", "AAMV1", "to Amargosa Valley", "0", None, None), ("AAMV", "WE", "AAMV2", "to Airport", "1", None, None), ("AAMV", "WE", "AAMV3", "to Amargosa Valley", "0", None, None), ("AAMV", "WE", "AAMV4", "to Airport", "1", None, None), ] trips = [] for trip_entry in trip_data: trip = transitfeed.Trip() (trip.route_id, trip.service_id, trip.trip_id, trip.trip_headsign, trip.direction_id, trip.block_id, trip.shape_id) = trip_entry trips.append(trip) schedule.AddTripObject(trip) stop_time_data = { "STBA": [("6:00:00", "6:00:00", "STAGECOACH", None, None, None, None), ("6:20:00", "6:20:00", "BEATTY_AIRPORT", None, None, None, None)], "CITY1": [("6:00:00", "6:00:00", "STAGECOACH", 1.34, 0, 0, "stop 1"), ("6:05:00", "6:07:00", "NANAA", 2.40, 1, 2, "stop 2"), ("6:12:00", "6:14:00", "NADAV", 3.0, 2, 2, "stop 3"), ("6:19:00", "6:21:00", "DADAN", 4, 2, 2, "stop 4"), ("6:26:00", "6:28:00", "EMSI", 5.78, 2, 3, "stop 5")], "CITY2": [("6:28:00", "6:28:00", "EMSI", None, None, None, None), ("6:35:00", "6:37:00", "DADAN", None, None, None, None), ("6:42:00", "6:44:00", "NADAV", None, None, None, None), ("6:49:00", "6:51:00", "NANAA", None, None, None, None), ("6:56:00", "6:58:00", "STAGECOACH", None, None, None, None)], "AB1": [("8:00:00", "8:00:00", "BEATTY_AIRPORT", None, None, None, None), ("8:10:00", "8:15:00", "BULLFROG", None, None, None, None)], "AB2": [("12:05:00", "12:05:00", "BULLFROG", None, None, None, None), ("12:15:00", "12:15:00", "BEATTY_AIRPORT", None, None, None, None) ], "BFC1": [ ("8:20:00", "8:20:00", "BULLFROG", None, None, None, None), ("9:20:00", "9:20:00", "FUR_CREEK_RES", None, None, None, None) ], "BFC2": [("11:00:00", "11:00:00", "FUR_CREEK_RES", None, None, None, None), ("12:00:00", "12:00:00", "BULLFROG", None, None, None, None)], "AAMV1": [("8:00:00", "8:00:00", "BEATTY_AIRPORT", None, None, None, None), ("9:00:00", "9:00:00", "AMV", None, None, None, None)], "AAMV2": [("10:00:00", "10:00:00", "AMV", None, None, None, None), ("11:00:00", "11:00:00", "BEATTY_AIRPORT", None, None, None, None)], "AAMV3": [("13:00:00", "13:00:00", "BEATTY_AIRPORT", None, None, None, None), ("14:00:00", "14:00:00", "AMV", None, None, None, None)], "AAMV4": [("15:00:00", "15:00:00", "AMV", None, None, None, None), ("16:00:00", "16:00:00", "BEATTY_AIRPORT", None, None, None, None)], } for trip_id, stop_time_list in stop_time_data.items(): for stop_time_entry in stop_time_list: (arrival_time, departure_time, stop_id, shape_dist_traveled, pickup_type, drop_off_type, stop_headsign) = stop_time_entry trip = schedule.GetTrip(trip_id) stop = schedule.GetStop(stop_id) trip.AddStopTime(stop, arrival_time=arrival_time, departure_time=departure_time, shape_dist_traveled=shape_dist_traveled, pickup_type=pickup_type, drop_off_type=drop_off_type, stop_headsign=stop_headsign) self.assertEqual( 0, schedule.GetTrip("CITY1").GetStopTimes()[0].pickup_type) self.assertEqual( 1, schedule.GetTrip("CITY1").GetStopTimes()[1].pickup_type) headway_data = [ ("STBA", "6:00:00", "22:00:00", 1800), ("CITY1", "6:00:00", "7:59:59", 1800), ("CITY2", "6:00:00", "7:59:59", 1800), ("CITY1", "8:00:00", "9:59:59", 600), ("CITY2", "8:00:00", "9:59:59", 600), ("CITY1", "10:00:00", "15:59:59", 1800), ("CITY2", "10:00:00", "15:59:59", 1800), ("CITY1", "16:00:00", "18:59:59", 600), ("CITY2", "16:00:00", "18:59:59", 600), ("CITY1", "19:00:00", "22:00:00", 1800), ("CITY2", "19:00:00", "22:00:00", 1800), ] headway_trips = {} for headway_entry in headway_data: (trip_id, start_time, end_time, headway) = headway_entry headway_trips[trip_id] = [] # adding to set to check later trip = schedule.GetTrip(trip_id) trip.AddFrequency(start_time, end_time, headway, 0, problems) for trip_id in headway_trips: headway_trips[trip_id] = \ schedule.GetTrip(trip_id).GetFrequencyTuples() fare_data = [ ("p", 1.25, "USD", 0, 0), ("a", 5.25, "USD", 0, 0), ] fares = [] for fare_entry in fare_data: fare = transitfeed.FareAttribute(fare_entry[0], fare_entry[1], fare_entry[2], fare_entry[3], fare_entry[4]) fares.append(fare) schedule.AddFareAttributeObject(fare) fare_rule_data = [ ("p", "AB", "zone-a", "zone-b", None), ("p", "STBA", "zone-a", None, "zone-c"), ("p", "BFC", None, "zone-b", "zone-a"), ("a", "AAMV", None, None, None), ] for fare_id, route_id, orig_id, dest_id, contains_id in fare_rule_data: rule = transitfeed.FareRule(fare_id=fare_id, route_id=route_id, origin_id=orig_id, destination_id=dest_id, contains_id=contains_id) schedule.AddFareRuleObject(rule, problems) schedule.Validate(problems) accumulator.AssertNoMoreExceptions() schedule.WriteGoogleTransitFeed(self.tempfilepath) read_schedule = \ transitfeed.Loader(self.tempfilepath, problems=problems, extra_validation=True).Load() e = accumulator.PopException("UnrecognizedColumn") self.assertEqual(e.file_name, "agency.txt") self.assertEqual(e.column_name, "agency_mission") e = accumulator.PopException("UnrecognizedColumn") self.assertEqual(e.file_name, "stops.txt") self.assertEqual(e.column_name, "stop_sound") accumulator.AssertNoMoreExceptions() self.assertEqual(1, len(read_schedule.GetAgencyList())) self.assertEqual(agency, read_schedule.GetAgency(agency.agency_id)) self.assertEqual(len(routes), len(read_schedule.GetRouteList())) for route in routes: self.assertEqual(route, read_schedule.GetRoute(route.route_id)) self.assertEqual(2, len(read_schedule.GetServicePeriodList())) self.assertEqual( week_period, read_schedule.GetServicePeriod(week_period.service_id)) self.assertEqual( weekend_period, read_schedule.GetServicePeriod(weekend_period.service_id)) self.assertEqual(len(stops), len(read_schedule.GetStopList())) for stop in stops: self.assertEqual(stop, read_schedule.GetStop(stop.stop_id)) self.assertEqual("croak!", read_schedule.GetStop("BULLFROG").stop_sound) self.assertEqual(len(trips), len(read_schedule.GetTripList())) for trip in trips: self.assertEqual(trip, read_schedule.GetTrip(trip.trip_id)) for trip_id in headway_trips: self.assertEqual( headway_trips[trip_id], read_schedule.GetTrip(trip_id).GetFrequencyTuples()) for trip_id, stop_time_list in stop_time_data.items(): trip = read_schedule.GetTrip(trip_id) read_stoptimes = trip.GetStopTimes() self.assertEqual(len(read_stoptimes), len(stop_time_list)) for stop_time_entry, read_stoptime in zip(stop_time_list, read_stoptimes): (arrival_time, departure_time, stop_id, shape_dist_traveled, pickup_type, drop_off_type, stop_headsign) = stop_time_entry self.assertEqual(stop_id, read_stoptime.stop_id) self.assertEqual(read_schedule.GetStop(stop_id), read_stoptime.stop) self.assertEqualTimeString(arrival_time, read_stoptime.arrival_time) self.assertEqualTimeString(departure_time, read_stoptime.departure_time) self.assertEqual(shape_dist_traveled, read_stoptime.shape_dist_traveled) self.assertEqualWithDefault(pickup_type, read_stoptime.pickup_type, 0) self.assertEqualWithDefault(drop_off_type, read_stoptime.drop_off_type, 0) self.assertEqualWithDefault(stop_headsign, read_stoptime.stop_headsign, '') self.assertEqual(len(fares), len(read_schedule.GetFareAttributeList())) for fare in fares: self.assertEqual(fare, read_schedule.GetFareAttribute(fare.fare_id)) read_fare_rules_data = [] for fare in read_schedule.GetFareAttributeList(): for rule in fare.GetFareRuleList(): self.assertEqual(fare.fare_id, rule.fare_id) read_fare_rules_data.append( (fare.fare_id, rule.route_id, rule.origin_id, rule.destination_id, rule.contains_id)) fare_rule_data.sort() read_fare_rules_data.sort() self.assertEqual(len(read_fare_rules_data), len(fare_rule_data)) for rf, f in zip(read_fare_rules_data, fare_rule_data): self.assertEqual(rf, f) self.assertEqual(1, len(read_schedule.GetShapeList())) self.assertEqual(shape, read_schedule.GetShape(shape.shape_id))
def runTest(self): schedule = transitfeed.Schedule(self.problems) schedule._check_duplicate_trips = True; agency = transitfeed.Agency('Demo agency', 'http://google.com', 'America/Los_Angeles', 'agency1') schedule.AddAgencyObject(agency) service = schedule.GetDefaultServicePeriod() service.SetDateHasService('20070101') route1 = transitfeed.Route('Route1', 'route 1', 3, 'route_1', 'agency1') schedule.AddRouteObject(route1) route2 = transitfeed.Route('Route2', 'route 2', 3, 'route_2', 'agency1') schedule.AddRouteObject(route2) trip1 = transitfeed.Trip() trip1.route_id = 'route_1' trip1.trip_id = 't1' trip1.trip_headsign = 'via Polish Hill' trip1.direction_id = '0' trip1.service_id = service.service_id schedule.AddTripObject(trip1) trip2 = transitfeed.Trip() trip2.route_id = 'route_2' trip2.trip_id = 't2' trip2.trip_headsign = 'New' trip2.direction_id = '0' trip2.service_id = service.service_id schedule.AddTripObject(trip2) trip3 = transitfeed.Trip() trip3.route_id = 'route_1' trip3.trip_id = 't3' trip3.trip_headsign = 'New Demo' trip3.direction_id = '0' trip3.service_id = service.service_id schedule.AddTripObject(trip3) stop1 = transitfeed.Stop(36.425288, -117.139162, "Demo Stop 1", "STOP1") schedule.AddStopObject(stop1) trip1.AddStopTime(stop1, arrival_time="5:11:00", departure_time="5:12:00", stop_sequence=0, shape_dist_traveled=0) trip2.AddStopTime(stop1, arrival_time="5:11:00", departure_time="5:12:00", stop_sequence=0, shape_dist_traveled=0) trip3.AddStopTime(stop1, arrival_time="6:11:00", departure_time="6:12:00", stop_sequence=0, shape_dist_traveled=0) stop2 = transitfeed.Stop(36.424288, -117.158142, "Demo Stop 2", "STOP2") schedule.AddStopObject(stop2) trip1.AddStopTime(stop2, arrival_time="5:15:00", departure_time="5:16:00", stop_sequence=1, shape_dist_traveled=1) trip2.AddStopTime(stop2, arrival_time="5:25:00", departure_time="5:26:00", stop_sequence=1, shape_dist_traveled=1) trip3.AddStopTime(stop2, arrival_time="6:15:00", departure_time="6:16:00", stop_sequence=1, shape_dist_traveled=1) schedule.Validate(self.problems) e = self.accumulator.PopException('DuplicateTrip') self.assertTrue(e.FormatProblem().find('t1 of route') != -1) self.assertTrue(e.FormatProblem().find('t2 of route') != -1) self.accumulator.AssertNoMoreExceptions()
def runTest(self): schedule = transitfeed.Schedule(self.problems) schedule._check_duplicate_trips = True agency = transitfeed.Agency("Demo agency", "http://google.com", "America/Los_Angeles", "agency1") schedule.AddAgencyObject(agency) service = schedule.GetDefaultServicePeriod() service.SetDateHasService("20070101") route1 = transitfeed.Route("Route1", "route 1", 3, "route_1", "agency1") schedule.AddRouteObject(route1) route2 = transitfeed.Route("Route2", "route 2", 3, "route_2", "agency1") schedule.AddRouteObject(route2) trip1 = transitfeed.Trip() trip1.route_id = "route_1" trip1.trip_id = "t1" trip1.trip_headsign = "via Polish Hill" trip1.direction_id = "0" trip1.service_id = service.service_id schedule.AddTripObject(trip1) trip2 = transitfeed.Trip() trip2.route_id = "route_2" trip2.trip_id = "t2" trip2.trip_headsign = "New" trip2.direction_id = "0" trip2.service_id = service.service_id schedule.AddTripObject(trip2) trip3 = transitfeed.Trip() trip3.route_id = "route_1" trip3.trip_id = "t3" trip3.trip_headsign = "New Demo" trip3.direction_id = "0" trip3.service_id = service.service_id schedule.AddTripObject(trip3) stop1 = transitfeed.Stop(36.425288, -117.139162, "Demo Stop 1", "STOP1") schedule.AddStopObject(stop1) trip1.AddStopTime( stop1, arrival_time="5:11:00", departure_time="5:12:00", stop_sequence=0, shape_dist_traveled=0, ) trip2.AddStopTime( stop1, arrival_time="5:11:00", departure_time="5:12:00", stop_sequence=0, shape_dist_traveled=0, ) trip3.AddStopTime( stop1, arrival_time="6:11:00", departure_time="6:12:00", stop_sequence=0, shape_dist_traveled=0, ) stop2 = transitfeed.Stop(36.424288, -117.158142, "Demo Stop 2", "STOP2") schedule.AddStopObject(stop2) trip1.AddStopTime( stop2, arrival_time="5:15:00", departure_time="5:16:00", stop_sequence=1, shape_dist_traveled=1, ) trip2.AddStopTime( stop2, arrival_time="5:25:00", departure_time="5:26:00", stop_sequence=1, shape_dist_traveled=1, ) trip3.AddStopTime( stop2, arrival_time="6:15:00", departure_time="6:16:00", stop_sequence=1, shape_dist_traveled=1, ) schedule.Validate(self.problems) e = self.accumulator.PopException("DuplicateTrip") self.assertTrue(e.FormatProblem().find("t1 of route") != -1) self.assertTrue(e.FormatProblem().find("t2 of route") != -1) self.accumulator.AssertNoMoreExceptions()