Example #1
0
 def testCopy(self):
   agency = transitfeed.Agency(field_dict={'agency_name': 'Test Agency',
                                           'agency_url': 'http://example.com',
                                           'timezone': 'America/Los_Angeles',
                                           'agency_mission': 'get you there'})
   self.assertEquals(agency.agency_mission, 'get you there')
   agency_copy = transitfeed.Agency(field_dict=agency)
   self.assertEquals(agency_copy.agency_mission, 'get you there')
   self.assertEquals(agency_copy['agency_mission'], 'get you there')
Example #2
0
 def testCopy(self):
     agency = transitfeed.Agency(
         field_dict={
             "agency_name": "Test Agency",
             "agency_url": "http://example.com",
             "timezone": "America/Los_Angeles",
             "agency_mission": "get you there",
         })
     self.assertEquals(agency.agency_mission, "get you there")
     agency_copy = transitfeed.Agency(field_dict=agency)
     self.assertEquals(agency_copy.agency_mission, "get you there")
     self.assertEquals(agency_copy["agency_mission"], "get you there")
Example #3
0
    def prepare_agency(self):
        """
        Loads agency data from a json config file. The valid keys under the
        json "agency" object correspond to the transitfeed.Agency field names.

        Return a transitfeed.Agency object
        """
        fields = [
            'agency_name', 'agency_url', 'agency_timezone', 'agency_id',
            'agency_lang', 'agency_phone', 'agency_fare_url'
        ]
        data_dict = {}
        for field_name in fields:
            if field_name in self.config["agency"]:
                field_value = self.config["agency"][field_name]
                if field_value is not None and field_value != "":
                    data_dict[field_name] = field_value
            else:
                sys.stderr.write("Warning: Key '" + field_name +
                                 "' was not found in the config file.")

        agency = transitfeed.Agency(field_dict=data_dict)

        if not agency.Validate():
            sys.stderr.write("Error: Agency data is invalid.")
            # TODO error handling based on a exception
            # raise AttributeError('Agency data in config file in not valid.')

        return agency
Example #4
0
 def freeAgency(self, ex=''):
   agency = transitfeed.Agency()
   agency.agency_id = 'agencytestid' + ex
   agency.agency_name = 'Foo Bus Line' + ex
   agency.agency_url = 'http://gofoo.com/' + ex
   agency.agency_timezone = 'America/Los_Angeles'
   return agency
 def freeAgency(self, ex=""):
     agency = transitfeed.Agency()
     agency.agency_id = "agencytestid" + ex
     agency.agency_name = "Foo Bus Line" + ex
     agency.agency_url = "http://gofoo.com/" + ex
     agency.agency_timezone = "America/Los_Angeles"
     return agency
Example #6
0
 def testEq(self):
     agency1 = transitfeed.Agency("Test Agency", "http://example.com",
                                  "America/Los_Angeles")
     agency2 = transitfeed.Agency("Test Agency", "http://example.com",
                                  "America/Los_Angeles")
     # Unknown columns, such as agency_mission, do affect equality
     self.assertEquals(agency1, agency2)
     agency1.agency_mission = "Get you there"
     self.assertNotEquals(agency1, agency2)
     agency2.agency_mission = "Move you"
     self.assertNotEquals(agency1, agency2)
     agency1.agency_mission = "Move you"
     self.assertEquals(agency1, agency2)
     # Private attributes don't affect equality
     agency1._private_attr = "My private message"
     self.assertEquals(agency1, agency2)
     agency2._private_attr = "Another private thing"
     self.assertEquals(agency1, agency2)
Example #7
0
 def testDict(self):
   agency = transitfeed.Agency("Test Agency", "http://example.com",
                               "America/Los_Angeles")
   agency._private_attribute = "blah"
   # Private attributes don't appear when iterating through an agency as a
   # dict but can be directly accessed.
   self.assertEquals("blah", agency._private_attribute)
   self.assertEquals("blah", agency["_private_attribute"])
   self.assertEquals(
       set("agency_name agency_url agency_timezone".split()),
       set(agency.keys()))
   self.assertEquals({"agency_name": "Test Agency",
                      "agency_url": "http://example.com",
                      "agency_timezone": "America/Los_Angeles"},
                     dict(agency.iteritems()))
