Select to view content in your preferred language

Export List of Groups, Users, Roles

1374
6
Jump to solution
12-07-2022 08:33 AM
kapalczynski
Frequent Contributor

I am looking for a python script that I can modify to export a csv file that shows all the groups, their users and their role.  Any examples out there?

1 Solution

Accepted Solutions
BlakeTerhune
MVP Regular Contributor

Once you have the group object, I think you can use the user_list() method to get a dictionary listing users and owners for the group.

 

esri_owned_groups = gis.groups.search(max_groups=1)

for group in esri_owned_groups:
    print(group)
    print(group.groupid)
    print(group.isFav)
    print(group.isInvitationOnly)
    print(group.title)
    print(group.owner)
    
    print(group.user_list())

 

View solution in original post

6 Replies
kapalczynski
Frequent Contributor

Update deleted text

 

 

 

0 Kudos
kapalczynski
Frequent Contributor

I can do this and get a list of Groups (id, isFav, isInvitationOnly, owner) for a specific user using the GROUPS Object.

But how do I get a list of users and their roles from this Group Object?

 

    esri_owned_groups = gis.groups.search('title:water', max_groups=maxResults)

    esri_group1 = esri_owned_groups[0]
    esri_group1.access


    print(esri_group1.groupid, esri_group1.isFav, esri_group1.isInvitationOnly)
    print(esri_group1.owner)
    time.localtime(esri_group1.created/1000)
  •  
0 Kudos
kapalczynski
Frequent Contributor

OK I can get a list of all the groups and a few parameters... 

I think I have to now query the GROUP itself to now get the users and their role in the GROUP?

Not sure how to bridge this to get the users and roles in the group....

 

<Group title:"2011-2016 Dill" owner:useremail@test_VDOT>
5dc183991e97414retygdf1886474ea2
False
False
2011-2016 Dill
useremail@test_VDOT

 

 

    esri_owned_groups = gis.groups.search(max_groups=1)
    
    counter = 0
    for group in esri_owned_groups:
        
        groupInfo = esri_owned_groups[counter]
        print(groupInfo)
        print(groupInfo.groupid)
        print(groupInfo.isFav)
        print(groupInfo.isInvitationOnly)
        print(groupInfo.title)
        print(groupInfo.owner)
       
        counter +=1        
    print("There are " + str(counter) + " roles")

 

 

0 Kudos
BlakeTerhune
MVP Regular Contributor

Once you have the group object, I think you can use the user_list() method to get a dictionary listing users and owners for the group.

 

esri_owned_groups = gis.groups.search(max_groups=1)

for group in esri_owned_groups:
    print(group)
    print(group.groupid)
    print(group.isFav)
    print(group.isInvitationOnly)
    print(group.title)
    print(group.owner)
    
    print(group.user_list())

 

kapalczynski
Frequent Contributor

Thanks @BlakeTerry 

 

Cheers

0 Kudos
jcarlson
MVP Esteemed Contributor

Shouldn't be too hard, though somewhat annoyingly, a group's get_members method only returns strings. Personally, I can't get user_list to return anything.

If we query the users separately, we can merge them in using pandas.

mport pandas as pd
from arcgis import GIS

gis = GIS('your url')

# groups
grps = gis.groups.search(max_groups=10000)

grp_list = []

for g in grps:
    for u in g.get_members()['users']:
        grp_list.append({'group':g.title, 'user':u})

g_df = pd.DataFrame(grp_list)

#users
users = gis.users.search(max_users=10000)

user_list = []

for u in users:
    user_list.append({'user':u.username, 'role':u.role})

u_df = pd.DataFrame(user_list)

# output merged doc
g_df.merge(u_df, on='user', how='left').to_csv('group_users.csv')

The resulting CSV will list every unique group/user combination, complete with their role.

- Josh Carlson
Kendall County GIS