gazer 0.3.10 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile.lock +1 -1
  4. data/lib/gzr/command.rb +9 -5
  5. data/lib/gzr/commands/alert/cat.rb +2 -2
  6. data/lib/gzr/commands/alert/ls.rb +2 -2
  7. data/lib/gzr/commands/alert/notifications.rb +2 -2
  8. data/lib/gzr/commands/attribute/cat.rb +3 -3
  9. data/lib/gzr/commands/attribute/create.rb +2 -2
  10. data/lib/gzr/commands/attribute/get_group_value.rb +4 -4
  11. data/lib/gzr/commands/attribute/import.rb +3 -3
  12. data/lib/gzr/commands/attribute/ls.rb +3 -3
  13. data/lib/gzr/commands/attribute/rm.rb +4 -4
  14. data/lib/gzr/commands/attribute/set_group_value.rb +4 -4
  15. data/lib/gzr/commands/connection/dialects.rb +4 -4
  16. data/lib/gzr/commands/connection/ls.rb +2 -2
  17. data/lib/gzr/commands/connection/test.rb +2 -2
  18. data/lib/gzr/commands/dashboard/import.rb +30 -30
  19. data/lib/gzr/commands/dashboard/mv.rb +1 -1
  20. data/lib/gzr/commands/folder/cat.rb +3 -3
  21. data/lib/gzr/commands/folder/create.rb +3 -3
  22. data/lib/gzr/commands/folder/export.rb +2 -2
  23. data/lib/gzr/commands/folder/ls.rb +3 -4
  24. data/lib/gzr/commands/folder/rm.rb +3 -3
  25. data/lib/gzr/commands/folder/top.rb +4 -4
  26. data/lib/gzr/commands/folder/tree.rb +11 -11
  27. data/lib/gzr/commands/group/ls.rb +3 -3
  28. data/lib/gzr/commands/group/member_groups.rb +3 -3
  29. data/lib/gzr/commands/group/member_users.rb +3 -3
  30. data/lib/gzr/commands/look/cat.rb +1 -1
  31. data/lib/gzr/commands/look/import.rb +5 -5
  32. data/lib/gzr/commands/look/mv.rb +1 -1
  33. data/lib/gzr/commands/look/rm.rb +1 -1
  34. data/lib/gzr/commands/model/ls.rb +4 -4
  35. data/lib/gzr/commands/model/set/ls.rb +2 -2
  36. data/lib/gzr/commands/permission/ls.rb +2 -2
  37. data/lib/gzr/commands/permission/set/ls.rb +2 -2
  38. data/lib/gzr/commands/plan/cat.rb +3 -3
  39. data/lib/gzr/commands/plan/disable.rb +3 -3
  40. data/lib/gzr/commands/plan/enable.rb +3 -3
  41. data/lib/gzr/commands/plan/failures.rb +12 -7
  42. data/lib/gzr/commands/plan/import.rb +5 -5
  43. data/lib/gzr/commands/plan/ls.rb +5 -5
  44. data/lib/gzr/commands/plan/run.rb +2 -2
  45. data/lib/gzr/commands/project/branch.rb +4 -4
  46. data/lib/gzr/commands/project/ls.rb +3 -3
  47. data/lib/gzr/commands/role/cat.rb +2 -2
  48. data/lib/gzr/commands/role/group_add.rb +2 -2
  49. data/lib/gzr/commands/role/group_ls.rb +3 -3
  50. data/lib/gzr/commands/role/group_rm.rb +2 -2
  51. data/lib/gzr/commands/role/ls.rb +3 -3
  52. data/lib/gzr/commands/role/user_add.rb +2 -2
  53. data/lib/gzr/commands/role/user_ls.rb +3 -3
  54. data/lib/gzr/commands/role/user_rm.rb +2 -2
  55. data/lib/gzr/commands/user/cat.rb +5 -3
  56. data/lib/gzr/commands/user/delete.rb +2 -1
  57. data/lib/gzr/commands/user/disable.rb +2 -1
  58. data/lib/gzr/commands/user/enable.rb +2 -1
  59. data/lib/gzr/commands/user/ls.rb +22 -11
  60. data/lib/gzr/commands/user/me.rb +6 -2
  61. data/lib/gzr/commands/user.rb +2 -0
  62. data/lib/gzr/modules/alert.rb +30 -17
  63. data/lib/gzr/modules/attribute.rb +24 -22
  64. data/lib/gzr/modules/connection.rb +10 -25
  65. data/lib/gzr/modules/dashboard.rb +86 -44
  66. data/lib/gzr/modules/folder.rb +20 -28
  67. data/lib/gzr/modules/group.rb +8 -10
  68. data/lib/gzr/modules/look.rb +23 -21
  69. data/lib/gzr/modules/model/set.rb +6 -6
  70. data/lib/gzr/modules/model.rb +14 -7
  71. data/lib/gzr/modules/permission/set.rb +2 -2
  72. data/lib/gzr/modules/permission.rb +2 -4
  73. data/lib/gzr/modules/plan.rb +36 -36
  74. data/lib/gzr/modules/project.rb +26 -21
  75. data/lib/gzr/modules/role.rb +48 -36
  76. data/lib/gzr/modules/session.rb +2 -2
  77. data/lib/gzr/modules/user.rb +52 -43
  78. data/lib/gzr/version.rb +1 -1
  79. metadata +2 -2
