gazer 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
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