Had to change Sandata's script to grab the groups first and then grab people - going with people first was taking way too long. Updated some notes, worked on Luminate's fiveserv integration.

This commit is contained in:
Norm Rasmussen
2024-05-09 17:07:47 -04:00
parent 4785ff6283
commit fa3ab13579
7 changed files with 215 additions and 17 deletions

View File

@ -11,6 +11,51 @@ APIKEY = Apikeys.SANDATA
HEADERS = {"accept": "application/json", "X-Api-Key": APIKEY}
PERSON_GROUPS = []
PPL_DELETIONS = []
GROUPS_LIST = []
def get_groups():
count = 1
while True:
url = f"{BASEURL}/groups?limit=100&page={count}"
resp = requests.get(url, headers=HEADERS)
json = resp.json()
nextlink = json["links"]
count += 1
for data in json["data"]:
group_name = data["attributes"]["name"]
members = data["attributes"]["memberships_count"]
id = data["id"]
if "ST - OH" in group_name or "ST - CA" in group_name:
pass
else:
if members > 0:
grouple = (id, group_name, members)
print(grouple)
GROUPS_LIST.append(grouple)
if "next" not in nextlink:
break
get_ppl_from_groups(GROUPS_LIST)
def get_ppl_from_groups(GROUPS_LIST):
for single_group in GROUPS_LIST:
print(single_group)
group_count = 1
while True:
group_url = f"{BASEURL}/groups/{single_group[0]}/memberships?limit=100&page={group_count}"
group_resp = requests.get(group_url, headers=HEADERS)
groupson = group_resp.json()
group_count += 1
nextlink = groupson["links"]
for data in groupson["data"]:
id = data["relationships"]["person"]["data"]["id"]
print(id)
if "next" not in nextlink:
break
def get_people():
@ -35,15 +80,30 @@ def get_people():
uuid = group["id"]
group_url = f"https://api.northpass.com/v2/groups/{uuid}"
response = requests.get(group_url, headers=HEADERS)
group_resp = response.json()
try:
group_resp = response.json()
group_name = group_resp["data"]["attributes"]["name"]
# print(email, group_name)
if "- OH" not in group_name or "- CA" not in group_name:
PPL_DELETIONS.append(id)
print(email, group_name)
group_name = group_resp["data"]["attributes"]["name"]
# print(email, group_name)
if "ST - OH" in group_name or "ST - CA" in group_name:
pass
else:
PPL_DELETIONS.append(id)
print(email, group_name)
PERSON_GROUPS.append((id, email, group_name))
PERSON_GROUPS.append((id, email, group_name))
except JSONDecodeError as e:
print(f"There was a JSON Error --> {e}")
dataerror = df.from_records(PERSON_GROUPS)
dataerror.to_csv('~/Downloads/Sandata-err-all-ppl')
print(dataerror)
print(len(PERSON_GROUPS))
datadelerr = df.from_records(PPL_DELETIONS)
datadelerr.to_csv('~/Downloads/Sandata-err-ppl-to-delete')
pass
finally:
pass
else:
PERSON_GROUPS.append((id, email, "No Group"))
@ -52,9 +112,13 @@ def get_people():
break
dataframe = df.from_records(PERSON_GROUPS)
dataframe.to_csv('~/Downloads/Sandata-all-ppl')
print(dataframe)
print(len(PERSON_GROUPS))
datadel = df.from_records(PPL_DELETIONS)
datadel.to_csv('~/Downloads/Sandata-ppl-to-delete')
# def parse_groups(id, grouplist):
# for uuid in grouplist:
@ -66,4 +130,4 @@ payload = { "payload": ["asd", "asd", "asd"] }
"""
if __name__ == "__main__":
get_people()
get_groups()

View File

@ -8,7 +8,7 @@ const apiKey = "6hUfJdAartHTHhHc0WIRZYPWe"
// Luminate Production ^
const uid = "/\?uid\=7beg87y4-fh24-4929-3rt5-24kdn87s5241";
const groupIds = [
'fbadcf2b-db4a-4342-b1a7-15fc357e6443',
'bcab9f82-4bac-4903-a054-aabae5f0a347'
]
const getAllGroups = async (num) => {