-
Notifications
You must be signed in to change notification settings - Fork 0
/
remove_dormant_users.py
107 lines (84 loc) · 3.43 KB
/
remove_dormant_users.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
import configparser
import tableauserverclient as TSC
import csv
import pandas as pd
import objectpath
import re
from datetime import date, datetime, timezone
from dateutil.relativedelta import relativedelta
# Rest of the code ...
import configparser
import tableauserverclient as TSC
import csv
import pandas as pd
import objectpath
import re
from datetime import date, datetime, timezone
from dateutil.relativedelta import relativedelta
timelookback = date.today() + relativedelta(months=-3)
config = configparser.ConfigParser()
config.read('config.ini')
cred = config['config']
url, token_name, token = cred["url"], cred["token_name"], cred["token"]
tableau_auth = TSC.PersonalAccessTokenAuth(token_name, token, '')
server = TSC.Server(url, use_server_version=True)
user_list = []
data_list = []
result_list = []
with server.auth.sign_in(tableau_auth):
request_options = TSC.RequestOptions(pagesize=1000)
users = TSC.Pager(server.users, request_options)
for user in users:
data_list.append({
'username': user.name,
'last_login': user.last_login,
'role': user.site_role
})
date_time = str(user.last_login)
match = re.search(r'\d{4}-\d{2}-\d{2}', date_time)
xxx = str(user.last_login)
if match:
date = datetime.strptime(match.group(), '%Y-%m-%d').date()
else:
date = None
#if (date and user.site_role == 'Viewer' and date < timelookback) or (user.site_role == 'Viewer' and date == None):
if user.site_role == 'Viewer' and date == None:
result_list.append({
'username': user.name,
'last_login': user.last_login,
'role': user.site_role,
'user_id': user.external_auth_user_id,
'id': user.id
})
user_list.append(user.id)
df = pd.DataFrame(data_list, columns=['username', 'last_login', 'role'])
resultdataframe = pd.DataFrame(result_list, columns=['username', 'last_login', 'role', 'user_id', 'id'])
resultdataframe.to_csv('dormant_user_details.csv')
request_options = TSC.RequestOptions(pagesize=1000)
groups = TSC.Pager(server.groups, request_options)
allgroups = [(group.id, group.name) for group in groups]
# Getting group object
#all_groups, pagination_item = server.groups.get(request_options)
#for user_id in user_list:
#print(user_id)
#user_item = server.users.get_by_id(user_id)
##server.groups.remove_user(group, user_id)
#user_item = server.users.update(user_item)
#user_item.site_role = "Unlicensed"
#user_item = server.users.update(user_item)
# Getting group object
all_groups, pagination_item = server.groups.get(request_options)
for group in all_groups:
if group.name == "All Users - Grant Role on Sign-in Control":
remove_group = group
break
print(remove_group)
for user_id in user_list:
print(user_id)
user_item = server.users.get_by_id(user_id)
server.groups.remove_user(remove_group, user_id)
#user_item = server.users.update(user_item)
#user_item.site_role = "Unlicensed"
#user_item = server.users.update(user_item)
#add back to ACL_SSO_TableauCloud?
server.groups.add_user(remove_group, user_id)