@@ -10,7 +10,8 @@ def main():
10
10
parser .add_argument ('--server' , '-s' , required = True , help = 'Tableau server address' )
11
11
parser .add_argument ('--username' , '-u' , required = True , help = 'username to sign into server' )
12
12
parser .add_argument ('--password' , '-p' , required = False , help = 'password to sign into server' )
13
- parser .add_argument ('--mode' , '-m' , required = False , choices = ['enable' , 'disable' ],
13
+ # TODO: for workbook, only disable and enable
14
+ parser .add_argument ('--mode' , '-m' , required = False , choices = ['disable' , 'enable' , 'enable_all' , 'enable_selective' ],
14
15
help = 'enable/disable materialized views for sites/workbooks' )
15
16
parser .add_argument ('--status' , '-st' , required = False , action = 'store_true' ,
16
17
help = 'show materialized views enabled sites/workbooks' )
@@ -25,6 +26,8 @@ def main():
25
26
parser .add_argument ('--name-list' , '-nl' , required = False , help = 'path to a list of workbook names' )
26
27
parser .add_argument ('--project-name' , '-pn' , required = False , help = 'name of the project' )
27
28
parser .add_argument ('--project-path' , '-pp' , required = False , help = "path of the project" )
29
+ parser .add_argument ('--materialize-now' , '-mn' , required = False , action = 'store_true' ,
30
+ help = 'create materialized views for workbooks immediately' )
28
31
29
32
args = parser .parse_args ()
30
33
@@ -38,32 +41,32 @@ def main():
38
41
39
42
# site content url is the TSC term for site id
40
43
site_content_url = args .site_id if args .site_id is not None else ""
41
- enable_materialized_views = args .mode == "enable"
42
44
43
- if (args .type is None ) != (args .mode is None ):
44
- print ("Use '--type <content type> --mode <enable/disable>' to update materialized views settings." )
45
+ if not assert_options_valid (args ):
45
46
return
46
47
48
+ materialized_views_config = create_materialized_views_config (args )
49
+
47
50
# enable/disable materialized views for site
48
51
if args .type == 'site' :
49
- if not update_site (args , enable_materialized_views , password , site_content_url ):
52
+ if not update_site (args , password , site_content_url ):
50
53
return
51
54
52
55
# enable/disable materialized views for workbook
53
56
# works only when the site the workbooks belong to are enabled too
54
57
elif args .type == 'workbook' :
55
- if not update_workbook (args , enable_materialized_views , password , site_content_url ):
58
+ if not update_workbook (args , materialized_views_config , password , site_content_url ):
56
59
return
57
60
58
61
# enable/disable materialized views for project by project name
59
62
# will show possible projects when project name is not unique
60
63
elif args .type == 'project_name' :
61
- if not update_project_by_name (args , enable_materialized_views , password , site_content_url ):
64
+ if not update_project_by_name (args , materialized_views_config , password , site_content_url ):
62
65
return
63
66
64
- # enable/disable materialized views for proejct by project path, for example: project1/project2
67
+ # enable/disable materialized views for project by project path, for example: project1/project2
65
68
elif args .type == 'project_path' :
66
- if not update_project_by_path (args , enable_materialized_views , password , site_content_url ):
69
+ if not update_project_by_path (args , materialized_views_config , password , site_content_url ):
67
70
return
68
71
69
72
# show enabled sites and workbooks
@@ -108,7 +111,7 @@ def show_materialized_views_status(args, password, site_content_url):
108
111
# only server admins can get all the sites in the server
109
112
# other users can only get the site they are in
110
113
for site in TSC .Pager (server .sites ):
111
- if site .materialized_views_enabled :
114
+ if site .materialized_views_mode != "disable" :
112
115
enabled_sites .add (site )
113
116
print ("Site name: {}" .format (site .name ))
114
117
print ('\n ' )
@@ -119,11 +122,11 @@ def show_materialized_views_status(args, password, site_content_url):
119
122
site_auth = TSC .TableauAuth (args .username , password , site .content_url )
120
123
with server .auth .sign_in (site_auth ):
121
124
for workbook in TSC .Pager (server .workbooks ):
122
- if workbook .materialized_views_enabled :
125
+ if workbook .materialized_views_config [ ' materialized_views_enabled' ] :
123
126
print ("Workbook: {} from site: {}" .format (workbook .name , site .name ))
124
127
125
128
126
- def update_project_by_path (args , enable_materialized_views , password , site_content_url ):
129
+ def update_project_by_path (args , materialized_views_mode , password , site_content_url ):
127
130
if args .project_path is None :
128
131
print ("Use --project_path <project path> to specify the path of the project" )
129
132
return False
@@ -134,11 +137,11 @@ def update_project_by_path(args, enable_materialized_views, password, site_conte
134
137
projects = [project for project in TSC .Pager (server .projects ) if project .name == project_name ]
135
138
136
139
possible_paths = get_project_paths (server , projects )
137
- update_project (possible_paths [args .project_path ], server , enable_materialized_views )
140
+ update_project (possible_paths [args .project_path ], server , materialized_views_mode )
138
141
return True
139
142
140
143
141
- def update_project_by_name (args , enable_materialized_views , password , site_content_url ):
144
+ def update_project_by_name (args , materialized_views_config , password , site_content_url ):
142
145
if args .project_name is None :
143
146
print ("Use --project-name <project name> to specify the name of the project" )
144
147
return False
@@ -156,14 +159,14 @@ def update_project_by_name(args, enable_materialized_views, password, site_conte
156
159
print ('\n ' )
157
160
return False
158
161
else :
159
- update_project (projects [0 ], server , enable_materialized_views )
162
+ update_project (projects [0 ], server , materialized_views_config )
160
163
return True
161
164
162
165
163
- def update_project (project , server , enable_materialized_views ):
166
+ def update_project (project , server , materialized_views_config ):
164
167
for workbook in TSC .Pager (server .workbooks ):
165
168
if workbook .project_id == project .id :
166
- workbook .materialized_views_enabled = enable_materialized_views
169
+ workbook .materialized_views_config = materialized_views_config
167
170
server .workbooks .update (workbook )
168
171
169
172
print ("Updated materialized views settings for project: {}" .format (project .name ))
@@ -180,7 +183,7 @@ def parse_workbook_path(file_path):
180
183
return workbook_path_mapping
181
184
182
185
183
- def update_workbook (args , enable_materialized_views , password , site_content_url ):
186
+ def update_workbook (args , materialized_views_config , password , site_content_url ):
184
187
if args .path_list is None and args .name_list is None :
185
188
print ("Use '--path-list <filename>' or '--name-list <filename>' to specify the path of a list of workbooks" )
186
189
print ('\n ' )
@@ -191,13 +194,13 @@ def update_workbook(args, enable_materialized_views, password, site_content_url)
191
194
if args .path_list is not None :
192
195
workbook_path_mapping = parse_workbook_path (args .path_list )
193
196
all_projects = {project .id : project for project in TSC .Pager (server .projects )}
194
- update_workbooks_by_paths (all_projects , enable_materialized_views , server , workbook_path_mapping )
197
+ update_workbooks_by_paths (all_projects , materialized_views_config , server , workbook_path_mapping )
195
198
elif args .name_list is not None :
196
- update_workbooks_by_names (args .name_list , server , enable_materialized_views )
199
+ update_workbooks_by_names (args .name_list , server , materialized_views_config )
197
200
return True
198
201
199
202
200
- def update_workbooks_by_paths (all_projects , enable_materialized_views , server , workbook_path_mapping ):
203
+ def update_workbooks_by_paths (all_projects , materialized_views_config , server , workbook_path_mapping ):
201
204
for workbook_name , workbook_paths in workbook_path_mapping .items ():
202
205
req_option = TSC .RequestOptions ()
203
206
req_option .filter .add (TSC .Filter (TSC .RequestOptions .Field .Name ,
@@ -207,13 +210,13 @@ def update_workbooks_by_paths(all_projects, enable_materialized_views, server, w
207
210
for workbook in workbooks :
208
211
path = find_project_path (all_projects [workbook .project_id ], all_projects , "" )
209
212
if path in workbook_paths :
210
- workbook .materialized_views_enabled = enable_materialized_views
213
+ workbook .materialized_views_config = materialized_views_config
211
214
server .workbooks .update (workbook )
212
215
print ("Updated materialized views settings for workbook: {}" .format (path + '/' + workbook .name ))
213
216
print ('\n ' )
214
217
215
218
216
- def update_workbooks_by_names (name_list , server , enable_materialized_views ):
219
+ def update_workbooks_by_names (name_list , server , materialized_views_config ):
217
220
workbook_names = open (name_list , 'r' )
218
221
for workbook_name in workbook_names :
219
222
req_option = TSC .RequestOptions ()
@@ -222,24 +225,53 @@ def update_workbooks_by_names(name_list, server, enable_materialized_views):
222
225
workbook_name .rstrip ()))
223
226
workbooks = list (TSC .Pager (server .workbooks , req_option ))
224
227
for workbook in workbooks :
225
- workbook .materialized_views_enabled = enable_materialized_views
228
+ workbook .materialized_views_config = materialized_views_config
226
229
server .workbooks .update (workbook )
227
230
print ("Updated materialized views settings for workbook: {}" .format (workbook .name ))
228
231
print ('\n ' )
229
232
230
233
231
- def update_site (args , enable_materialized_views , password , site_content_url ):
234
+ def update_site (args , password , site_content_url ):
235
+ if not assert_site_options_valid (args ):
236
+ return False
232
237
tableau_auth = TSC .TableauAuth (args .username , password , site_id = site_content_url )
233
238
server = TSC .Server (args .server , use_server_version = True )
234
239
with server .auth .sign_in (tableau_auth ):
235
240
site_to_update = server .sites .get_by_content_url (site_content_url )
236
- site_to_update .materialized_views_enabled = enable_materialized_views
241
+ site_to_update .materialized_views_mode = args . mode
237
242
238
243
server .sites .update (site_to_update )
239
244
print ("Updated materialized views settings for site: {}" .format (site_to_update .name ))
240
245
print ('\n ' )
241
246
return True
242
247
243
248
249
+ def create_materialized_views_config (args ):
250
+ # TODO: if clean up now and enable all for site is both True, then abort
251
+ materialized_views_config = dict ()
252
+ materialized_views_config ['materialized_views_enabled' ] = args .mode == "enable"
253
+ materialized_views_config ['run_materialization_now' ] = True if args .materialize_now else False
254
+ return materialized_views_config
255
+
256
+
257
+ def assert_site_options_valid (args ):
258
+ if args .materialize_now :
259
+ print ('"--materialize-now" only applies to workbook/project type' )
260
+ return False
261
+ if args .mode == 'enable' :
262
+ print ('For site type please choose from "disable", "enable_all", or "enable_selective"' )
263
+ return False
264
+ return True
265
+
266
+
267
+ def assert_options_valid (args ):
268
+ if args .type != "site" and args .mode in ("enable_all" , "enable_selective" ):
269
+ print ('"enable_all" and "enable_selective" do not apply to workbook/project type' )
270
+ return False
271
+ if (args .type is None ) != (args .mode is None ):
272
+ print ("Use '--type <content type> --mode <mode>' to update materialized views settings." )
273
+ return False
274
+ return True
275
+
244
276
if __name__ == "__main__" :
245
277
main ()
0 commit comments