@@ -29,9 +29,13 @@ module Gzr
29
29
  def query_dashboard(dashboard_id)
30
30
  data = nil
31
31
  begin
32
- data = @sdk.dashboard(dashboard_id)
33
- data&.dashboard_filters&.sort! { |a,b| a.row <=> b.row }
34
- data&.dashboard_layouts&.sort_by! { |v| (v.active ? 0 : 1) }
32
+ data = @sdk.dashboard(dashboard_id).to_attrs
33
+ data[:dashboard_filters]&.sort! { |a,b| a.row <=> b.row }
34
+ data[:dashboard_layouts]&.sort_by! { |v| (v[:active] ? 0 : 1) }
35
+ rescue LookerSDK::Error => e
36
+ say_error "dashboard #{dashboard_id} not found"
37
+ say_error e
38
+ raise
35
39
  rescue LookerSDK::Error => e
36
40
  say_error "Error querying dashboard(#{dashboard_id})"
37
41
  say_error e
@@ -41,15 +45,17 @@ module Gzr
41
45
  end
42
46
 
43
47
  def delete_dashboard(dash)
44
- data = nil
45
48
  begin
46
- data = @sdk.delete_dashboard(dash)
49
+ @sdk.delete_dashboard(dash)
50
+ rescue LookerSDK::Error => e
51
+ say_error "dashboard #{dash} not found"
52
+ say_error e
53
+ raise
47
54
  rescue LookerSDK::Error => e
48
55
  say_error "Error deleting dashboard(#{dash})"
49
56
  say_error e
50
57
  raise
51
58
  end
52
- data
53
59
  end
54
60
 
55
61
  def search_dashboards_by_slug(slug, folder_id=nil)
@@ -57,9 +63,9 @@ module Gzr
57
63
  begin
58
64
  req = { :slug => slug }
59
65
  req[:folder_id] = folder_id if folder_id
60
- data = @sdk.search_dashboards(req)
66
+ data = @sdk.search_dashboards(req).collect { |e| e.to_attrs }
61
67
  req[:deleted] = true
62
- data = @sdk.search_dashboards(req) if data.empty?
68
+ data = @sdk.search_dashboards(req).collect { |e| e.to_attrs } if data.empty?
63
69
  rescue LookerSDK::Error => e
64
70
  say_error "Error search_dashboards_by_slug(#{JSON.pretty_generate(req)})"
65
71
  say_error e
@@ -73,9 +79,9 @@ module Gzr
73
79
  begin
74
80
  req = { :title => title }
75
81
  req[:folder_id] = folder_id if folder_id
76
- data = @sdk.search_dashboards(req)
82
+ data = @sdk.search_dashboards(req).collect { |e| e.to_attrs }
77
83
  req[:deleted] = true
78
- data = @sdk.search_dashboards(req) if data.empty?
84
+ data = @sdk.search_dashboards(req).collect { |e| e.to_attrs } if data.empty?
79
85
  rescue LookerSDK::Error => e
80
86
  say_error "Error search_dashboards_by_title(#{JSON.pretty_generate(req)})"
81
87
  say_error e
@@ -85,11 +91,12 @@ module Gzr
85
91
  end
86
92
 
87
93
  def create_dashboard(dash)
94
+ data = nil
88
95
  begin
89
- data = @sdk.create_dashboard(dash)
96
+ data = @sdk.create_dashboard(dash).to_attrs
90
97
  say_error data.inspect if data.respond_to?(:message)
91
- data&.dashboard_filters&.sort! { |a,b| a.row <=> b.row }
92
- data&.dashboard_layouts&.sort_by! { |v| (v.active ? 0 : 1) }
98
+ data[:dashboard_filters]&.sort! { |a,b| a.row <=> b.row }
99
+ data[:dashboard_layouts]&.sort_by! { |v| (v[:active] ? 0 : 1) }
93
100
  rescue LookerSDK::Error => e
