from typing import Generator, Any from random import randint import pandas as pd from .exceptions import InvalidNameOrTypeHeaderException from ..students.models import Student def check_columns(df: pd.DataFrame) -> bool: headers = set(df.keys().values) columns = ['NAZWISKO', 'IMIE', 'INDEKS', 'PESEL', 'EMAIL'] if len(headers - set(columns)) != 0: return False flag = True col_types = ['object', 'object', 'int', 'float64', 'object'] for name, col_type in zip(columns, col_types): if not str(df.dtypes[name]).startswith(col_type): flag = False break return flag def parse_csv(file, mode) -> Generator[Student, Any, None]: df = pd.read_csv(file) # if not check_columns(df): # raise InvalidNameOrTypeHeaderException students = (Student(last_name=dict(item.items())['NAZWISKO'], first_name=dict(item.items())['IMIE'], index=dict(item.items())['INDEKS'], pesel=str(int(dict(item.items())['PESEL'])) if not pd.isna(dict(item.items())['PESEL']) else None, email=dict(item.items())['EMAIL'], mode=mode) for _, item in df.iterrows()) return students