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)