94
101
  say_error "Error creating dashboard(#{JSON.pretty_generate(dash)})"
95
102
  say_error e
@@ -99,9 +106,14 @@ module Gzr
99
106
  end
100
107
 
101
108
  def update_dashboard(dash_id,dash)
109
+ data = nil
102
110
  begin
103
- data = @sdk.update_dashboard(dash_id,dash)
104
- data&.dashboard_filters&.sort! { |a,b| a.row <=> b.row }
111
+ data = @sdk.update_dashboard(dash_id,dash).to_attrs
112
+ data[:dashboard_filters]&.sort! { |a,b| a.row <=> b.row }
113
+ rescue LookerSDK::NotFound => e
114
+ say_error "dashboard #{dash_id} not found"
115
+ say_error e
116
+ raise
105
117
  rescue LookerSDK::Error => e
106
118
  say_error "Error updating dashboard(#{dash_id},#{JSON.pretty_generate(dash)})"
107
119
  say_error e
@@ -112,139 +124,162 @@ module Gzr
112
124
 
113
125
  def create_dashboard_element(dash_elem)
114
126
  begin
115
- data = @sdk.create_dashboard_element(dash_elem)
127
+ @sdk.create_dashboard_element(dash_elem).to_attrs
116
128
  rescue LookerSDK::Error => e
117
129
  say_error "Error creating dashboard_element(#{JSON.pretty_generate(dash_elem)})"
118
130
  say_error e
119
131
  raise
120
132
  end
121
- data
122
133
  end
123
134
 
124
135
  def update_dashboard_element(id,dash_elem)
125
136
  begin
126
- data = @sdk.update_dashboard_element(id,dash_elem)
137
+ @sdk.update_dashboard_element(id,dash_elem).to_attrs
138
+ rescue LookerSDK::NotFound => e
139
+ say_error "dashboard_element #{id} not found"
140
+ say_error e
141
+ raise
127
142
  rescue LookerSDK::Error => e
128
143
  say_error "Error updating dashboard_element(#{id},#{JSON.pretty_generate(dash_elem)})"
129
144
  say_error e
130
145
  raise
131
146
  end
132
- data
133
147
  end
134
148
 
135
149
  def delete_dashboard_element(id)
136
150
  begin
137
- data = @sdk.delete_dashboard_element(id)
151
+ @sdk.delete_dashboard_element(id)
152
+ rescue LookerSDK::NotFound => e
153
+ say_error "dashboard_element #{id} not found"
154
+ say_error e
155
+ raise
138
156
  rescue LookerSDK::Error => e
139
157
  say_error "Error deleting dashboard_element(#{id})})"
140
158
  say_error e
141
159
  raise
142
160
  end
143
- data
144
161
  end
145
162
 
146
163
  def get_dashboard_layout(id)
147
164
  begin
148
- data = @sdk.dashboard_layout(id)
165
+ @sdk.dashboard_layout(id).to_attrs
166
+ rescue LookerSDK::NotFound => e
167
+ say_error "dashboard_layout #{id} not found"
168
+ say_error e
169
+ raise
149
170
  rescue LookerSDK::Error => e
150
171
  say_error "Error getting dashboard_layout(#{id})"
151
172
  say_error e
152
173
  raise
153
174
  end
154
- data
155
175
  end
156
176
 
157
177
  def create_dashboard_layout(dash_layout)
158
178
  begin
159
- data = @sdk.create_dashboard_layout(dash_layout)
179
+ @sdk.create_dashboard_layout(dash_layout).to_attrs
160
180
  rescue LookerSDK::Error => e
161
181
  say_error "Error creating dashboard_layout(#{JSON.pretty_generate(dash_layout)})"
162
182
  say_error e
163
183
  raise
164
184
  end
165
- data
166
185
  end
167
186
 
168
187
  def update_dashboard_layout(id,dash_layout)
169
188
  begin
170
- data = @sdk.update_dashboard_layout(id,dash_layout)
189
+ @sdk.update_dashboard_layout(id,dash_layout).to_attrs
190
+ rescue LookerSDK::NotFound => e
191
+ say_error "dashboard_layout #{id} not found"
192
+ say_error e
193
+ raise
171
194
  rescue LookerSDK::Error => e
172
195
  say_error "Error updating dashboard_layout(#{id},#{JSON.pretty_generate(dash_layout)})"
173
196
  say_error e
174
197
  raise
175
198
  end
