Hello - I've been working on writing some scripts to help clean up our AGOL membership.
This community has been great - I've been using Richard Stokes question (and notebook) to help get started: https://community.esri.com/message/713234-batch-deleting-users-based-on-a-role
I'm running into some problems deleting a list of around 140 users based on a CSV file (our GIS group came up with a list of criteria and created and exported this list of usernames from AdminTools). It's a single column CSV with just usernames (the column heading is "Username").
As I understand it, I need get each user account, release their licenses, delete their content, and then delete the member.
I seem to be doing something very basic incorrectly in my initial loop through the list of usernames to get each user account from AGOL.
#Import modules
from arcgis.gis import GIS
import csv#Declare GIS
gis = GIS("https://claremont.maps.arcgis.com", "adminName", "psswrd")#Make list of users to delete
userDelete = []with open(r"4_22_2019InactiveUsers2.csv") as f_input:
csv_input = csv.DictReader(f_input)
for row in csv_input:
users = row[gis.users.search("username:Username")]
userDelete.append(users)
---------------------------------------------------------------------------TypeError Traceback (most recent call last)<ipython-input-28-d415de218329> in <module> 2 csv_input = csv.DictReader(f_input) 3 for row in csv_input:----> 4 users = row[gis.users.search("username:Username")] 5 userDelete.append(users) 6 TypeError: unhashable type: 'list'
Any suggestions appreciated - I'm new Thank you!
The following works for me to create the list of users that need to be deleted from a csv of their usernames in the first column.
with open(csvPath) as f_input:
csv_input = csv.reader(f_input, delimiter=",")
for row in csv_input:
users = gis.users.search("username:{}".format(row[0]))
if (len(users)>0): # only append if there are search results
userDelete.append(users[0])
Thanks - this worked very well!