示例#1
0
def execute_pipeline():
    """
    Executes and calls all necessary functions to run the program.
    :return:
    """
    api_key = get_api_key()

    # create datastore
    ds = DataStore()

    # read csv files
    ds.read_practices_from_csv_file("data/practices.csv")
    ds.read_students_from_csv_file("data/students.csv")

    # # create address combination file
    ds.create_address_csv_file()

    # fetch distance and duration from Google API
    GoogleAPI(api_key=api_key).fetch_distances_from_api('data/addresses.csv')

    # create all weight combination file
    weight_df = weight_combination.create_all_weight_combinations(ds)

    # extract best possible weight combinations
    weight_combination.extract_best_weights_students(ds, weight_df)
class DataStoreTests(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(DataStoreTests, self).__init__(*args, **kwargs)
        self.ds = DataStore()

    def test_read_practices_from_csv_file(self):
        # read practices test file
        self.ds.read_practices_from_csv_file("data/test_data/practices.csv")

        # extract addresses
        address1 = self.ds.df_practices.iloc[0]['address']
        address2 = self.ds.df_practices.iloc[1]['address']

        # check if they are correct
        self.assertEqual(address1,
                         'Rhaban-Fröhlich-Straße 11, 60433 Frankfurt am Main')
        self.assertEqual(address2,
                         'Kurmainzer Straße 160, 65936 Frankfurt am Main')

    def test_read_students_from_csv_file(self):
        # read students test file
        self.ds.read_students_from_csv_file("data/test_data/students.csv")

        # extract addresses
        address1 = self.ds.df_students.iloc[0]['address']
        address2 = self.ds.df_students.iloc[1]['address']

        # check if they are correct
        self.assertEqual(address1, 'Am Waldacker 21c, 60388 Frankfurt am Main')
        self.assertEqual(address2, 'Storchgasse 2, 65929 Frankfurt am Main')

    def test_extract_addresses(self):
        self.ds.read_students_from_csv_file("data/test_data/students.csv")
        self.ds.read_practices_from_csv_file("data/test_data/practices.csv")

        bike_list = self.ds.extract_addresses(self.ds.get_students(),
                                              self.ds.get_practices(),
                                              is_bike=True)
        car_list = self.ds.extract_addresses(self.ds.get_students(),
                                             self.ds.get_practices(),
                                             is_bike=False)

        # the main address of student against practice address 0
        self.assertEqual(bike_list[0], [
            'Am Waldacker 21c, 60388 Frankfurt am Main',
            'Rhaban-Fröhlich-Straße 11, 60433 Frankfurt am Main', 0
        ])

        self.assertEqual(bike_list[1], [
            'Pforzheimer Straße 15, '
            '60329 Frankfurt am Main', 'Rhaban-Fröhlich-Straße 11, '
            '60433 Frankfurt am Main', 0
        ])

        self.assertEqual(len(car_list), 0)
class StudentPracticePairTests(unittest.TestCase):
    def __init__(self, *args, **kwargs):
        super(StudentPracticePairTests, self).__init__(*args, **kwargs)
        self.ds = DataStore()
        self.ds.read_students_from_csv_file("data/test_data/students.csv")
        self.ds.read_practices_from_csv_file("data/test_data/practices.csv")
        self.pair = StudentPracticePair(
            self.ds.df_students.loc['S001'],
            self.ds.df_practices.loc['P001'],
            address_path="data/test_data/addresses.csv")

    def test_fetch_travel_duration(self):
        dur = self.pair._fetch_travel_duration(self.pair.student['address'],
                                               has_car=0)
        self.assertEqual(dur, 2207)

    def test_fetch_durations_for_all_addresses(self):
        self.assertEqual(len(self.pair.durations.keys()), 3)
        self.assertEqual(self.pair.durations['main_duration0'], 2207)

    def test_find_intersecting_specialities(self):
        spec = self.pair.find_intersecting_specialities()
        self.assertEqual(spec[0], 'notfallmedizin')

    def test_has_children(self):
        has_children = self.pair.has_children()
        self.assertEqual(has_children,
                         self.ds.df_students.loc['S001']['hasChildren'])

    def test_get_student_address(self):
        pair = StudentPracticePair(self.ds.df_students.loc['S001'],
                                   self.ds.df_practices.loc['P001'],
                                   address_path="data/test_data/addresses.csv")
        self.assertEqual(pair.get_student_address(),
                         "Im Wörth 8, 60433 Frankfurt am Main")

    def test_get_practice_address(self):
        self.assertEqual(self.pair.get_practice_address(),
                         "Rhaban-Fröhlich-Straße 11, 60433 Frankfurt am Main")

    def test_get_fastest_transport_duration(self):
        dur = self.pair.get_fastest_transport_duration()
        self.assertEqual(dur, 116)

    def test_get_fastest_transport_mode(self):
        mode = self.pair.get_fastest_transport_mode()
        self.assertEqual(mode, "bicycle")

    def test_requires_relocation(self):
        self.assertEqual(self.pair.requires_relocation(), "Alternative 2")