Example #1
0
  def testFieldDict(self):
    route = transitfeed.Route(field_dict={})
    self.assertEquals({}, dict(route))

    route = transitfeed.Route(field_dict={
      'route_id': 'id1', 'route_short_name': '22', 'agency_id': 'myage',
      'route_type': '1', 'bikes_allowed': '1'})
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals(
        {'route_id': 'id1', 'route_short_name': '22', 'agency_id': 'myage',
         'route_type': '1', 'bikes_allowed': '1'},
        dict(route))

    route = transitfeed.Route(field_dict={
      'route_id': 'id1', 'route_short_name': '22', 'agency_id': 'myage',
      'route_type': '1', 'my_column': 'v'})
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'agency_id': 'myage', 'route_type': '1',
                       'my_column':'v'}, dict(route))
    route._private = 0.3  # Isn't copied
    route_copy = transitfeed.Route(field_dict=route)
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'agency_id': 'myage', 'route_type': '1',
                       'my_column':'v'}, dict(route_copy))
Example #2
0
    def testFieldDict(self):
        route = transitfeed.Route(field_dict={})
        self.assertEquals({}, dict(route))

        route = transitfeed.Route(
            field_dict={
                "route_id": "id1",
                "route_short_name": "22",
                "agency_id": "myage",
                "route_type": "1",
                "bikes_allowed": "1",
            }
        )
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(
            {
                "route_id": "id1",
                "route_short_name": "22",
                "agency_id": "myage",
                "route_type": "1",
                "bikes_allowed": "1",
            },
            dict(route),
        )

        route = transitfeed.Route(
            field_dict={
                "route_id": "id1",
                "route_short_name": "22",
                "agency_id": "myage",
                "route_type": "1",
                "my_column": "v",
            }
        )
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(
            {
                "route_id": "id1",
                "route_short_name": "22",
                "agency_id": "myage",
                "route_type": "1",
                "my_column": "v",
            },
            dict(route),
        )
        route._private = 0.3  # Isn't copied
        route_copy = transitfeed.Route(field_dict=route)
        self.assertEquals(
            {
                "route_id": "id1",
                "route_short_name": "22",
                "agency_id": "myage",
                "route_type": "1",
                "my_column": "v",
            },
            dict(route_copy),
        )
class AgencyIDValidationTestCase(util.TestCase):
  def runTest(self):
    schedule = transitfeed.Schedule(
        problem_reporter=util.ExceptionProblemReporterNoExpiration())
    route = transitfeed.Route()
    route.route_id = "SAMPLE_ID"
    route.route_type = 3
    route.route_long_name = "Sample Route"
    # no agency defined yet, failure.
    try:
      schedule.AddRouteObject(route)
      self.fail("Expected validation error")
    except transitfeed.InvalidValue, e:
      self.assertEqual('agency_id', e.column_name)
      self.assertEqual(None, e.value)

    # one agency defined, assume that the route belongs to it
    schedule.AddAgency("Test Agency", "http://example.com",
                       "America/Los_Angeles", "TEST_AGENCY")
    schedule.AddRouteObject(route)

    schedule.AddAgency("Test Agency 2", "http://example.com",
                       "America/Los_Angeles", "TEST_AGENCY_2")
    route = transitfeed.Route()
    route.route_id = "SAMPLE_ID_2"
    route.route_type = 3
    route.route_long_name = "Sample Route 2"
    # multiple agencies defined, don't know what omitted agency_id should be
    try:
      schedule.AddRouteObject(route)
      self.fail("Expected validation error")
    except transitfeed.InvalidValue, e:
      self.assertEqual('agency_id', e.column_name)
      self.assertEqual(None, e.value)
Example #4
0
  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)
Example #5
0
  def testExtraObjectAttribute(self):
    """Extra columns added to an object are preserved when writing."""
    schedule = self.MakeLoaderAndLoad()
    # Add an attribute after AddRouteObject
    route_t = transitfeed.Route(short_name="T", route_type="Bus", route_id="t")
    schedule.AddRouteObject(route_t)
    route_t.t_foo = "foo"
    # Add an attribute before AddRouteObject
    route_n = transitfeed.Route(short_name="N", route_type="Bus", route_id="n")
    route_n.n_foo = "bar"
    schedule.AddRouteObject(route_n)
    saved_schedule_file = io.BytesIO()
    schedule.WriteGoogleTransitFeed(saved_schedule_file)
    self.accumulator.AssertNoMoreExceptions()

    self.assertLoadAndCheckExtraValues(saved_schedule_file)
Example #6
0
  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()