176
- data
177
199
  end
178
200
 
179
201
  def delete_dashboard_layout(id)
180
202
  begin
181
- data = @sdk.delete_dashboard_layout(id)
203
+ @sdk.delete_dashboard_layout(id)
204
+ rescue LookerSDK::NotFound => e
205
+ say_error "dashboard_layout #{id} not found"
206
+ say_error e
207
+ raise
182
208
  rescue LookerSDK::Error => e
183
209
  say_error "Error deleting dashboard_layout(#{id})"
184
210
  say_error e
185
211
  raise
186
212
  end
187
- data
188
213
  end
189
214
 
190
215
  def get_all_dashboard_layout_components(id)
191
216
  begin
192
- data = @sdk.dashboard_layout_dashboard_layout_components(id)
193
- return nil if data.respond_to?(:message) && data.message == 'Not found'
217
+ @sdk.dashboard_layout_dashboard_layout_components(id).collect { |e| e.to_attrs }
218
+ rescue LookerSDK::NotFound => e
219
+ say_error "dashboard_layout #{id} not found"
220
+ say_error e
221
+ raise
194
222
  rescue LookerSDK::Error => e
195
223
  say_error "Error getting dashboard_layout_dashboard_layout_components(#{id})"
196
224
  say_error e
197
225
  raise
198
226
  end
199
- data
200
227
  end
201
228
 
202
229
  def update_dashboard_layout_component(id,component)
203
230
  begin
204
- data = @sdk.update_dashboard_layout_component(id,component)
231
+ @sdk.update_dashboard_layout_component(id,component).to_attrs
232
+ rescue LookerSDK::NotFound => e
233
+ say_error "dashboard_layout #{id} not found"
234
+ say_error e
235
+ raise
205
236
  rescue LookerSDK::Error => e
206
237
  say_error "Error updating dashboard_layout_component(#{id},#{JSON.pretty_generate(component)})"
207
238
  say_error e
208
239
  raise
209
240
  end
210
- data
211
241
  end
212
242
 
213
243
  def create_dashboard_filter(dash_filter)
214
244
  begin
215
- data = @sdk.create_dashboard_filter(dash_filter)
245
+ @sdk.create_dashboard_filter(dash_filter).to_attrs
216
246
  rescue LookerSDK::Error => e
217
247
  say_error "Error creating dashboard_filter(#{JSON.pretty_generate(dash_filter)})"
218
248
  say_error e
219
249
  raise
220
250
  end
221
- data
222
251
  end
223
252
 
224
253
  def update_dashboard_filter(id,dash_filter)
225
254
  begin
226
- data = @sdk.update_dashboard_filter(id,dash_filter)
255
+ @sdk.update_dashboard_filter(id,dash_filter).to_attrs
256
+ rescue LookerSDK::NotFound => e
257
+ say_error "dashboard_filter #{id} not found"
258
+ say_error e
259
+ raise
227
260
  rescue LookerSDK::Error => e
228
261
  say_error "Error updating dashboard_filter(#{id},#{JSON.pretty_generate(dash_filter)})"
229
262
  say_error e
230
263
  raise
231
264
  end
232
- data
233
265
  end
234
266
 
235
267
  def delete_dashboard_filter(id)
236
268
  begin
237
- data = @sdk.delete_dashboard_filter(id)
269
+ @sdk.delete_dashboard_filter(id)
270
+ rescue LookerSDK::NotFound => e
271
+ say_error "dashboard_filter #{id} not found"
272
+ say_error e
273
+ raise
238
274
  rescue LookerSDK::Error => e
239
275
  say_error "Error deleting dashboard_filter(#{id})})"
240
276
  say_error e
241
277
  raise
242
278
  end
243
- data
244
279
  end
245
280
 
246
281
  def cat_dashboard(dashboard_id)
247
- data = query_dashboard(dashboard_id).to_attrs
282
+ data = query_dashboard(dashboard_id)
248
283
  data[:dashboard_elements].each_index do |i|
249
284
  element = data[:dashboard_elements][i]
250
285
  find_vis_config_reference(element) do |vis_config|
@@ -253,12 +288,11 @@ module Gzr
253
288
  end
254
289
  end
255
290
  alerts = search_alerts(fields: 'id,dashboard_element_id', group_by: 'dashboard', all_owners: true)
256
- alerts.map!{|v| v.to_attrs}
257
291
  say_warning alerts if @options[:debug]
258
292
  data[:dashboard_elements].each do |e|
259
293
  alerts_found = alerts.select { |a| a[:dashboard_element_id] == e[:id]}
