import csv def load_leave(Rota, use_live_rota): file_name="leave.csv" with open(file_name, newline="") as f: shifts = Rota.get_shift_names() workers = {} reader = csv.reader(f, delimiter=',', quotechar='"') leave = {} requests = {} site_prefs = {} order = [] n = 0 for row in reader: row_title = row[0] r = row[2:] # header, extract names if n == 1: names = r order = names for name in names: workers[name] = {} workers[name]["leave"] = [] workers[name]["requests"] = [] workers[name]["site_pref"] = [] for i in range(len(r)): try: a = order[i] except IndexError: continue lower_item = r[i].lower() if lower_item == "derriford": lower_item = "plymouth" if lower_item == "derriford twilights": lower_item = "plymouth_twilights" if row_title == "PROC site": workers[order[i]]["site_pref"] = lower_item if row_title == "Rotation": workers[order[i]]["site"] = lower_item elif row_title == "Grade": workers[order[i]]["grade"] = lower_item elif row_title == "%FTE": workers[order[i]]["fte"] = lower_item elif row_title == "NWD": workers[order[i]]["nwd"] = lower_item elif row_title == "Flexible NWD": workers[order[i]]["flexible_nwd"] = lower_item elif row_title == "End Date": workers[order[i]]["end_date"] = lower_item elif row_title == "OOP": workers[order[i]]["oop"] = lower_item elif row_title == "Group": workers[order[i]]["group"] = lower_item elif row_title == "Pair": if lower_item == "": workers[order[i]]["pair"] = 0 else: workers[order[i]]["pair"] = int(lower_item) elif n > 12: if lower_item != "": # This may be easier to do as a dict if lower_item in shifts: workers[order[i]]["requests"].append((row[0], lower_item)) else: workers[order[i]]["leave"].append((row[0], lower_item)) n = n + 1 return workers #load_leave()