Anthology script needs some reworking.
This commit is contained in:
149
Scripts/API_Tests/\
Normal file
149
Scripts/API_Tests/\
Normal file
@ -0,0 +1,149 @@
|
||||
import requests
|
||||
import pprint
|
||||
import pandas as pd
|
||||
import Apikeys
|
||||
import time
|
||||
|
||||
pp = pprint.PrettyPrinter(indent=4)
|
||||
APIKEY = Apikeys.CHUBB
|
||||
HEADERS = {
|
||||
"accept": "application/json",
|
||||
"X-Api-Key": APIKEY,
|
||||
}
|
||||
BASEURL = "https://api.northpass.com/v2/"
|
||||
IMPORTFILE = "/Users/normrasmussen/Downloads/cisa-060225.csv"
|
||||
|
||||
|
||||
def bulk_invite_and_group():
|
||||
"""
|
||||
Bulk endpoint which invites new people and adds them to a group via this structure:
|
||||
{
|
||||
"email": "me@mac.com"
|
||||
"groups": "GroupA"
|
||||
}
|
||||
|
||||
This function looks for the group in the CSV as well.
|
||||
"""
|
||||
df = pd.DataFrame()
|
||||
data = pd.read_csv(IMPORTFILE)
|
||||
groups = data["Group"].unique()
|
||||
groups = list(groups)
|
||||
print(groups)
|
||||
for group in groups:
|
||||
payload = ""
|
||||
print(group)
|
||||
tmp_group = data[data.Group == group]
|
||||
people = list(tmp_group["Email"])
|
||||
group = str(tmp_group["Group"].unique())[2:-2]
|
||||
print(f"Group --> {group} ... Amount of People --> {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 = []
|
||||
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("Running add props from func...")
|
||||
time.sleep(3)
|
||||
add_props_from_func(people, data, group)
|
||||
|
||||
|
||||
def add_props_from_func(people, data, group):
|
||||
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} from Group: {group}")
|
||||
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_uuid, learner_email, agname)
|
||||
errorlist.append(error_tupe)
|
||||
else:
|
||||
print(f"Looks like {learner_email} and {agname} was successful.")
|
||||
except (TypeError, IndexError) as e:
|
||||
error_tupe = (0, learner_email, agency_name)
|
||||
errorlist.append(error_tupe)
|
||||
print(f"{e} has occurred with {learner_email}")
|
||||
finally:
|
||||
pass
|
||||
print(f"Error list: {errorlist}")
|
||||
|
||||
|
||||
def add_props_from_csv():
|
||||
errorlist = []
|
||||
df = pd.DataFrame()
|
||||
data = pd.read_csv(IMPORTFILE)
|
||||
for dat in data.iterrows():
|
||||
agency_name = dat[1][3]
|
||||
# agency_name = "EMPLOYEE"
|
||||
learner_email = dat[1][2]
|
||||
# print(learner_email)
|
||||
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": agency_name}},
|
||||
"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_uuid, learner_email, agency_name)
|
||||
errorlist.append(error_tupe)
|
||||
else:
|
||||
print(f"Looks like {learner_email} and {agency_name} was successful.")
|
||||
except TypeError as e:
|
||||
print(e)
|
||||
pass
|
||||
finally:
|
||||
print(f"Error list: {errorlist}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
bulk_invite_and_group()
|
||||
@ -11,7 +11,7 @@ HEADERS = {
|
||||
"X-Api-Key": APIKEY,
|
||||
}
|
||||
BASEURL = "https://api.northpass.com/v2/"
|
||||
IMPORTFILE = "/Users/normrasmussen/Downloads/cisa-51325.csv"
|
||||
IMPORTFILE = "/Users/normrasmussen/Downloads/cisa-060225.csv"
|
||||
|
||||
|
||||
def bulk_invite_and_group():
|
||||
|
||||
@ -76,94 +76,6 @@ KNOWLEDGEGROUPS = [
|
||||
]
|
||||
|
||||
PERSON_IDS = [
|
||||
# THIS LIST IS OUTDATED. I WOULDN'T USE IT.
|
||||
# NOT SURE WHY I DON'T JUST DELETE IT
|
||||
"f44363ca-eff8-4cc9-b67f-d49fcbd1f20d",
|
||||
"07fd80f8-3fe8-4386-84dc-280dade1ed5f",
|
||||
"8bffdf96-3947-4f14-8041-c25e4a488b80",
|
||||
"a68a6120-067e-477d-89d5-d1da1a96d09f",
|
||||
"03c65c74-2cb8-4c65-a712-6f0f48939d8b",
|
||||
"56919b58-7be1-4c1b-912f-54887303eefb",
|
||||
"b7e51667-d26f-4851-8878-d54bb4ce8a51",
|
||||
"45fb5c92-2c3d-4c49-9f3e-949ab66b06e5",
|
||||
"ea3706d8-c312-4830-8c18-0b7dcc0285d8",
|
||||
"10edf9db-3bec-4beb-9047-44da8e3047ab",
|
||||
"3c976bca-3f07-438b-9b8c-953782236666",
|
||||
"b36d7d59-fc3c-480a-8d6a-9025e6ee4cbb",
|
||||
"5718e19a-82d4-4855-af92-45c5cf8e670f",
|
||||
"a3cdfd66-76dc-4e11-89ca-8a7fa32d2a47",
|
||||
"123ef7cc-9a29-4a70-9e2c-86567ca02ab8",
|
||||
"55498b66-5616-4f7c-a29c-9506e3d537cf",
|
||||
"781d706e-3a9f-44dd-acca-2d0570b41544",
|
||||
"58028ff3-4fb3-453b-8cc3-14c831977da4",
|
||||
"56d52d1f-7eee-4f32-ac89-7bbf6c668cdd",
|
||||
"baf1c792-3a87-4357-a93b-871eaabc0ab0",
|
||||
"00969b3e-de91-4133-aa05-421a75651508",
|
||||
"87c4fed6-166e-447a-b542-fb0403188fba",
|
||||
"c84a13e9-950f-4109-a7e4-a2412fb6889b",
|
||||
"fd6bc3ff-5416-418f-928c-4d1a5e96c651",
|
||||
"43a20d23-69bd-4307-ad60-d2832ab81b39",
|
||||
"1d579f1e-cae7-4866-9669-19074dfe8793",
|
||||
"7723fe1b-bd33-4b89-84fc-7218303e2bad",
|
||||
"3a8a77c0-eb96-4148-bdb8-6854c4b55129",
|
||||
"f8410b69-f5e7-4fbe-b89c-a405173570ac",
|
||||
"82adc395-7141-4de2-9b5f-a9c128bdd00f",
|
||||
"8522f536-b77a-4c4b-8025-d6a10410f20a",
|
||||
"eb857569-7fde-47f0-b404-db1a3ace1a19",
|
||||
"daf7691c-5391-4f79-9da6-3ec383f955f0",
|
||||
"242df255-14d0-41b8-ad57-afa4e788bdcf",
|
||||
"1d8ffc86-80f5-4d42-8d3f-c705ee2e1482",
|
||||
"23da9e58-b7fc-40cc-bacb-5ec98b9da3df",
|
||||
"f4da7725-9c24-4d63-ba9b-fd1962f1fd4e",
|
||||
"e6954ff8-2fcb-4044-bc8f-423de5b0911d",
|
||||
"f7ec7cf5-bf70-4af6-b4bb-09891362df3f",
|
||||
"d0648191-211e-4800-8526-91b2e8019b49",
|
||||
"e4c08d0e-df51-432a-bc6a-648e0cfcb31f",
|
||||
"415515be-c141-4002-83b1-6a6466507278",
|
||||
"998508ee-fc6e-4770-a7b7-19b34eab3f0b",
|
||||
"d790b773-2ceb-4cc7-8011-05d1f3a83b1f",
|
||||
"33921abd-474a-469b-a114-a8f5bfec8a1a",
|
||||
"4b7f75e4-d708-45d6-82e8-17e6ab98ba69",
|
||||
"07f30e75-5a77-4b29-897b-caf9833b526b",
|
||||
"303fccc3-cf87-4890-987a-4c246514a4cb",
|
||||
"e0c85f8e-e03d-43b0-94dc-1aaf573a09b0",
|
||||
"2197fdea-28c7-40f2-80d3-067617511c7f",
|
||||
"cd844391-f786-4ea1-bccb-80b1b3a88eba",
|
||||
"9206f9d4-6a43-4418-bfa4-fdc2e80cb601",
|
||||
"222f8edc-cdca-4638-b93b-57b62cca9bc9",
|
||||
"2ee1c1d9-d332-49c0-b186-50dbdffcc5da",
|
||||
"a30b533d-c1b6-44ce-a67f-31a1f20a2bf6",
|
||||
"603be042-5434-4482-a1a5-ba3f4f351b0b",
|
||||
"53a70521-9bab-4177-9ec7-21d38ec52da3",
|
||||
"8aa5d835-2a94-437e-9482-8cefbc7f73c5",
|
||||
"5f8c5f02-722c-46a6-b6cd-7fc991ba91fe",
|
||||
"9a69f913-d065-4bd1-8c8f-306b99253077",
|
||||
"6eeacf18-15c7-46c4-98c9-e4cc38d4d927",
|
||||
"f8e2668e-da42-426d-bfd7-7302958acaa8",
|
||||
"575ba093-7bf8-4702-a46d-27a3783310ea",
|
||||
"f6f2f233-24db-4541-ab55-813c547b3132",
|
||||
"05e5d881-3896-4ba1-9a78-7eac2518d89c",
|
||||
"3d73474f-5b7e-443a-9a9e-be33333d4a82",
|
||||
"c2bae366-64c9-4bd0-a7d1-251971b65c61",
|
||||
"32db9bd3-30aa-4b7f-add3-27adc42db1be",
|
||||
"01514376-77b2-4432-8ee4-6f303969318d",
|
||||
"3f3e16ac-28da-4d5d-803a-97f3bc4cda8f",
|
||||
"d56bbe1d-2d58-4fea-a84e-3eab4d30f665",
|
||||
"044fb66b-2232-415d-bc47-1c309419ff4a",
|
||||
"f528c291-d2e6-4fd3-9253-24fd9a2a04b3",
|
||||
"117f2aaf-30bb-4b92-b9b2-42a8ae0d72e9",
|
||||
"d334a708-4512-4550-ac1e-0d0b1d4020b9",
|
||||
"ee18a795-4c0e-4e3a-accf-9018035a0195",
|
||||
"5acff021-3b6e-4313-a07c-6a000791a093",
|
||||
"71ce9d84-ebd2-4a4c-a074-78ec9070fd22",
|
||||
"38a5c677-4443-4d84-8e2d-3cdae3aa0648",
|
||||
"cff1bfd8-ebbf-4f63-9b9b-95ffea97fbbc",
|
||||
"cfedb93c-e5f9-48d8-9759-bbfed6b80c36",
|
||||
"c2a40abd-ccc2-47af-86a0-2fdd616e5612",
|
||||
"5b12d62b-47f1-461b-88c7-022f50430e77",
|
||||
"a83219ba-1124-4dae-a0f1-73ec6e06bf0a",
|
||||
"9367ee67-05e5-4663-a394-2cd3e91655e3",
|
||||
"0633bb08-c971-4fd2-9849-99b20ae1a25c",
|
||||
]
|
||||
|
||||
APIKEY = Apikeys.ANTHOLOGY
|
||||
@ -195,8 +107,11 @@ def grab_ppl_ids(rowdict):
|
||||
nextlink = resp["links"]
|
||||
|
||||
for data in resp["data"]:
|
||||
person = data["id"]
|
||||
person_list.append(person)
|
||||
if data["attributes"]["registration_status"] == "activated":
|
||||
person = data["id"]
|
||||
person_list.append(person)
|
||||
else:
|
||||
pass
|
||||
|
||||
if "next" not in nextlink:
|
||||
break
|
||||
@ -208,6 +123,8 @@ def grab_ppl_ids(rowdict):
|
||||
cprint(f"Person list for knowledgestate.edu has {len(person_list)} people.", 'blue')
|
||||
cprint(f"Skipping the bulk function.", 'yellow')
|
||||
|
||||
def add_group_to_people(person_list):
|
||||
pass
|
||||
|
||||
def bulk_remove_and_enroll(person_list, group_list):
|
||||
cprint("Moving people and groups into bulk function.", 'green')
|
||||
@ -229,9 +146,8 @@ def bulk_remove_and_enroll(person_list, group_list):
|
||||
del_payload_var = {"id": group["id"], "type": "membership-groups"}
|
||||
del_group_list.append(del_payload_var)
|
||||
del_payload_base = {"data": del_group_list}
|
||||
print(del_payload_base)
|
||||
if not del_payload_base["data"]:
|
||||
print("notthing in del_payload_base")
|
||||
print("nothing in del_payload_base")
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user