260
294
  say_warning "Found alerts #{alerts_found}" if @options[:debug]
261
- alerts_entries = alerts_found.map { |a| get_alert(a[:id]).to_attrs }
295
+ alerts_entries = alerts_found.map { |a| get_alert(a[:id]) }
262
296
  say_warning "Looked up alerts entries #{alerts_entries}" if @options[:debug]
263
297
  e[:alerts] = alerts_entries
264
298
  end
@@ -357,7 +391,11 @@ module Gzr
357
391
 
358
392
  def import_lookml_dashboard(id,folder)
359
393
  begin
360
- return @sdk.import_lookml_dashboard(id,folder)&.to_attrs
394
+ return @sdk.import_lookml_dashboard(id,folder).to_attrs
395
+ rescue LookerSDK::NotFound => e
396
+ say_error "lookml_dashboard #{id} not found"
397
+ say_error e
398
+ raise
361
399
  rescue LookerSDK::Error => e
362
400
  say_error "Error import_lookml_dashboard(#{id},#{folder})"
363
401
  say_error e
@@ -368,6 +406,10 @@ module Gzr
368
406
  def sync_lookml_dashboard(id)
369
407
  begin
370
408
  return @sdk.sync_lookml_dashboard(id, {})
409
+ rescue LookerSDK::NotFound => e
410
+ say_error "lookml_dashboard #{id} not found"
411
+ say_error e
412
+ raise
371
413
  rescue LookerSDK::Error => e
372
414
  say_error "Error sync_lookml_dashboard(#{id})"
373
415
  say_error e
@@ -1,6 +1,6 @@
1
1
  # The MIT License (MIT)
2
2
 
3
- # Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
3
+ # Copyright (c) 2023 Mike DeAngelo Google, Inc.
4
4
 
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  # this software and associated documentation files (the "Software"), to deal in
@@ -31,38 +31,35 @@ module Gzr
31
31
  end
32
32
 
33
33
  def create_folder(name, parent_id)
34
- data = nil
35
34
  begin
36
35
  req = {:name => name, :parent_id => parent_id}
37
- data = @sdk.create_folder(req)
36
+ @sdk.create_folder(req).to_attrs
38
37
  rescue LookerSDK::Error => e
39
38
  say_error "Error creating folder(#{JSON.pretty_generate(req)})"
40
39
  say_error e
41
40
  raise
42
41
  end
43
- data
44
42
  end
45
43
 
46
44
  def search_folders(name,fields=nil)
47
- data = nil
48
45
  begin
49
46
  req = {:name => name}
50
47
  req[:fields] = fields if fields
51
- data = @sdk.search_folders(req)
48
+ @sdk.search_folders(req).collect { |e| e.to_attrs }
49
+ rescue LookerSDK::NotFound => e
50
+ []
52
51
  rescue LookerSDK::Error => e
53
52
  say_error "Error querying search_folders(#{JSON.pretty_generate(req)})"
54
53
  say_error e
55
54
  raise
56
55
  end
57
- data
58
56
  end
59
57
 
60
58
  def query_folder(id,fields=nil)
61
- data = nil
62
59
  begin
63
60
  req = {}
64
61
  req[:fields] = fields if fields
65
- data = @sdk.folder(id, req)
62
+ @sdk.folder(id, req).to_attrs
66
63
  rescue LookerSDK::NotFound
67
64
  return nil
68
65
  rescue LookerSDK::Error => e
@@ -70,7 +67,6 @@ module Gzr
70
67
  say_error e
71
68
  raise
72
69
  end
73
- data
74
70
  end
75
71
 
76
72
  def process_args(args)
@@ -78,7 +74,7 @@ module Gzr
78
74
 
79
75
  begin
80
76
  user = query_me("home_folder_id")
81
- folder_ids << user.home_folder_id
77
+ folder_ids << user[:home_folder_id]
82
78
  end unless args && args.length > 0 && !(args[0].nil?)
83
79
 
84
80
  if args[0] == 'lookml'
@@ -87,26 +83,26 @@ module Gzr
87
83
  folder_ids << args[0].to_i
88
84
  elsif args[0] == "~" then
89
85
  user = query_me("personal_folder_id")
90
- folder_ids << user.personal_folder_id
86
+ folder_ids << user[:personal_folder_id]
91
87
  elsif args[0] =~ /^~[0-9]+$/ then
92
88
  user = query_user(args[0].sub('~',''), "personal_folder_id")
93
- folder_ids << user.personal_folder_id
89
+ folder_ids << user[:personal_folder_id]
94
90
  elsif args[0] =~ /^~.+@.+$/ then
