Exemple #1
0
def update_vehicle_position(agency_id):
    vehicle_position_json = client.get_vehicle_position(agency_id).json()
    if 'entity' in vehicle_position_json:
        entities = EntityCreator().create_vehicle_position(
            vehicle_position_json)
        data = {'actionType': 'APPEND', 'entities': entities}
        update_entities(f'/agencies/{agency_id}', json.dumps(data))
Exemple #2
0
def update_trip_update(agency_id):
    trip_update_json = client.get_trip_update(agency_id).json()
    post_entities_length = os.environ.get(const.POST_ENTITIES_LENGTH, 3)
    if 'entity' in trip_update_json:
        entities = EntityCreator().create_trip_update(trip_update_json)
        for splited_entities in split_list(entities,
                                           int(post_entities_length)):
            data = {'actionType': 'APPEND', 'entities': splited_entities}
            update_entities(f'/agencies/{agency_id}', json.dumps(data))
Exemple #3
0
    def test_create_calendar(self):
        with open('./tests/test_data/test_static_data/calendar.txt', 'r') as f:
            calendar_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                calendar_list, 'calendar', lambda x: x['service_id'])

            assert len(entities) == 18
            assert len(entities[0]) == 12
            assert entities[0]['id'] == 'S000001'
            assert entities[0]['type'] == 'calendar'
Exemple #4
0
    def test_create_trip(self):
        with open('./tests/test_data/test_static_data/trips.txt', 'r') as f:
            trip_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                trip_list, 'trip', lambda x: x['trip_id'])

            assert len(entities) == 596
            assert len(entities[0]) == 15
            assert entities[0]['id'] == 'T0702000001'
            assert entities[0]['type'] == 'trip'
Exemple #5
0
    def test_create_route(self):
        with open('./tests/test_data/test_static_data/routes.txt', 'r') as f:
            route_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                route_list, 'route', lambda x: x['route_id'])

            assert len(entities) == 147
            assert len(entities[0]) == 12
            assert entities[0]['id'] == 'R070200001000000'
            assert entities[0]['type'] == 'route'
Exemple #6
0
    def test_create_stop(self):
        with open('./tests/test_data/test_static_data/stops.txt', 'r') as f:
            stop_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                stop_list, 'stop', lambda x: x['stop_id'])

            assert len(entities) == 2002
            assert len(entities[0]) == 15
            assert entities[0]['id'] == 'S0702000001'
            assert entities[0]['type'] == 'stop'
Exemple #7
0
    def test_create_fare_rules(self):
        with open('./tests/test_data/test_static_data/fare_rules.txt',
                  'r') as f:
            fare_rules_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                fare_rules_list, 'fare_attribute', lambda x: f"{x['fare_id']}")

            assert len(entities) == 63454
            assert len(entities[0]) == 7
            assert entities[0]['id'] == 'F07020002100'
            assert entities[0]['type'] == 'fare_attribute'
Exemple #8
0
    def test_create_calendar_date(self):
        with open('./tests/test_data/test_static_data/calendar_dates.txt',
                  'r') as f:
            calendar_date_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                calendar_date_list, 'calendar_date',
                lambda x: f"{x['service_id']}_{x['date']}")

            assert len(entities) == 261
            assert len(entities[0]) == 5
            assert entities[0]['id'] == 'S000002_20190715'
            assert entities[0]['type'] == 'calendar_date'
Exemple #9
0
    def test_create_stop_time(self):
        with open('./tests/test_data/test_static_data/stop_times.txt',
                  'r') as f:
            stop_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                stop_list, 'stop_time',
                lambda x: f"{x['trip_id']}_{x['stop_id']}")

            assert len(entities) == 20798
            assert len(entities[0]) == 12
            assert entities[0]['id'] == 'T0702000001_S070200000100400'
            assert entities[0]['type'] == 'stop_time'
Exemple #10
0
    def test_create_pass_rules(self):
        with open('./tests/test_data/test_static_data/pass_rules.txt',
                  'r') as f:
            pass_rules_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                pass_rules_list, 'pass_rule',
                lambda x: f"{x['pass_id']}_{x['route_id']}")

            assert len(entities) == 286244
            assert len(entities[0]) == 6
            assert entities[0]['id'] == 'P070200882001_R070200001000000'
            assert entities[0]['type'] == 'pass_rule'
Exemple #11
0
    def test_create_shape(self):

        with open('./tests/test_data/test_static_data/shapes.txt', 'r') as f:
            shape_list = list(csv.DictReader(f))
            entities = EntityCreator().create_static_entity(
                shape_list, 'shape',
                lambda x: f"{x['shape_id']}_{x['shape_pt_sequence']}")

            assert len(entities) == 1572
            assert len(entities[0]) == 7
            assert entities[0]['id'] == 'SP000001_0'
            assert entities[0]['type'] == 'shape'
