| import pandas as pd |
| import numpy as np |
| import os |
| import requests |
| import sys |
| import zipfile,io |
| import time |
| import random |
| import json |
| school_name = r"sy24 BTS School List v2.csv" |
| all_school = r"sy24 title I list v2.csv" |
| df1 = pd.read_csv(all_school) |
| bts_school = pd.read_csv(school_name) |
| school_list = list(df1["school"]) |
| school_dict = set(list(df1["school"])) |
| result_df = df1.copy() |
| result_df = result_df.iloc[:,0:2] |
| sz1,sz2 = result_df.shape |
| sz3,sz4 = bts_school.shape |
| result_df["Principal"] = [0]*sz1 |
| result_df["Educator"] = [0]*sz1 |
| result_df["BTS_SchoolList"] = ["NO"]*sz1 |
|
|
| bts_school_dict = {} |
| for i in range(sz3): |
| if bts_school.iloc[i,0] not in bts_school_dict: |
| bts_school_dict[bts_school.iloc[i,0]] = set(bts_school.iloc[i,1]) |
| |
| else: |
| bts_school_dict[bts_school.iloc[i,0]].add(bts_school.iloc[i,1]) |
| """ |
| This section is for api token, survey id, datacenter info, |
| """ |
| api_token = "cnfvvtLBU93Jlk9CVJMzJHqarMZeBVP7KfSlSY3U" |
| survey_id_2023 = "SV_0JrTQmOw07819rg" |
| survey_id = "SV_0B6bHCWd9hSE1eK" |
| datacenter = "ca1" |
|
|
|
|
| def get_survey_responses(): |
| |
| url1 = "https://yul1.qualtrics.com/API/v3/surveys/{0}/export-responses".format(survey_id) |
| payload1 = { "format": "csv","useLabels":True } |
| headers1 = { |
| "Content-Type": "application/json", |
| "Accept": "application/json", |
| "X-API-TOKEN": "cnfvvtLBU93Jlk9CVJMzJHqarMZeBVP7KfSlSY3U" |
| } |
| response1 = requests.post(url1, json=payload1, headers=headers1) |
| r1_json = response1.json() |
| try: |
| progess_id = r1_json["result"]["progressId"] |
| |
| except: |
| print("error on step1") |
|
|
| time.sleep(random.random()*2+5.6) |
|
|
|
|
|
|
| |
| url2 = "https://yul1.qualtrics.com/API/v3/surveys/{0}/export-responses/{1}".format(survey_id,progess_id) |
|
|
| headers2 = { |
| "Accept": "application/json", |
| "X-API-TOKEN": "cnfvvtLBU93Jlk9CVJMzJHqarMZeBVP7KfSlSY3U" |
| } |
|
|
| response2 = requests.get(url2, headers=headers2) |
| r2_json = response2.json() |
| try: |
| file_id = r2_json["result"]["fileId"] |
| except: |
| print("error on step 2") |
|
|
| time.sleep(random.random()*3+3.14) |
|
|
|
|
| |
| |
| url3 ="https://yul1.qualtrics.com/API/v3/surveys/{0}/export-responses/{1}/file".format(survey_id,file_id) |
| headers3 = { |
| "Accept": "application/octet-stream, application/json", |
| "X-API-TOKEN": "cnfvvtLBU93Jlk9CVJMzJHqarMZeBVP7KfSlSY3U" |
| } |
|
|
| response3 = requests.get(url3, headers=headers3) |
| try: |
| df = pd.read_csv(io.BytesIO(response3.content),compression='zip', header=0, sep=',', quotechar='"') |
| df_new = df[df["Finished"]==True] |
| |
| except: |
| df = [] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| return df |
|
|
|
|
| def get_totalsize()->int: |
| sz1,_= result_df.shape |
| return sz1 |
|
|
|
|
|
|
|
|
| def checkpassword(username:str,password:str)->int: |
| if username == "admin" and password =="Checkit2024!": |
| return 1 |
| else: |
| return 0 |
|
|
|
|
| return 0 |
|
|
| def get_response_data(df,role,role_label,district_label,school_label)->dict: |
| res = {} |
| df_new = df.copy() |
| df_new = df_new[df_new[str(role_label)]==role] |
| col1 = list(df_new.columns) |
| p1_school = 0 |
| p2_school = 0 |
| |
| fd =[] |
| for i in range(len(col1)): |
| if school_label in col1[i]: |
| fd.append(i) |
| |
| p1_school = fd[0] |
| p2_school = fd[-1] |
| dstr_loc = 0 |
| for i in range(len(col1)): |
| if district_label in col1[i]: |
| dstr_loc = i |
| break |
| |
| |
| |
| |
| |
| |
| |
| sz1,_ = df_new.shape |
| for i in range(sz1): |
| temp_dstr = df_new.iloc[i,dstr_loc] |
| try: |
| temp_schl = (df_new.iloc[i,p1_school:p2_school+1].dropna())[0] |
| |
| |
| if (temp_dstr not in res) : |
| res[temp_dstr]= {temp_schl:1} |
| else: |
| if temp_schl not in res[temp_dstr]: |
| res[temp_dstr][temp_schl] = 1 |
| else: |
| res[temp_dstr][temp_schl] +=1 |
| |
| except: |
| pass |
| |
| |
|
|
|
|
| return res |
|
|
| def get_responses_check_df(df,role_label,district_label,school_label): |
| |
| |
| prn_dict = get_response_data(df,"Principal",role_label,district_label,school_label) |
| edu_dict = get_response_data(df,"Educator",role_label,district_label,school_label) |
| sz1,_ = result_df.shape |
| for i in range(sz1): |
| if "District" not in result_df.iloc[i,0]: |
| try: |
| result_df.iloc[i,2] = prn_dict["Chart School or Other"][result_df.iloc[i,1]] |
| |
| except: |
| result_df.iloc[i,2] = "NO" |
| |
| try: |
| result_df.iloc[i,3] = edu_dict["Charter School or Other"][result_df.iloc[i,1]] |
| |
| except: |
| result_df.iloc[i,3] = "NO" |
| |
| |
| |
| else: |
| |
| try: |
| result_df.iloc[i,2] = prn_dict[result_df.iloc[i,0]][result_df.iloc[i,1]] |
| |
| except: |
| result_df.iloc[i,2] = "NO" |
| |
| try: |
| result_df.iloc[i,3] = edu_dict[result_df.iloc[i,0]][result_df.iloc[i,1]] |
| except: |
| result_df.iloc[i,3] = "NO" |
| |
| |
| if (result_df.iloc[i,0] in bts_school_dict) and (result_df.iloc[i,1] in bts_school_dict[result_df.iloc[i,0]]): |
| result_df.iloc[i,4] = "YES" |
| else: |
| result_df.iloc[i,4] = "NO" |
| |
| |
| |
| |
| |
| |
| |
|
|
| return result_df |
|
|
|
|
| def get_responses_check_df_v2(): |
| |
| return |
|
|
|
|
|
|
|
|
|
|
|
|
| def get_dict_from_str(str1:str)->dict: |
|
|
| return json.unload(str1) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|