95
91
  search_results = search_users( { :email=>args[0].sub('~','') },"personal_folder_id" )
96
- folder_ids += search_results.map { |r| r.personal_folder_id }
92
+ folder_ids += search_results.map { |r| r[:personal_folder_id] }
97
93
  elsif args[0] =~ /^~.+$/ then
98
94
  first_name, last_name = args[0].sub('~','').split(' ')
99
95
  search_results = search_users( { :first_name=>first_name, :last_name=>last_name },"personal_folder_id" )
100
- folder_ids += search_results.map { |r| r.personal_folder_id }
96
+ folder_ids += search_results.map { |r| r[:personal_folder_id] }
101
97
  else
102
98
  search_results = search_folders(args[0],"id")
103
- folder_ids += search_results.map { |r| r.id }
99
+ folder_ids += search_results.map { |r| r[:id] }
104
100
 
105
101
  # The built in Shared folder is only availabe by
106
102
  # searching for Home. https://github.com/looker/helltool/issues/34994
107
103
  if args[0] == 'Shared' then
108
104
  search_results = search_folders('Home',"id,is_shared_root")
109
- folder_ids += search_results.select { |r| r.is_shared_root }.map { |r| r.id }
105
+ folder_ids += search_results.select { |r| r[:is_shared_root] }.map { |r| r[:id] }
110
106
  end
111
107
  end if args && args.length > 0 && !args[0].nil?
112
108
 
@@ -114,47 +110,43 @@ module Gzr
114
110
  end
115
111
 
116
112
  def all_folders(fields=nil)
117
- data = nil
118
113
  begin
119
114
  req = {}
120
115
  req[:fields] = fields if fields
121
- data = @sdk.all_folders(req)
116
+ @sdk.all_folders(req).collect { |e| e.to_attrs }
122
117
  rescue LookerSDK::Error => e
123
118
  say_error "Error querying all_folders(#{JSON.pretty_generate(req)})"
124
119
  say_error e
125
120
  raise
126
121
  end
127
- data
128
122
  end
129
123
 
130
124
  def query_folder_children(folder_id, fields=nil)
131
- data = nil
132
125
  req = {}
133
126
  req[:fields] = fields if fields
134
127
  begin
135
- data = @sdk.folder_children(folder_id, req)
128
+ @sdk.folder_children(folder_id, req).collect { |e| e.to_attrs }
136
129
  rescue LookerSDK::NotFound
137
- return nil
130
+ return []
138
131
  rescue LookerSDK::Error => e
139
132
  say_error "Error querying folder_children(#{folder_id}, #{JSON.pretty_generate(req)})"
140
133
  say_error e
141
134
  raise
142
135
  end
143
- data
144
136
  end
145
137
 
146
138
  def delete_folder(folder_id)
147
- data = nil
148
139
  begin
149
- data = @sdk.delete_folder(folder_id)
140
+ @sdk.delete_folder(folder_id)
150
141
  rescue LookerSDK::NotFound
151
- return nil
142
+ say_error "folder #{folder_id} not found"
143
+ say_error e
144
+ raise
152
145
  rescue LookerSDK::Error => e
153
146
  say_error "Error deleting folder #{folder_id}"
154
147
  say_error e
155
148
  raise
156
149
  end
157
- data
158
150
  end
159
151
  end
160
152
  end
@@ -1,6 +1,6 @@
1
1
  # The MIT License (MIT)
2
2
 
3
- # Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
3
+ # Copyright (c) 2023 Mike DeAngelo Google, Inc.
4
4
 
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  # this software and associated documentation files (the "Software"), to deal in
@@ -35,7 +35,7 @@ module Gzr
35
35
  loop do
36
36
  begin
37
37
  req[:page] = page
38
- scratch_data = @sdk.all_groups(req)
38
+ scratch_data = @sdk.all_groups(req).collect { |e| e.to_attrs }
39
39
  rescue LookerSDK::ClientError => e
40
40
  say_error "Unable to get all_groups(#{JSON.pretty_generate(req)})"
41
41
  say_error e
@@ -52,9 +52,8 @@ module Gzr
52
52
  req = { }
53
53
  req[:fields] = fields if fields
54
54
 
55
- data = Array.new
56
55
  begin
57
- data = @sdk.all_group_groups(group_id,req)
56
+ @sdk.all_group_groups(group_id,req).collect { |e| e.to_attrs }
58
57
  rescue LookerSDK::NotFound => e
59
58
  return []
60
59
  rescue LookerSDK::ClientError => e