Example #7
0
 def testInitArgOrder(self):
     """Call Route.__init__ without any names so a change in order is noticed."""
     route = transitfeed.Route('short', 'long name', 'Bus', 'r1', 'a1')
     self.assertEquals(
         {
             'route_id': 'r1',
             'route_short_name': 'short',
             'route_long_name': 'long name',
             'route_type': '3',
             'agency_id': 'a1'
         }, dict(route))
Example #8
0
 def testInitArgOrder(self):
     """Call Route.__init__ without any names so a change in order is noticed."""
     route = transitfeed.Route("short", "long name", "Bus", "r1", "a1")
     self.assertEquals(
         {
             "route_id": "r1",
             "route_short_name": "short",
             "route_long_name": "long name",
             "route_type": "3",
             "agency_id": "a1",
         },
         dict(route),
     )
Example #9
0
  def testInitArgs(self):
    # route_type name
    route = transitfeed.Route(route_id='id1', short_name='22', route_type='Bus')
    repr(route)
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals(3, route.route_type)  # converted to an int
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'route_type': '3'}, dict(route))

    # route_type as an int
    route = transitfeed.Route(route_id='i1', long_name='Twenty 2', route_type=1)
    repr(route)
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals(1, route.route_type)  # kept as an int
    self.assertEquals({'route_id': 'i1', 'route_long_name': 'Twenty 2',
                       'route_type': '1'}, dict(route))

    # route_type as a string
    route = transitfeed.Route(route_id='id1', short_name='22', route_type='1')
    repr(route)
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals(1, route.route_type)  # converted to an int
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'route_type': '1'}, dict(route))

    # route_type has undefined int value
    route = transitfeed.Route(route_id='id1', short_name='22',
                              route_type='8')
    repr(route)
    route.Validate(self.problems)
    e = self.accumulator.PopException('InvalidValue')
    self.assertEqual('route_type', e.column_name)
    self.assertEqual(1, e.type)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'route_type': '8'}, dict(route))

    # route_type that doesn't parse
    route = transitfeed.Route(route_id='id1', short_name='22',
                              route_type='1foo')
    repr(route)
    route.Validate(self.problems)
    e = self.accumulator.PopException('InvalidValue')
    self.assertEqual('route_type', e.column_name)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'route_type': '1foo'}, dict(route))

    # agency_id
    route = transitfeed.Route(route_id='id1', short_name='22', route_type=1,
                              agency_id='myage')
    repr(route)
    route.Validate(self.problems)
    self.accumulator.AssertNoMoreExceptions()
    self.assertEquals({'route_id': 'id1', 'route_short_name': '22',
                       'route_type': '1', 'agency_id': 'myage'}, dict(route))
 def runTest(self):
   schedule = transitfeed.Schedule(
       problem_reporter=util.ExceptionProblemReporterNoExpiration())
   route = transitfeed.Route()
   route.route_id = "SAMPLE_ID"
   route.route_type = 3
   route.route_long_name = "Sample Route"
   # no agency defined yet, failure.
   try:
     schedule.AddRouteObject(route)
     self.fail("Expected validation error")
   except transitfeed.InvalidValue, e:
     self.assertEqual('agency_id', e.column_name)
     self.assertEqual(None, e.value)
    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")
Example #12
0
    def testDefault(self):
        route = transitfeed.Route()
        repr(route)
        self.assertEqual({}, dict(route))
        route.Validate(self.problems)
        repr(route)
        self.assertEqual({}, dict(route))

        e = self.accumulator.PopException('MissingValue')
        self.assertEqual('route_id', e.column_name)
        e = self.accumulator.PopException('MissingValue')
        self.assertEqual('route_type', e.column_name)
        e = self.accumulator.PopException('InvalidValue')
        self.assertEqual('route_short_name', e.column_name)
        self.accumulator.AssertNoMoreExceptions()
    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)
Example #14
0
def create_gtfs_route_entries(route_defs, mode_config, schedule):
    # print "%s() called." % inspect.stack()[0][3]
    route_id_to_gtfs_route_id_map = {}
    # Routes
    # sorted_route_defs = sorted(route_defs,
    #     key=route_segs.get_route_order_key_from_name)
    for ii, route_def in enumerate(route_defs):
        route_long_name = route_def.long_name
        route_short_name = route_def.short_name
        route_description = None
        gtfs_route_id = str(route_def.id)
        route_id_to_gtfs_route_id_map[route_def.id] = gtfs_route_id
        route = transitfeed.Route(short_name=route_short_name,
                                  long_name=route_long_name,
                                  route_type=mode_config['system'],
                                  route_id=gtfs_route_id)
        # print "Adding route with ID %s, name: %s" % \
        #     (gtfs_route_id, route_long_name)
        schedule.AddRouteObject(route)
    return route_id_to_gtfs_route_id_map
