Пример #1
0
def csv_to_db(path_to_csv_file):
    with open(path_to_csv_file) as file:
        csv_reader = csv.DictReader(file)
        for row in csv_reader:
            csv_row_data = {}

            # keys to lowercase, remove spaces
            row = dict(
                (k.lower().replace(' ', '_'), v) for k, v in row.items())
            keys = row.keys()

            if not row['first_name'] or not row['last_name']:
                continue

            first = row['first_name']
            last = row['last_name']
            csv_row_data['first'] = first
            csv_row_data['last'] = last
            csv_row_data['username'] = str.lower(first[0] + last)

            bonus_keys = ['address', 'num_seats', 'phone']
            for key in bonus_keys:
                if key in keys:

                    if key == 'phone':
                        csv_row_data[key] = validate_phone_number(row[key])
                    else:
                        csv_row_data[key] = row[key]

                    if key == 'address':
                        address_dict = validate_address(row[key])
                        if address_dict is not None:
                            coord_dict = get_coordinates_from_address(
                                address_dict)
                            if coord_dict is not None:
                                address_dict = {**address_dict, **coord_dict}
                            # merge the address_dict into csv_row_data
                            csv_row_data = {**csv_row_data, **address_dict}

                    if key == 'num_seats':
                        if len(row[key]) > 0:
                            csv_row_data[key] = int(row[key])
                        else:
                            csv_row_data[key] = 0
                else:
                    csv_row_data[key] = None

            if 'm/w' in keys and 'v/n' in keys:
                csv_row_data['team'] = row['m/w'] + row['v/n']
            else:
                csv_row_data['team'] = None

            log.debug('creating new user with data: {}'.format(csv_row_data))

            User.user_from_csv_row(csv_row_data)