Exemple #12
0
 def test_create_agency(self):
     with open('./tests/test_data/test_static_data/agency.txt',
               'r') as agency_f:
         with open('./tests/test_data/test_static_data/agency_jp.txt',
                   'r') as agency_jp_f:
             agency_dict = dict(list(csv.DictReader(agency_f))[0])
             agency_jp_dict = dict(list(csv.DictReader(agency_jp_f))[0])
             agency_dict.update(agency_jp_dict)
             entities = EntityCreator().create_static_entity(
                 [agency_dict], 'agency', lambda x: x['agency_id'])
             assert len(entities) == 1
             assert len(entities[0]) == 15
             assert entities[0]['id'] == '6380001020359'
             assert entities[0]['type'] == 'agency'
Exemple #13
0
 def test_create_vehicle_position(self):
     with open('./tests/test_data/test_vehicle_position.json', 'r') as f:
         json_data = json.load(f)
         entities = EntityCreator().create_vehicle_position(json_data)
         assert len(entities) == 35
Exemple #14
0
 def test_create_trip_update(self):
     with open('./tests/test_data/test_trip_update.json', 'r') as f:
         json_data = json.load(f)
         entities = EntityCreator().create_trip_update(json_data)
         assert len(entities) == 677
Exemple #15
0
def update_entity(download_info):
    path = download_info['filename']
    agency_id = download_info['agency_id']
    entity_param_list = [
        {
            'filename': 'stops.txt',
            'type': 'stop',
            'id_rule': lambda x: x['stop_id']
        },
        {
            'filename': 'routes.txt',
            'type': 'route',
            'id_rule': lambda x: x['route_id']
        },
        {
            'filename': 'trips.txt',
            'type': 'trip',
            'id_rule': lambda x: x['trip_id']
        },
        {
            'filename': 'stop_times.txt',
            'type': 'stop_time',
            'id_rule': lambda x: f"{x['trip_id']}_{x['stop_id']}"
        },
        {
            'filename': 'calendar.txt',
            'type': 'calendar',
            'id_rule': lambda x: x['service_id']
        },
        {
            'filename': 'calendar_dates.txt',
            'type': 'calendar_date',
            'id_rule': lambda x: f"{x['service_id']}_{x['date']}"
        },
        {
            'filename': 'fare_attributes.txt',
            'type': 'fare_attribute',
            'id_rule': lambda x: f"{x['fare_id']}"
        },
        {
            'filename': 'fare_rules.txt',
            'type': 'fare_rule',
            'id_rule': lambda x: f"{x['fare_id']}_{x['route_id']}"
        },
        {
            'filename': 'pass_attributes.txt',
            'type': 'pass_attribute',
            'id_rule': lambda x: f"{x['pass_id']}"
        },
        # {
        #     'filename': 'pass_rules.txt',
        #     'type': 'calendar_date',
        #     'id_rule': lambda x: f"{x['pass_id']}_{x['route_id']}"
        # },
        # {
        #     'filename': 'shapes.txt',
        #     'type': 'shape',
        #     'id_rule': lambda x: f"{x['shape_id']}_{x['shape_pt_sequence']}"
        # }
    ]
    entity_creator = EntityCreator()

    # Update the agency entity with the agency_jp.
    agency_filename = f'output/{path}/agency.txt'
    agency_jp_filename = f'output/{path}/agency_jp.txt'
    with open(agency_filename, 'r', encoding='utf-8-sig') as agency_f:
        with open(agency_jp_filename, 'r',
                  encoding='utf-8-sig') as agency_jp_f:
            agency_dict = dict(list(csv.DictReader(agency_f))[0])
            agency_jp_list = list(csv.DictReader(agency_jp_f))
            if len(agency_jp_list) != 0:
                agency_jp_dict = dict(agency_jp_list[0])
                agency_dict.update(agency_jp_dict)
            entities = entity_creator.create_static_entity(
                [agency_dict], 'agency', lambda x: x['agency_id'])
            data = {'actionType': 'APPEND', 'entities': entities}
            orion.update_entities(f'/agencies/{agency_id}', json.dumps(data))

    # Update the other entities.
    post_entities_length = os.environ.get(const.POST_ENTITIES_LENGTH, 3)
    for entity_param in entity_param_list:
        file_path = f'output/{path}/{entity_param["filename"]}'
        if os.path.exists(file_path):
            with open(file_path, 'r', encoding='utf-8-sig') as f:
                data_list = list(csv.DictReader(f))
                entities = entity_creator.create_static_entity(
                    data_list, entity_param['type'], entity_param['id_rule'])
                # Split entities data, Because requests can't post too many entities.
                for splited_entities in split_list(entities,
                                                   int(post_entities_length)):
                    data = {
                        'actionType': 'APPEND',
                        'entities': splited_entities
                    }
                    orion.update_entities(f'/agencies/{agency_id}',
                                          json.dumps(data))