@@ -62,7 +61,6 @@ module Gzr
62
61
  say_error e
63
62
  raise
64
63
  end
65
- data
66
64
  end
67
65
 
68
66
  def query_group_users(group_id,fields=nil,sorts=nil)
@@ -77,7 +75,7 @@ module Gzr
77
75
  loop do
78
76
  begin
79
77
  req[:page] = page
80
- scratch_data = @sdk.all_group_users(group_id,req)
78
+ scratch_data = @sdk.all_group_users(group_id,req).collect { |e| e.to_attrs }
81
79
  rescue LookerSDK::ClientError => e
82
80
  say_error "Unable to get all_group_users(#{group_id},#{JSON.pretty_generate(req)})"
83
81
  say_error e
@@ -93,9 +91,9 @@ module Gzr
93
91
  def search_groups(name)
94
92
  req = {:name => name }
95
93
  begin
96
- return @sdk.search_groups(req)
94
+ return @sdk.search_groups(req).collect { |e| e.to_attrs }
97
95
  rescue LookerSDK::NotFound => e
98
- return nil
96
+ return []
99
97
  rescue LookerSDK::ClientError => e
100
98
  say_error "Unable to search_groups(#{JSON.pretty_generate(req)})"
101
99
  say_error e
@@ -107,7 +105,7 @@ module Gzr
107
105
  req = Hash.new
108
106
  req[:fields] = fields if fields
109
107
  begin
110
- return @sdk.group(id,req)
108
+ return @sdk.group(id,req).to_attrs
111
109
  rescue LookerSDK::NotFound => e
112
110
  return nil
113
111
  rescue LookerSDK::ClientError => e
@@ -121,7 +119,7 @@ module Gzr
121
119
  req = Hash.new
122
120
  req[:value] = value
123
121
  begin
124
- return @sdk.update_user_attribute_group_value(group_id,attr_id, req)
122
+ return @sdk.update_user_attribute_group_value(group_id,attr_id, req).to_attrs
125
123
  rescue LookerSDK::ClientError => e
126
124
  say_error "Unable to update_user_attribute_group_value(#{group_id},#{attr_id},#{JSON.pretty_generate(req)})"
127
125
  say_error e
@@ -1,6 +1,6 @@
1
1
  # The MIT License (MIT)
2
2
 
3
- # Copyright (c) 2018 Mike DeAngelo Looker Data Sciences, Inc.
3
+ # Copyright (c) 2023 Mike DeAngelo Google, Inc.
4
4
 
5
5
  # Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  # this software and associated documentation files (the "Software"), to deal in
@@ -24,15 +24,17 @@
24
24
  module Gzr
25
25
  module Look
26
26
  def query_look(look_id)
27
- data = nil
28
27
  begin
29
- data = @sdk.look(look_id)
28
+ @sdk.look(look_id).to_attrs
29
+ rescue LookerSDK::NotFoud => e
30
+ say_error "look(#{look_id}) not found"
31
+ say_error e
32
+ raise
30
33
  rescue LookerSDK::Error => e
31
34
  say_error "Error querying look(#{look_id})"
32
35
  say_error e
33
36
  raise
34
37
  end
35
- data
36
38
  end
37
39
 
38
40
  def search_looks_by_slug(slug, folder_id=nil)
@@ -40,9 +42,9 @@ module Gzr
40
42
  begin
41
43
  req = { :slug => slug }
42
44
  req[:folder_id] = folder_id if folder_id
43
- data = @sdk.search_looks(req)
45
+ data = @sdk.search_looks(req).collect { |l| l.to_attrs }
44
46
  req[:deleted] = true
45
- data = @sdk.search_looks(req) if data.empty?
47
+ data = @sdk.search_looks(req).collect { |l| l.to_attrs } if data.empty?
46
48
  rescue LookerSDK::Error => e
47
49
  say_error "Error search_looks_by_slug(#{JSON.pretty_generate(req)})"
48
50
  say_error e
@@ -56,9 +58,9 @@ module Gzr
56
58
  begin
57
59
  req = { :title => title }
58
60
  req[:folder_id] = folder_id if folder_id
59
- data = @sdk.search_looks(req)
61
+ data = @sdk.search_looks(req).collect { |l| l.to_attrs }
60
62
  req[:deleted] = true
61
- data = @sdk.search_looks(req) if data.empty?
63
+ data = @sdk.search_looks(req).collect { |l| l.to_attrs } if data.empty?
62
64
  rescue LookerSDK::Error => e
63
65
  say_error "Error search_looks_by_title(#{JSON.pretty_generate(req)})"
