- Notifications
You must be signed in to change notification settings - Fork 196
/
Copy pathdownload_tile.py
93 lines (75 loc) · 2.59 KB
/
download_tile.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
importsys
importtime
importlooker_sdk
fromlooker_sdkimportmodels40asmodels
fromlooker_sdk.rtlimporttransport
classMyTransportOptions(transport.PTransportSettings): timeout=300
sdk=looker_sdk.init40("../../looker.ini")
defget_dashboard(title: str):
"""Get a dashboard by title"""
dashboards=sdk.search_dashboards(title=title)
ifnotdashboards:
print(f"dashboard {title} was not found")
returnNone
returndashboards[0]
defget_tile(dash: models.Dashboard, title: str):
"""Find a dashboard tile by title"""
title=title.lower()
assertdash.dashboard_elements
found=None
fortileindash.dashboard_elements:
asserttile.title
iftile.title.lower() ==title:
found=tile
break
else:
print(f"tile {title} of dashboard {dash.title} was not found")
returnfound
defdownload_tile(tile: models.DashboardElement, format: str="png"):
"""Download the dashboard tile in the specified format"""
ifnottile.query_id:
print(f"tile {tile.title} has no query_id")
returnNone
task=sdk.create_query_render_task(
query_id=tile.query_id, result_format=format, width=500, height=500
)
ifnottaskornottask.id:
print(f"Could not create a render task for {tile.title}")
returnNone
# poll the render task until it completes
elapsed=0.0
delay=0.5# wait .5 seconds
whileTrue:
poll=sdk.render_task(task.id)
ifpoll.status=="failure":
print(poll)
print(f"Render failed for {tile.title}")
returnNone
elifpoll.status=="success":
break
time.sleep(delay)
elapsed+=delay
print(f"{elapsed} seconds elapsed")
result=sdk.render_task_results(
task.id,
# wait up to 300 seconds
transport_options=MyTransportOptions,
)
fileName=f"{tile.title}.{format}"
withopen(fileName, "wb") asf:
f.write(result)
returnfileName
defmain():
dashboard_title=sys.argv[1] iflen(sys.argv) >1else""
tile_title=sys.argv[2] iflen(sys.argv) >2else""
render_format=sys.argv[3] iflen(sys.argv) >3else"png"
ifnotdashboard_titleornottile_title:
print("Please provide: <dashboardTitle> <titleTitle> [<renderFormat>]")
print(' renderFormat defaults to "png"')
return
dashboard=get_dashboard(dashboard_title)
ifdashboard:
tile=get_tile(dashboard, tile_title)
iftile:
download_tile(tile, render_format)
main()