Example #15
0
    def testInitArgs(self):
        # route_type name
        route = transitfeed.Route(route_id="id1", short_name="22", route_type="Bus")
        repr(route)
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(3, route.route_type)  # converted to an int
        self.assertEquals(
            {"route_id": "id1", "route_short_name": "22", "route_type": "3"},
            dict(route),
        )

        # route_type as an int
        route = transitfeed.Route(route_id="i1", long_name="Twenty 2", route_type=1)
        repr(route)
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(1, route.route_type)  # kept as an int
        self.assertEquals(
            {"route_id": "i1", "route_long_name": "Twenty 2", "route_type": "1"},
            dict(route),
        )

        # route_type as a string
        route = transitfeed.Route(route_id="id1", short_name="22", route_type="1")
        repr(route)
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(1, route.route_type)  # converted to an int
        self.assertEquals(
            {"route_id": "id1", "route_short_name": "22", "route_type": "1"},
            dict(route),
        )

        # route_type has undefined int value
        route = transitfeed.Route(route_id="id1", short_name="22", route_type="8")
        repr(route)
        route.Validate(self.problems)
        e = self.accumulator.PopException("InvalidValue")
        self.assertEqual("route_type", e.column_name)
        self.assertEqual(1, e.type)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(
            {"route_id": "id1", "route_short_name": "22", "route_type": "8"},
            dict(route),
        )

        # route_type that doesn't parse
        route = transitfeed.Route(route_id="id1", short_name="22", route_type="1foo")
        repr(route)
        route.Validate(self.problems)
        e = self.accumulator.PopException("InvalidValue")
        self.assertEqual("route_type", e.column_name)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(
            {"route_id": "id1", "route_short_name": "22", "route_type": "1foo"},
            dict(route),
        )

        # agency_id
        route = transitfeed.Route(
            route_id="id1", short_name="22", route_type=1, agency_id="myage"
        )
        repr(route)
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()
        self.assertEquals(
            {
                "route_id": "id1",
                "route_short_name": "22",
                "route_type": "1",
                "agency_id": "myage",
            },
            dict(route),
        )
Example #16
0
    def runTest(self):
        # success case
        route = transitfeed.Route()
        route.route_id = '054C'
        route.route_short_name = '54C'
        route.route_long_name = 'South Side - North Side'
        route.route_type = 7
        route.Validate(self.problems)

        # blank short & long names
        route.route_short_name = ''
        route.route_long_name = '    '
        self.ValidateAndExpectInvalidValue(route, 'route_short_name')

        # short name too long
        route.route_short_name = 'South Side'
        route.route_long_name = ''
        self.ValidateAndExpectInvalidValue(route, 'route_short_name')
        route.route_short_name = 'M7bis'  # 5 is OK
        route.Validate(self.problems)

        # long name contains short name
        route.route_short_name = '54C'
        route.route_long_name = '54C South Side - North Side'
        self.ValidateAndExpectInvalidValue(route, 'route_long_name')
        route.route_long_name = '54C(South Side - North Side)'
        self.ValidateAndExpectInvalidValue(route, 'route_long_name')
        route.route_long_name = '54C-South Side - North Side'
        self.ValidateAndExpectInvalidValue(route, 'route_long_name')

        # long name is same as short name
        route.route_short_name = '54C'
        route.route_long_name = '54C'
        self.ValidateAndExpectInvalidValue(route, 'route_long_name')

        # route description is same as short name
        route.route_desc = '54C'
        route.route_short_name = '54C'
        route.route_long_name = ''
        self.ValidateAndExpectInvalidValue(route, 'route_desc')
        route.route_desc = None

        # route description is same as long name
        route.route_desc = 'South Side - North Side'
        route.route_long_name = 'South Side - North Side'
        self.ValidateAndExpectInvalidValue(route, 'route_desc')
        route.route_desc = None

        # invalid route types
        route.route_type = 8
        self.ValidateAndExpectInvalidValue(route, 'route_type')
        route.route_type = -1
        self.ValidateAndExpectInvalidValue(route, 'route_type')
        route.route_type = 7

        # invalid route URL
        route.route_url = 'www.example.com'
        self.ValidateAndExpectInvalidValue(route, 'route_url')
        route.route_url = None

        # invalid route color
        route.route_color = 'orange'
        self.ValidateAndExpectInvalidValue(route, 'route_color')
        route.route_color = None

        # invalid route text color
        route.route_text_color = 'orange'
        self.ValidateAndExpectInvalidValue(route, 'route_text_color')
        route.route_text_color = None

        # missing route ID
        route.route_id = None
        self.ValidateAndExpectMissingValue(route, 'route_id')
        route.route_id = '054C'

        # bad color contrast
        route.route_text_color = None  # black
        route.route_color = '0000FF'  # Bad
        self.ValidateAndExpectInvalidValue(route, 'route_color')
        route.route_color = '00BF00'  # OK
        route.Validate(self.problems)
        route.route_color = '005F00'  # Bad
        self.ValidateAndExpectInvalidValue(route, 'route_color')
        route.route_color = 'FF00FF'  # OK
        route.Validate(self.problems)
        route.route_text_color = 'FFFFFF'  # OK too
        route.Validate(self.problems)
        route.route_text_color = '00FF00'  # think of color-blind people!
        self.ValidateAndExpectInvalidValue(route, 'route_color')
        route.route_text_color = '007F00'
        route.route_color = 'FF0000'
        self.ValidateAndExpectInvalidValue(route, 'route_color')
        route.route_color = '00FFFF'  # OK
        route.Validate(self.problems)
        route.route_text_color = None  # black
        route.route_color = None  # white
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()

        # bad bikes_allowed
        route.bikes_allowed = '3'
        self.ValidateAndExpectInvalidValue(route, 'bikes_allowed')
