From dc291b67f3ecdb147fc363d5b5467db81f63c101 Mon Sep 17 00:00:00 2001 From: Norm Rasmussen Date: Thu, 27 Jun 2024 16:12:43 -0400 Subject: [PATCH] Chubb script for adding learners and add props. Added a state for Sandata. --- ...n_up_follow_up_states_dropdown.html.liquid | 1 + Scripts/API_Tests/bulk_invite_and_props.py | 101 +++++++++++++----- Scripts/API_Tests/tmp_pandas.py | 22 ++++ 3 files changed, 95 insertions(+), 29 deletions(-) create mode 100644 Scripts/API_Tests/tmp_pandas.py diff --git a/Custom_Templates/customer_templates/Sandata Learn/_sign_up_follow_up_states_dropdown.html.liquid b/Custom_Templates/customer_templates/Sandata Learn/_sign_up_follow_up_states_dropdown.html.liquid index 8209bba3..0ca89139 100644 --- a/Custom_Templates/customer_templates/Sandata Learn/_sign_up_follow_up_states_dropdown.html.liquid +++ b/Custom_Templates/customer_templates/Sandata Learn/_sign_up_follow_up_states_dropdown.html.liquid @@ -16,6 +16,7 @@ + diff --git a/Scripts/API_Tests/bulk_invite_and_props.py b/Scripts/API_Tests/bulk_invite_and_props.py index 19c3ff29..aca60c68 100644 --- a/Scripts/API_Tests/bulk_invite_and_props.py +++ b/Scripts/API_Tests/bulk_invite_and_props.py @@ -4,6 +4,7 @@ import pprint import csv import pandas as pd import Apikeys +import time pp = pprint.PrettyPrinter(indent=4) APIKEY = Apikeys.CHUBB @@ -12,7 +13,7 @@ HEADERS = { "X-Api-Key": APIKEY, } BASEURL = "https://api.northpass.com/v2/" -IMPORTFILE = "/Users/normrasmussen/Downloads/chubb.csv" +IMPORTFILE = "/Users/normrasmussen/Downloads/chubb-cisa-624.csv" def bulk_invite_and_group(): @@ -29,39 +30,82 @@ def bulk_invite_and_group(): data = pd.read_csv(IMPORTFILE) groups = data["Group"].unique() groups = list(groups) - for group in groups: - payload = "" - tmp_group = data[data.Group == group] - people = list(tmp_group["Email"]) - group = str(tmp_group["Group"].unique())[2:-2] - # print(f"Group --> {group} & Email Length --> {len(people)}") - url = f"{BASEURL}bulk/people" - if len(people) > 1500: - for chunk in range(0, len(people), 1500): - i = chunk + try: + for group in groups: + payload = "" + tmp_group = data[data.Group == group] + people = list(tmp_group["Email"]) + group = str(tmp_group["Group"].unique())[2:-2] + print(f"Group --> {group} & Email Length --> {len(people)}") + url = f"{BASEURL}bulk/people" + if len(people) > 1500: + for chunk in range(0, len(people), 1500): + i = chunk + payload_1 = [] + i_to_add = people[i : i + 1500] + for person in i_to_add: + miniload = {"email": person, "groups": group} + payload_1.append(miniload) + print(f"The long length {group} payload has {len(payload_1)}") + payload = {"data": {"attributes": {"people": payload_1}}} + response = requests.post(url, headers=HEADERS, json=payload) + print(f"Completed. Status code is {response.status_code}") + else: payload_1 = [] - i_to_add = people[i : i + 1500] - for person in i_to_add: + for person in people: miniload = {"email": person, "groups": group} payload_1.append(miniload) - print(f"The long length {group} payload has {len(payload_1)}") + # print(f"The {group} payload has {len(payload_1)}") payload = {"data": {"attributes": {"people": payload_1}}} response = requests.post(url, headers=HEADERS, json=payload) print(f"Completed. Status code is {response.status_code}") - else: - payload_1 = [] - for person in people: - miniload = {"email": person, "groups": group} - payload_1.append(miniload) - print(f"The {group} payload has {len(payload_1)}") - payload = {"data": {"attributes": {"people": payload_1}}} - response = requests.post(url, headers=HEADERS, json=payload) - print(f"Completed. Status code is {response.status_code}") - print(response.text) + print(response.text) + except: + pass + finally: + print("Running add props from func...") + time.sleep(3) + add_props_from_func(people, data) - # add_props() -def add_props(): +def add_props_from_func(people, data): + errorlist = [] + for learner_email in people: + agency_name = data.loc[data["Email"] == learner_email, "AgencyName"] + agname = str(agency_name.values)[2:-2] + print(f"Learner: {learner_email} --> Agency: {agname}") + ppl_search = f"{BASEURL}people?filter[email][eq]={learner_email}" + ppl_response = requests.get(ppl_search, headers=HEADERS) + try: + ppl_data = ppl_response.json() + nextlink = ppl_data["links"] + learner_uuid = ppl_data["data"][0]["id"] + + # Now update the props + prop_url = f"{BASEURL}properties/people/bulk" + payload = { + "data": [ + { + "attributes": {"properties": {"agency_name": agname }}, + "id": learner_uuid, + "type": "person_properties", + } + ] + } + propresponse = requests.post(prop_url, json=payload, headers=HEADERS) + print(propresponse.status_code) + if propresponse.status_code != 200: + error_tupe = (learner_uud, learner_email, agency_name) + errorlist.append(error_tupe) + else: + print(f"Looks like {learner_email} and {agency_name} was successful.") + except TypeError as e: + pass + finally: + print(f"Error list: {errorlist}") + + +def add_props_from_csv(): errorlist = [] df = pd.DataFrame() data = pd.read_csv(IMPORTFILE) @@ -82,7 +126,7 @@ def add_props(): payload = { "data": [ { - "attributes": {"properties": {"agency_name": agency_name }}, + "attributes": {"properties": {"agency_name": agency_name}}, "id": learner_uuid, "type": "person_properties", } @@ -102,5 +146,4 @@ def add_props(): if __name__ == "__main__": - add_props() -#bulk_invite_and_group() + bulk_invite_and_group() diff --git a/Scripts/API_Tests/tmp_pandas.py b/Scripts/API_Tests/tmp_pandas.py new file mode 100644 index 00000000..60cd9dce --- /dev/null +++ b/Scripts/API_Tests/tmp_pandas.py @@ -0,0 +1,22 @@ +import requests +import json +import pprint +import csv +import pandas as pd + +IMPORTFILE = "/Users/normrasmussen/Downloads/chubb-old.csv" + +data = pd.read_csv(IMPORTFILE) +groups = data["Group"].unique() +print(groups) +groups = list(groups) +for group in groups: + payload = "" + tmp_group = data[data.Group == group] + people = list(tmp_group["Email"]) + group = str(tmp_group["Group"].unique())[2:-2] + for learner_email in people: + agency_name = data.loc[data['Email'] == learner_email, 'AgencyName'] + agname = str(agency_name.values)[2:-2] + print(agname) + # ppl_search = f"{BASEURL}people?filter[email][eq]={learner_email}"