Example #8
0
    def runTest(self):
        # success case
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA',
                                    lang='xh')
        self.ExpectNoProblems(agency)

        # bad agency
        agency = transitfeed.Agency(name='   ',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA')
        self.ValidateAndExpectMissingValue(agency, 'agency_name')

        # missing url
        agency = transitfeed.Agency(name='Test Agency',
                                    timezone='America/Los_Angeles',
                                    id='TA')
        self.ValidateAndExpectMissingValue(agency, 'agency_url')

        # bad url
        agency = transitfeed.Agency(name='Test Agency',
                                    url='www.example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA')
        self.ValidateAndExpectInvalidValue(agency, 'agency_url')

        # bad time zone
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Alviso',
                                    id='TA')
        agency.Validate(self.problems)
        e = self.accumulator.PopInvalidValue('agency_timezone')
        self.assertMatchesRegex('"America/Alviso" is not a common timezone',
                                e.FormatProblem())
        self.accumulator.AssertNoMoreExceptions()

        # bad language code
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA',
                                    lang='English')
        self.ValidateAndExpectInvalidValue(agency, 'agency_lang')

        # bad 2-letter language code
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA',
                                    lang='xx')
        self.ValidateAndExpectInvalidValue(agency, 'agency_lang')

        # capitalized language code is OK
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    id='TA',
                                    lang='EN')
        self.ExpectNoProblems(agency)

        # extra attribute in constructor is fine, only checked when loading a file
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles',
                                    agency_mission='monorail you there')
        self.ExpectNoProblems(agency)

        # extra attribute in assigned later is also fine
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://example.com',
                                    timezone='America/Los_Angeles')
        agency.agency_mission = 'monorail you there'
        self.ExpectNoProblems(agency)

        # good agency_fare_url url
        agency = transitfeed.Agency(
            name='Test Agency',
            url='http://www.example.com',
            timezone='America/Los_Angeles',
            agency_fare_url="http://www.example.com/fares")
        self.ExpectNoProblems(agency)

        # bad agency_fare_url url
        agency = transitfeed.Agency(name='Test Agency',
                                    url='http://www.example.com',
                                    timezone='America/Los_Angeles',
                                    agency_fare_url="www.example.com/fares")
        self.ValidateAndExpectInvalidValue(agency, 'agency_fare_url')

        # Multiple problems
        agency = transitfeed.Agency(name='Test Agency',
                                    url='www.example.com',
                                    timezone='America/West Coast',
                                    id='TA')
        self.assertEquals(False, agency.Validate(self.problems))
        e = self.accumulator.PopException('InvalidValue')
        self.assertEqual(e.column_name, 'agency_url')
        e = self.accumulator.PopException('InvalidValue')
        self.assertEqual(e.column_name, 'agency_timezone')
        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))
# coding=UTF8

import transitfeed
from optparse import OptionParser
import datetime

parser = OptionParser()
parser.add_option('--output',
                  dest='output',
                  help='Path of output file. Should end in .zip')
parser.set_defaults(output='google_transit.zip')
(options, args) = parser.parse_args()

schedule = transitfeed.Schedule()
agency = transitfeed.Agency(name="I/O Buses",
                            url="https://events.google.com/io/",
                            timezone="America/Los_Angeles",
                            lang="EN")
schedule.AddAgencyObject(agency)

# Service Periods (1 day each)
day0 = schedule.NewDefaultServicePeriod()
day0.SetDateHasService('20170516')
day1 = schedule.NewDefaultServicePeriod()
day1.SetDateHasService('20170517')
day2 = schedule.NewDefaultServicePeriod()
day2.SetDateHasService('20170518')
day3 = schedule.NewDefaultServicePeriod()
day3.SetDateHasService('20170519')

# Stops
shorelineAmphitheatre = schedule.AddStop(lat=37.426300,
Example #11
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()
    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 #13
0
    def runTest(self):
        # success case
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Los_Angeles",
            id="TA",
            lang="xh",
        )
        self.ExpectNoProblems(agency)

        # bad agency
        agency = transitfeed.Agency(
            name="   ",
            url="http://example.com",
            timezone="America/Los_Angeles",
            id="TA",
        )
        self.ValidateAndExpectMissingValue(agency, "agency_name")

        # missing url
        agency = transitfeed.Agency(name="Test Agency",
                                    timezone="America/Los_Angeles",
                                    id="TA")
        self.ValidateAndExpectMissingValue(agency, "agency_url")

        # bad url
        agency = transitfeed.Agency(
            name="Test Agency",
            url="www.example.com",
            timezone="America/Los_Angeles",
            id="TA",
        )
        self.ValidateAndExpectInvalidValue(agency, "agency_url")

        # bad time zone
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Alviso",
            id="TA",
        )
        agency.Validate(self.problems)
        e = self.accumulator.PopInvalidValue("agency_timezone")
        self.assertMatchesRegex('"America/Alviso" is not a common timezone',
                                e.FormatProblem())
        self.accumulator.AssertNoMoreExceptions()

        # bad language code
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Los_Angeles",
            id="TA",
            lang="English",
        )
        self.ValidateAndExpectInvalidValue(agency, "agency_lang")

        # bad 2-letter language code
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Los_Angeles",
            id="TA",
            lang="xx",
        )
        self.ValidateAndExpectInvalidValue(agency, "agency_lang")

        # capitalized language code is OK
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Los_Angeles",
            id="TA",
            lang="EN",
        )
        self.ExpectNoProblems(agency)

        # extra attribute in constructor is fine, only checked when loading a file
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://example.com",
            timezone="America/Los_Angeles",
            agency_mission="monorail you there",
        )
        self.ExpectNoProblems(agency)

        # extra attribute in assigned later is also fine
        agency = transitfeed.Agency(name="Test Agency",
                                    url="http://example.com",
                                    timezone="America/Los_Angeles")
        agency.agency_mission = "monorail you there"
        self.ExpectNoProblems(agency)

        # good agency_fare_url url
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://www.example.com",
            timezone="America/Los_Angeles",
            agency_fare_url="http://www.example.com/fares",
        )
        self.ExpectNoProblems(agency)

        # bad agency_fare_url url
        agency = transitfeed.Agency(
            name="Test Agency",
            url="http://www.example.com",
            timezone="America/Los_Angeles",
            agency_fare_url="www.example.com/fares",
        )
        self.ValidateAndExpectInvalidValue(agency, "agency_fare_url")

        # Multiple problems
        agency = transitfeed.Agency(
            name="Test Agency",
            url="www.example.com",
            timezone="America/West Coast",
            id="TA",
        )
        self.assertEquals(False, agency.Validate(self.problems))
        e = self.accumulator.PopException("InvalidValue")
        self.assertEqual(e.column_name, "agency_url")
        e = self.accumulator.PopException("InvalidValue")
        self.assertEqual(e.column_name, "agency_timezone")
        self.accumulator.AssertNoMoreExceptions()