Example #17
0
    def runTest(self):
        # success case
        route = transitfeed.Route()
        route.route_id = "054C"
        route.route_short_name = "54C"
        route.route_long_name = "South Side - North Side"
        route.route_type = 7
        route.Validate(self.problems)

        # blank short & long names
        route.route_short_name = ""
        route.route_long_name = "    "
        self.ValidateAndExpectInvalidValue(route, "route_short_name")

        # short name too long
        route.route_short_name = "South Side"
        route.route_long_name = ""
        self.ValidateAndExpectInvalidValue(route, "route_short_name")
        route.route_short_name = "M7bis"  # 5 is OK
        route.Validate(self.problems)

        # long name contains short name
        route.route_short_name = "54C"
        route.route_long_name = "54C South Side - North Side"
        self.ValidateAndExpectInvalidValue(route, "route_long_name")
        route.route_long_name = "54C(South Side - North Side)"
        self.ValidateAndExpectInvalidValue(route, "route_long_name")
        route.route_long_name = "54C-South Side - North Side"
        self.ValidateAndExpectInvalidValue(route, "route_long_name")

        # long name is same as short name
        route.route_short_name = "54C"
        route.route_long_name = "54C"
        self.ValidateAndExpectInvalidValue(route, "route_long_name")

        # route description is same as short name
        route.route_desc = "54C"
        route.route_short_name = "54C"
        route.route_long_name = ""
        self.ValidateAndExpectInvalidValue(route, "route_desc")
        route.route_desc = None

        # route description is same as long name
        route.route_desc = "South Side - North Side"
        route.route_long_name = "South Side - North Side"
        self.ValidateAndExpectInvalidValue(route, "route_desc")
        route.route_desc = None

        # invalid route types
        route.route_type = 8
        self.ValidateAndExpectInvalidValue(route, "route_type")
        route.route_type = -1
        self.ValidateAndExpectInvalidValue(route, "route_type")
        route.route_type = 7

        # invalid route URL
        route.route_url = "www.example.com"
        self.ValidateAndExpectInvalidValue(route, "route_url")
        route.route_url = None

        # invalid route color
        route.route_color = "orange"
        self.ValidateAndExpectInvalidValue(route, "route_color")
        route.route_color = None

        # invalid route text color
        route.route_text_color = "orange"
        self.ValidateAndExpectInvalidValue(route, "route_text_color")
        route.route_text_color = None

        # missing route ID
        route.route_id = None
        self.ValidateAndExpectMissingValue(route, "route_id")
        route.route_id = "054C"

        # bad color contrast
        route.route_text_color = None  # black
        route.route_color = "0000FF"  # Bad
        self.ValidateAndExpectInvalidValue(route, "route_color")
        route.route_color = "00BF00"  # OK
        route.Validate(self.problems)
        route.route_color = "005F00"  # Bad
        self.ValidateAndExpectInvalidValue(route, "route_color")
        route.route_color = "FF00FF"  # OK
        route.Validate(self.problems)
        route.route_text_color = "FFFFFF"  # OK too
        route.Validate(self.problems)
        route.route_text_color = "00FF00"  # think of color-blind people!
        self.ValidateAndExpectInvalidValue(route, "route_color")
        route.route_text_color = "007F00"
        route.route_color = "FF0000"
        self.ValidateAndExpectInvalidValue(route, "route_color")
        route.route_color = "00FFFF"  # OK
        route.Validate(self.problems)
        route.route_text_color = None  # black
        route.route_color = None  # white
        route.Validate(self.problems)
        self.accumulator.AssertNoMoreExceptions()

        # bad bikes_allowed
        route.bikes_allowed = "3"
        self.ValidateAndExpectInvalidValue(route, "bikes_allowed")
    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()
Example #20
0
  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()