64
66
  say_error e
@@ -70,36 +72,36 @@ module Gzr
70
72
  def create_look(look)
71
73
  begin
72
74
  look[:public] = false unless look[:public]
73
- data = @sdk.create_look(look)
75
+ @sdk.create_look(look).to_attrs
74
76
  rescue LookerSDK::Error => e
75
77
  say_error "Error creating look(#{JSON.pretty_generate(look)})"
76
78
  say_error e
77
79
  raise
78
80
  end
79
- data
80
81
  end
81
82
 
82
83
  def update_look(id,look)
83
84
  begin
84
- data = @sdk.update_look(id,look)
85
+ @sdk.update_look(id,look).to_attrs
86
+ rescue LookerSDK::NotFound => e
87
+ say_error "look(#{id}) not found"
88
+ say_error e
89
+ raise
85
90
  rescue LookerSDK::Error => e
86
91
  say_error "Error updating look(#{id},#{JSON.pretty_generate(look)})"
87
92
  say_error e
88
93
  raise
89
94
  end
90
- data
91
95
  end
92
96
 
93
97
  def delete_look(look_id)
94
- data = nil
95
98
  begin
96
- data = @sdk.delete_look(look_id)
99
+ @sdk.delete_look(look_id)
97
100
  rescue LookerSDK::Error => e
98
101
  say_error "Error deleting look(#{look_id})"
99
102
  say_error e
100
103
  raise
101
104
  end
102
- data
103
105
  end
104
106
 
105
107
  def upsert_look(user_id, query_id, folder_id, source, output: $stdout)
@@ -123,8 +125,8 @@ module Gzr
123
125
  same_slug = (slug_used&.fetch(:id,nil) == existing_look&.fetch(:id,nil))
124
126
 
125
127
  if slug_used && !same_slug then
126
- say_warning "slug #{slug_used.slug} already used for look #{slug_used.title} in folder #{slug_used.folder_id}", output: output
127
- say_warning("That look is in the 'Trash' but not fully deleted yet", output: output) if slug_used.deleted
128
+ say_warning "slug #{slug_used[:slug]} already used for look #{slug_used[:title]} in folder #{slug_used[:folder_id]}", output: output
129
+ say_warning("That look is in the 'Trash' but not fully deleted yet", output: output) if slug_used[:deleted]
128
130
  say_warning "look will be imported with new slug", output: output
129
131
  end
130
132
 
@@ -133,14 +135,14 @@ module Gzr
133
135
  raise Gzr::CLI::Error, "Look #{source[:title]} already exists in folder #{folder_id}\nDelete it before trying to upate another Look to have that title."
134
136
  end
135
137
  raise Gzr::CLI::Error, "Look #{existing_look[:title]} with slug #{existing_look[:slug]} already exists in folder #{folder_id}\nUse --force if you want to overwrite it" unless @options[:force]
136
- say_ok "Modifying existing Look #{existing_look.id} #{existing_look.title} in folder #{folder_id}", output: output
138
+ say_ok "Modifying existing Look #{existing_look[:id]} #{existing_look[:title]} in folder #{folder_id}", output: output
137
139
  new_look = source.select do |k,v|
138
140
  (keys_to_keep('update_look') - [:space_id,:folder_id,:user_id,:query_id,:slug]).include? k
139
141
  end
140
142
  new_look[:slug] = source[:slug] if source[:slug] && !slug_used
141
143
  new_look[:deleted] = false if existing_look[:deleted]
142
144
  new_look[:query_id] = query_id
143
- return update_look(existing_look.id,new_look)
145
+ return update_look(existing_look[:id],new_look)
144
146
  else
145
147
  new_look = source.select do |k,v|
146
148
  (keys_to_keep('create_look') - [:space_id,:folder_id,:user_id,:query_id,:slug]).include? k
@@ -191,14 +193,14 @@ module Gzr
191
193
  end
192
194
 
193
195
  def cat_look(look_id)
194
- data = query_look(look_id).to_attrs
196
+ data = query_look(look_id)
195
197
  find_vis_config_reference(data) do |vis_config|
196
198
  find_color_palette_reference(vis_config) do |o,default_colors|
197
199
  rewrite_color_palette!(o,default_colors)
198
200
  end
199
201
  end
200
202
 
201
- data[:scheduled_plans] = query_scheduled_plans_for_look(@look_id,"all").map { |e| e.to_attrs } if @options[:plans]
203
+ data[:scheduled_plans] = query_scheduled_plans_for_look(@look_id,"all") if @options[:plans]
202
204
  data
203
205
  end
204
206