|
| 1 | +from arcgis.gis import GIS |
| 2 | +import datetime |
| 3 | + |
| 4 | +"""accounts to keep from user/groups/items deletion""" |
| 5 | +ignore_accounts = ['andrew', 'andrew.chapkowski', 'dvitale', 'david.vitale', |
| 6 | + 'atma.mani', 'john.yaist', 'bill.major', 'YJiang', |
| 7 | + 'rohit.singh', 'rohitgeo', 'gbochenek_python', |
| 8 | + 'system_publisher', 'admin', 'portaladmin', |
| 9 | + 'Demo_User', 'First_User', 'Second_User', |
| 10 | + 'api_data_owner', 'arcgis_python', 'temp_execution'] |
| 11 | + |
| 12 | +"""accounts that you want to delete groups and items, but keep user""" |
| 13 | +target_accounts = ['arcgis_python'] |
| 14 | + |
| 15 | +"""create GIS connection via admin credentials""" |
| 16 | +# gis = GIS(profile='your_entp_admin_profile', verify_cert=False) |
| 17 | +gis = GIS("https://pythonapi.playground.esri.com/portal","temp_execution", "temp_execution123") |
| 18 | + |
| 19 | + |
| 20 | +def delete_depending_items(dependent_item): |
| 21 | + """deletes the item's depending items, and then the item""" |
| 22 | + depending_items = dependent_item.dependent_to() |
| 23 | + if depending_items['list']: |
| 24 | + for item in depending_items['list']: |
| 25 | + delete_depending_items(item) |
| 26 | + if dependent_item.protected: |
| 27 | + dependent_item.protect(False) |
| 28 | + try: |
| 29 | + print("=== deleting the item: %s" % dependent_item.homepage) |
| 30 | + dependent_item.delete() |
| 31 | + except: |
| 32 | + print("=== could not delete non-dependent item %s" % dependent_item.homepage) |
| 33 | + |
| 34 | + |
| 35 | +def delete_items(user): |
| 36 | + """deletes the user items""" |
| 37 | + folders = [None] + user.folders |
| 38 | + for folder in folders: |
| 39 | + print("=== deleting inside folder: %s" % folder) |
| 40 | + for item in user.items(folder=folder, max_items=255): |
| 41 | + delete_depending_items(item) |
| 42 | + print("=== finished deleting items owned by " + user.username) |
| 43 | + |
| 44 | + |
| 45 | +def delete_groups(user): |
| 46 | + """deletes the user groups, and removes user from groups where user is a member of""" |
| 47 | + groups_for_deletion = gis.groups.get('query=owner:' + user.username) |
| 48 | + if groups_for_deletion is not None: |
| 49 | + for group in groups_for_deletion: |
| 50 | + try: |
| 51 | + print("=== deleting group %s" % group.groupid) |
| 52 | + group.delete() |
| 53 | + except: |
| 54 | + print("=== could not delete group %s" % group.groupid) |
| 55 | + |
| 56 | + for grp in user.groups: |
| 57 | + print("=== removing from group: %s" % grp.id) |
| 58 | + if grp.owner != user.username: |
| 59 | + try: |
| 60 | + grp.remove_users([user.username]) |
| 61 | + except: |
| 62 | + print("=== User cannot be removed from group: %s" % grp.id) |
| 63 | + print("=== finished deleting groups owned by " + user.username) |
| 64 | + |
| 65 | + |
| 66 | +def delete_for_users(): |
| 67 | + """deletes items and groups for users in target_accounts, and ignore others""" |
| 68 | + for user in gis.users.search(): |
| 69 | + if user.username not in ignore_accounts and not user.username.startswith("esri_"): |
| 70 | + print("-*-*-*-*-*-*-Delete groups & items & user for %s -*-*-*-*-*-" % user.username) |
| 71 | + delete_items(user) |
| 72 | + delete_groups(user) |
| 73 | + try: |
| 74 | + user.delete() |
| 75 | + except: |
| 76 | + print("could not delete user %s" % user.username) |
| 77 | + |
| 78 | + elif user.username in target_accounts: |
| 79 | + print("-*-*-*-*-*-*-Delete groups & items for %s -*-*-*-*-*-*-*-*-" % user.username) |
| 80 | + delete_items(user) |
| 81 | + delete_groups(user) |
| 82 | + |
| 83 | + else: |
| 84 | + print("-*-*-*-*-*-*-*-*-No Delete for %s -*-*-*-*-*-*-*-*-*-*-" % user.username) |
0 commit comments