gazer 0.2.58 → 0.2.60
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.
- checksums.yaml +4 -4
- data/.github/workflows/lint-pr.yml +17 -0
- data/.github/workflows/release.yml +3 -4
- data/.github/workflows/ruby-ci.yml +72 -38
- data/.rspec +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +14 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +12 -8
- data/gzr.gemspec +3 -1
- data/lib/gzr/cli.rb +5 -6
- data/lib/gzr/command.rb +12 -8
- data/lib/gzr/commands/attribute/get_group_value.rb +1 -1
- data/lib/gzr/commands/attribute/set_group_value.rb +1 -1
- data/lib/gzr/commands/dashboard/cat.rb +1 -1
- data/lib/gzr/commands/dashboard/import.rb +33 -26
- data/lib/gzr/commands/dashboard/mv.rb +7 -7
- data/lib/gzr/commands/dashboard.rb +8 -8
- data/lib/gzr/commands/{space → folder}/cat.rb +7 -7
- data/lib/gzr/commands/{space → folder}/create.rb +9 -9
- data/lib/gzr/commands/{space → folder}/export.rb +20 -20
- data/lib/gzr/commands/{space → folder}/ls.rb +11 -11
- data/lib/gzr/commands/{space → folder}/rm.rb +12 -12
- data/lib/gzr/commands/{space → folder}/top.rb +7 -7
- data/lib/gzr/commands/{space → folder}/tree.rb +21 -21
- data/lib/gzr/commands/{space.rb → folder.rb} +28 -28
- data/lib/gzr/commands/group.rb +1 -1
- data/lib/gzr/commands/look/import.rb +3 -3
- data/lib/gzr/commands/look/mv.rb +8 -8
- data/lib/gzr/commands/look.rb +8 -8
- data/lib/gzr/commands/user.rb +2 -2
- data/lib/gzr/modules/dashboard.rb +17 -4
- data/lib/gzr/modules/{space.rb → folder.rb} +38 -38
- data/lib/gzr/modules/look.rb +18 -17
- data/lib/gzr/modules/session.rb +10 -15
- data/lib/gzr/version.rb +1 -1
- metadata +41 -19
data/lib/gzr/commands/look.rb
CHANGED
@@ -29,17 +29,17 @@ module Gzr
|
|
29
29
|
|
30
30
|
namespace :look
|
31
31
|
|
32
|
-
desc 'mv LOOK_ID
|
32
|
+
desc 'mv LOOK_ID TARGET_FOLDER_ID', 'Move a look to the given folder'
|
33
33
|
method_option :help, aliases: '-h', type: :boolean,
|
34
34
|
desc: 'Display usage information'
|
35
35
|
method_option :force, type: :boolean,
|
36
|
-
desc: 'Overwrite a look with the same name in the target
|
37
|
-
def mv(look_id,
|
36
|
+
desc: 'Overwrite a look with the same name in the target folder'
|
37
|
+
def mv(look_id, target_folder_id)
|
38
38
|
if options[:help]
|
39
39
|
invoke :help, ['mv']
|
40
40
|
else
|
41
41
|
require_relative 'look/mv'
|
42
|
-
Gzr::Commands::Look::Mv.new(look_id,
|
42
|
+
Gzr::Commands::Look::Mv.new(look_id, target_folder_id, options).execute
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
@@ -59,19 +59,19 @@ module Gzr
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
-
desc 'import FILE
|
62
|
+
desc 'import FILE DEST_FOLDER_ID', 'Import a look from a file'
|
63
63
|
method_option :help, aliases: '-h', type: :boolean,
|
64
64
|
desc: 'Display usage information'
|
65
65
|
method_option :plain, type: :boolean,
|
66
66
|
desc: 'Provide minimal response information'
|
67
67
|
method_option :force, type: :boolean,
|
68
|
-
desc: 'Overwrite a look with the same name/slug in the target
|
69
|
-
def import(file,
|
68
|
+
desc: 'Overwrite a look with the same name/slug in the target folder'
|
69
|
+
def import(file,dest_folder_id)
|
70
70
|
if options[:help]
|
71
71
|
invoke :help, ['import']
|
72
72
|
else
|
73
73
|
require_relative 'look/import'
|
74
|
-
Gzr::Commands::Look::Import.new(file,
|
74
|
+
Gzr::Commands::Look::Import.new(file, dest_folder_id, options).execute
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/lib/gzr/commands/user.rb
CHANGED
@@ -84,7 +84,7 @@ module Gzr
|
|
84
84
|
desc 'me', 'Show information for the current user'
|
85
85
|
method_option :help, aliases: '-h', type: :boolean,
|
86
86
|
desc: 'Display usage information'
|
87
|
-
method_option :fields, type: :string, default: 'id,email,last_name,first_name,
|
87
|
+
method_option :fields, type: :string, default: 'id,email,last_name,first_name,personal_folder_id,home_folder_id',
|
88
88
|
desc: 'Fields to display'
|
89
89
|
method_option :plain, type: :boolean, default: false,
|
90
90
|
desc: 'print without any extra formatting'
|
@@ -102,7 +102,7 @@ module Gzr
|
|
102
102
|
desc 'ls', 'list all users'
|
103
103
|
method_option :help, aliases: '-h', type: :boolean,
|
104
104
|
desc: 'Display usage information'
|
105
|
-
method_option :fields, type: :string, default: 'id,email,last_name,first_name,
|
105
|
+
method_option :fields, type: :string, default: 'id,email,last_name,first_name,personal_folder_id,home_folder_id',
|
106
106
|
desc: 'Fields to display'
|
107
107
|
method_option :"last-login", type: :boolean, default: false,
|
108
108
|
desc: 'Include the time of the most recent login'
|
@@ -49,11 +49,11 @@ module Gzr
|
|
49
49
|
data
|
50
50
|
end
|
51
51
|
|
52
|
-
def search_dashboards_by_slug(slug,
|
52
|
+
def search_dashboards_by_slug(slug, folder_id=nil)
|
53
53
|
data = []
|
54
54
|
begin
|
55
55
|
req = { :slug => slug }
|
56
|
-
req[:
|
56
|
+
req[:folder_id] = folder_id if folder_id
|
57
57
|
data = @sdk.search_dashboards(req)
|
58
58
|
req[:deleted] = true
|
59
59
|
data = @sdk.search_dashboards(req) if data.empty?
|
@@ -65,11 +65,11 @@ module Gzr
|
|
65
65
|
data
|
66
66
|
end
|
67
67
|
|
68
|
-
def search_dashboards_by_title(title,
|
68
|
+
def search_dashboards_by_title(title, folder_id=nil)
|
69
69
|
data = []
|
70
70
|
begin
|
71
71
|
req = { :title => title }
|
72
|
-
req[:
|
72
|
+
req[:folder_id] = folder_id if folder_id
|
73
73
|
data = @sdk.search_dashboards(req)
|
74
74
|
req[:deleted] = true
|
75
75
|
data = @sdk.search_dashboards(req) if data.empty?
|
@@ -84,6 +84,7 @@ module Gzr
|
|
84
84
|
def create_dashboard(dash)
|
85
85
|
begin
|
86
86
|
data = @sdk.create_dashboard(dash)
|
87
|
+
say_error data.inspect if data.respond_to?(:message)
|
87
88
|
data&.dashboard_filters&.sort! { |a,b| a.row <=> b.row }
|
88
89
|
data&.dashboard_layouts&.sort_by! { |v| (v.active ? 0 : 1) }
|
89
90
|
rescue LookerSDK::Error => e
|
@@ -183,6 +184,18 @@ module Gzr
|
|
183
184
|
data
|
184
185
|
end
|
185
186
|
|
187
|
+
def get_all_dashboard_layout_components(id)
|
188
|
+
begin
|
189
|
+
data = @sdk.dashboard_layout_dashboard_layout_components(id)
|
190
|
+
return nil if data.respond_to?(:message) && data.message == 'Not found'
|
191
|
+
rescue LookerSDK::Error => e
|
192
|
+
say_error "Error getting dashboard_layout_dashboard_layout_components(#{id})"
|
193
|
+
say_error e.message
|
194
|
+
raise
|
195
|
+
end
|
196
|
+
data
|
197
|
+
end
|
198
|
+
|
186
199
|
def update_dashboard_layout_component(id,component)
|
187
200
|
begin
|
188
201
|
data = @sdk.update_dashboard_layout_component(id,component)
|
@@ -22,7 +22,7 @@
|
|
22
22
|
# frozen_string_literal: true
|
23
23
|
|
24
24
|
module Gzr
|
25
|
-
module
|
25
|
+
module Folder
|
26
26
|
def self.included klass
|
27
27
|
require_relative '../modules/user'
|
28
28
|
klass.class_eval do
|
@@ -30,43 +30,43 @@ module Gzr
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def
|
33
|
+
def create_folder(name, parent_id)
|
34
34
|
data = nil
|
35
35
|
begin
|
36
36
|
req = {:name => name, :parent_id => parent_id}
|
37
|
-
data = @sdk.
|
37
|
+
data = @sdk.create_folder(req)
|
38
38
|
rescue LookerSDK::Error => e
|
39
|
-
say_error "Error creating
|
39
|
+
say_error "Error creating folder(#{JSON.pretty_generate(req)})"
|
40
40
|
say_error e.message
|
41
41
|
raise
|
42
42
|
end
|
43
43
|
data
|
44
44
|
end
|
45
45
|
|
46
|
-
def
|
46
|
+
def search_folders(name,fields=nil)
|
47
47
|
data = nil
|
48
48
|
begin
|
49
49
|
req = {:name => name}
|
50
50
|
req[:fields] = fields if fields
|
51
|
-
data = @sdk.
|
51
|
+
data = @sdk.search_folders(req)
|
52
52
|
rescue LookerSDK::Error => e
|
53
|
-
say_error "Error querying
|
53
|
+
say_error "Error querying search_folders(#{JSON.pretty_generate(req)})"
|
54
54
|
say_error e.message
|
55
55
|
raise
|
56
56
|
end
|
57
57
|
data
|
58
58
|
end
|
59
59
|
|
60
|
-
def
|
60
|
+
def query_folder(id,fields=nil)
|
61
61
|
data = nil
|
62
62
|
begin
|
63
63
|
req = {}
|
64
64
|
req[:fields] = fields if fields
|
65
|
-
data = @sdk.
|
65
|
+
data = @sdk.folder(id, req)
|
66
66
|
rescue LookerSDK::NotFound
|
67
67
|
return nil
|
68
68
|
rescue LookerSDK::Error => e
|
69
|
-
say_error "Error querying
|
69
|
+
say_error "Error querying folder(#{id},#{JSON.pretty_generate(req)})"
|
70
70
|
say_error e.message
|
71
71
|
raise
|
72
72
|
end
|
@@ -74,83 +74,83 @@ module Gzr
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def process_args(args)
|
77
|
-
|
77
|
+
folder_ids = []
|
78
78
|
|
79
79
|
begin
|
80
|
-
user = query_me("
|
81
|
-
|
80
|
+
user = query_me("home_folder_id")
|
81
|
+
folder_ids << user.home_folder_id
|
82
82
|
end unless args && args.length > 0 && !(args[0].nil?)
|
83
83
|
|
84
84
|
if args[0] == 'lookml'
|
85
|
-
|
85
|
+
folder_ids << 'lookml'
|
86
86
|
elsif args[0] =~ /^[0-9]+$/ then
|
87
|
-
|
87
|
+
folder_ids << args[0].to_i
|
88
88
|
elsif args[0] == "~" then
|
89
|
-
user = query_me("
|
90
|
-
|
89
|
+
user = query_me("personal_folder_id")
|
90
|
+
folder_ids << user.personal_folder_id
|
91
91
|
elsif args[0] =~ /^~[0-9]+$/ then
|
92
|
-
user = query_user(args[0].sub('~',''), "
|
93
|
-
|
92
|
+
user = query_user(args[0].sub('~',''), "personal_folder_id")
|
93
|
+
folder_ids << user.personal_folder_id
|
94
94
|
elsif args[0] =~ /^~.+@.+$/ then
|
95
|
-
search_results = search_users( { :email=>args[0].sub('~','') },"
|
96
|
-
|
95
|
+
search_results = search_users( { :email=>args[0].sub('~','') },"personal_folder_id" )
|
96
|
+
folder_ids += search_results.map { |r| r.personal_folder_id }
|
97
97
|
elsif args[0] =~ /^~.+$/ then
|
98
98
|
first_name, last_name = args[0].sub('~','').split(' ')
|
99
|
-
search_results = search_users( { :first_name=>first_name, :last_name=>last_name },"
|
100
|
-
|
99
|
+
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 }
|
101
101
|
else
|
102
|
-
search_results =
|
103
|
-
|
102
|
+
search_results = search_folders(args[0],"id")
|
103
|
+
folder_ids += search_results.map { |r| r.id }
|
104
104
|
|
105
|
-
# The built in Shared
|
105
|
+
# The built in Shared folder is only availabe by
|
106
106
|
# searching for Home. https://github.com/looker/helltool/issues/34994
|
107
107
|
if args[0] == 'Shared' then
|
108
|
-
search_results =
|
109
|
-
|
108
|
+
search_results = search_folders('Home',"id,is_shared_root")
|
109
|
+
folder_ids += search_results.select { |r| r.is_shared_root }.map { |r| r.id }
|
110
110
|
end
|
111
111
|
end if args && args.length > 0 && !args[0].nil?
|
112
112
|
|
113
|
-
return
|
113
|
+
return folder_ids
|
114
114
|
end
|
115
115
|
|
116
|
-
def
|
116
|
+
def all_folders(fields=nil)
|
117
117
|
data = nil
|
118
118
|
begin
|
119
119
|
req = {}
|
120
120
|
req[:fields] = fields if fields
|
121
|
-
data = @sdk.
|
121
|
+
data = @sdk.all_folders(req)
|
122
122
|
rescue LookerSDK::Error => e
|
123
|
-
say_error "Error querying
|
123
|
+
say_error "Error querying all_folders(#{JSON.pretty_generate(req)})"
|
124
124
|
say_error e.message
|
125
125
|
raise
|
126
126
|
end
|
127
127
|
data
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
130
|
+
def query_folder_children(folder_id, fields=nil)
|
131
131
|
data = nil
|
132
132
|
req = {}
|
133
133
|
req[:fields] = fields if fields
|
134
134
|
begin
|
135
|
-
data = @sdk.
|
135
|
+
data = @sdk.folder_children(folder_id, req)
|
136
136
|
rescue LookerSDK::NotFound
|
137
137
|
return nil
|
138
138
|
rescue LookerSDK::Error => e
|
139
|
-
say_error "Error querying
|
139
|
+
say_error "Error querying folder_children(#{folder_id}, #{JSON.pretty_generate(req)})"
|
140
140
|
say_error e.message
|
141
141
|
raise
|
142
142
|
end
|
143
143
|
data
|
144
144
|
end
|
145
145
|
|
146
|
-
def
|
146
|
+
def delete_folder(folder_id)
|
147
147
|
data = nil
|
148
148
|
begin
|
149
|
-
data = @sdk.
|
149
|
+
data = @sdk.delete_folder(folder_id)
|
150
150
|
rescue LookerSDK::NotFound
|
151
151
|
return nil
|
152
152
|
rescue LookerSDK::Error => e
|
153
|
-
say_error "Error deleting
|
153
|
+
say_error "Error deleting folder #{folder_id}"
|
154
154
|
say_error e.message
|
155
155
|
raise
|
156
156
|
end
|
data/lib/gzr/modules/look.rb
CHANGED
@@ -35,11 +35,11 @@ module Gzr
|
|
35
35
|
data
|
36
36
|
end
|
37
37
|
|
38
|
-
def search_looks_by_slug(slug,
|
38
|
+
def search_looks_by_slug(slug, folder_id=nil)
|
39
39
|
data = []
|
40
40
|
begin
|
41
41
|
req = { :slug => slug }
|
42
|
-
req[:
|
42
|
+
req[:folder_id] = folder_id if folder_id
|
43
43
|
data = @sdk.search_looks(req)
|
44
44
|
req[:deleted] = true
|
45
45
|
data = @sdk.search_looks(req) if data.empty?
|
@@ -51,11 +51,11 @@ module Gzr
|
|
51
51
|
data
|
52
52
|
end
|
53
53
|
|
54
|
-
def search_looks_by_title(title,
|
54
|
+
def search_looks_by_title(title, folder_id=nil)
|
55
55
|
data = []
|
56
56
|
begin
|
57
57
|
req = { :title => title }
|
58
|
-
req[:
|
58
|
+
req[:folder_id] = folder_id if folder_id
|
59
59
|
data = @sdk.search_looks(req)
|
60
60
|
req[:deleted] = true
|
61
61
|
data = @sdk.search_looks(req) if data.empty?
|
@@ -69,10 +69,11 @@ module Gzr
|
|
69
69
|
|
70
70
|
def create_look(look)
|
71
71
|
begin
|
72
|
+
look[:public] = false unless look[:public]
|
72
73
|
data = @sdk.create_look(look)
|
73
74
|
rescue LookerSDK::Error => e
|
74
75
|
say_error "Error creating look(#{JSON.pretty_generate(look)})"
|
75
|
-
say_error e
|
76
|
+
say_error e
|
76
77
|
raise
|
77
78
|
end
|
78
79
|
data
|
@@ -101,16 +102,16 @@ module Gzr
|
|
101
102
|
data
|
102
103
|
end
|
103
104
|
|
104
|
-
def upsert_look(user_id, query_id,
|
105
|
-
# try to find look by slug in target
|
106
|
-
existing_look = search_looks_by_slug(source[:slug],
|
107
|
-
# check for look of same title in target
|
108
|
-
title_used = search_looks_by_title(source[:title],
|
105
|
+
def upsert_look(user_id, query_id, folder_id, source, output: $stdout)
|
106
|
+
# try to find look by slug in target folder
|
107
|
+
existing_look = search_looks_by_slug(source[:slug], folder_id).fetch(0,nil) if source[:slug]
|
108
|
+
# check for look of same title in target folder
|
109
|
+
title_used = search_looks_by_title(source[:title], folder_id).fetch(0,nil)
|
109
110
|
|
110
|
-
# If there is no match by slug in target
|
111
|
+
# If there is no match by slug in target folder or no slug given, then we match by title
|
111
112
|
existing_look ||= title_used
|
112
113
|
|
113
|
-
# same_title is now a flag indicating that there is already a look in the same
|
114
|
+
# same_title is now a flag indicating that there is already a look in the same folder with
|
114
115
|
# that title, and it is the one we are updating.
|
115
116
|
same_title = (title_used&.fetch(:id,nil) == existing_look&.fetch(:id,nil))
|
116
117
|
|
@@ -122,17 +123,17 @@ module Gzr
|
|
122
123
|
same_slug = (slug_used&.fetch(:id,nil) == existing_look&.fetch(:id,nil))
|
123
124
|
|
124
125
|
if slug_used && !same_slug then
|
125
|
-
say_warning "slug #{slug_used.slug} already used for look #{slug_used.title} in
|
126
|
+
say_warning "slug #{slug_used.slug} already used for look #{slug_used.title} in folder #{slug_used.folder_id}", output: output
|
126
127
|
say_warning("That look is in the 'Trash' but not fully deleted yet", output: output) if slug_used.deleted
|
127
128
|
say_warning "look will be imported with new slug", output: output
|
128
129
|
end
|
129
130
|
|
130
131
|
if existing_look then
|
131
132
|
if title_used && !same_title then
|
132
|
-
raise Gzr::CLI::Error, "Look #{source[:title]} already exists in
|
133
|
+
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."
|
133
134
|
end
|
134
|
-
raise Gzr::CLI::Error, "Look #{existing_look[:title]} with slug #{existing_look[:slug]} already exists in
|
135
|
-
say_ok "Modifying existing Look #{existing_look.id} #{existing_look.title} in
|
135
|
+
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
|
136
137
|
new_look = source.select do |k,v|
|
137
138
|
(keys_to_keep('update_look') - [:space_id,:folder_id,:user_id,:query_id,:slug]).include? k
|
138
139
|
end
|
@@ -147,7 +148,7 @@ module Gzr
|
|
147
148
|
new_look[:slug] = source[:slug] unless slug_used
|
148
149
|
new_look[:query_id] = query_id
|
149
150
|
new_look[:user_id] = user_id
|
150
|
-
new_look[:
|
151
|
+
new_look[:folder_id] = folder_id
|
151
152
|
|
152
153
|
find_vis_config_reference(new_look) do |vis_config|
|
153
154
|
find_color_palette_reference(vis_config) do |o,default_colors|
|
data/lib/gzr/modules/session.rb
CHANGED
@@ -51,7 +51,7 @@ module Gzr
|
|
51
51
|
|
52
52
|
def sufficient_version?(given_version, minimum_version)
|
53
53
|
return true unless (given_version && minimum_version)
|
54
|
-
versions = @versions.
|
54
|
+
versions = @versions.sort
|
55
55
|
!versions.drop_while {|v| v < minimum_version}.reverse.drop_while {|v| v > given_version}.empty?
|
56
56
|
end
|
57
57
|
|
@@ -102,7 +102,7 @@ module Gzr
|
|
102
102
|
conn_hash
|
103
103
|
end
|
104
104
|
|
105
|
-
def login(min_api_version=
|
105
|
+
def login(min_api_version="4.0")
|
106
106
|
if (@options[:client_id].nil? && ENV["LOOKERSDK_CLIENT_ID"])
|
107
107
|
@options[:client_id] = ENV["LOOKERSDK_CLIENT_ID"]
|
108
108
|
end
|
@@ -111,10 +111,6 @@ module Gzr
|
|
111
111
|
@options[:client_secret] = ENV["LOOKERSDK_CLIENT_SECRET"]
|
112
112
|
end
|
113
113
|
|
114
|
-
if (@options[:api_version].nil? && ENV["LOOKERSDK_API_VERSION"])
|
115
|
-
@options[:api_version] = ENV["LOOKERSDK_API_VERSION"]
|
116
|
-
end
|
117
|
-
|
118
114
|
if (@options[:verify_ssl] && ENV["LOOKERSDK_VERIFY_SSL"])
|
119
115
|
@options[:verify_ssl] = !(/^f(alse)?$/i =~ ENV["LOOKERSDK_VERIFY_SSL"])
|
120
116
|
end
|
@@ -137,6 +133,7 @@ module Gzr
|
|
137
133
|
:links_parser => Sawyer::LinkParsers::Simple.new,
|
138
134
|
:serializer => LookerSDK::Client::Serializer.new(JSON),
|
139
135
|
:faraday => Faraday.new(conn_hash[:connection_options]) do |conn|
|
136
|
+
conn.use LookerSDK::Response::RaiseError
|
140
137
|
if @options[:persistent]
|
141
138
|
conn.adapter :net_http_persistent
|
142
139
|
end
|
@@ -154,8 +151,8 @@ module Gzr
|
|
154
151
|
|
155
152
|
begin
|
156
153
|
versions_response = agent.call(:get,"/versions")
|
157
|
-
@versions = versions_response.data.supported_versions
|
158
|
-
@current_version = "
|
154
|
+
@versions = versions_response.data.supported_versions.map {|v| v.version}
|
155
|
+
@current_version = versions_response.data.current_version.version || "4.0"
|
159
156
|
rescue Faraday::SSLError => e
|
160
157
|
raise Gzr::CLI::Error, "SSL Certificate could not be verified\nDo you need the --no-verify-ssl option or the --no-ssl option?"
|
161
158
|
rescue Faraday::ConnectionFailed => cf
|
@@ -166,21 +163,19 @@ module Gzr
|
|
166
163
|
end
|
167
164
|
|
168
165
|
say_warning "API current_version #{@current_version}" if @options[:debug]
|
169
|
-
say_warning "API versions #{@versions
|
170
|
-
|
171
|
-
raise Gzr::CLI::Error, "Operation requires API v#{min_api_version}, but user specified version #{@options[:api_version]}" unless sufficient_version?(@options[:api_version],min_api_version)
|
166
|
+
say_warning "Supported API versions #{@versions}" if @options[:debug]
|
172
167
|
|
173
168
|
api_version = [min_api_version, @current_version].max
|
174
|
-
raise Gzr::CLI::Error, "Operation requires API v#{api_version}, which is not available from this host" if api_version && !@versions.any? {|v| v
|
175
|
-
raise Gzr::CLI::Error, "User specified API v#{@options[:api_version]}, which is not available from this host" if @options[:api_version] && !@versions.any? {|v| v.version == @options[:api_version]}
|
169
|
+
raise Gzr::CLI::Error, "Operation requires API v#{api_version}, which is not available from this host" if api_version && !@versions.any? {|v| v == api_version}
|
176
170
|
|
177
|
-
conn_hash = build_connection_hash(
|
171
|
+
conn_hash = build_connection_hash(api_version)
|
178
172
|
@secret = nil
|
179
173
|
|
180
174
|
say_ok("connecting to #{conn_hash.map { |k,v| "#{k}=>#{(k == :client_secret) ? '*********' : v}" }}") if @options[:debug]
|
181
175
|
|
182
176
|
begin
|
183
177
|
faraday = Faraday.new(conn_hash[:connection_options]) do |conn|
|
178
|
+
conn.use LookerSDK::Response::RaiseError
|
184
179
|
if @options[:persistent]
|
185
180
|
conn.adapter :net_http_persistent
|
186
181
|
end
|
@@ -242,7 +237,7 @@ module Gzr
|
|
242
237
|
end
|
243
238
|
end
|
244
239
|
|
245
|
-
def with_session(min_api_version="
|
240
|
+
def with_session(min_api_version="4.0")
|
246
241
|
return nil unless block_given?
|
247
242
|
begin
|
248
243
|
login(min_api_version) unless @sdk
|
data/lib/gzr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gazer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.60
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike DeAngelo
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-04-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tty-reader
|
@@ -120,6 +120,20 @@ dependencies:
|
|
120
120
|
- - ">="
|
121
121
|
- !ruby/object:Gem::Version
|
122
122
|
version: 1.3.0
|
123
|
+
- !ruby/object:Gem::Dependency
|
124
|
+
name: faraday
|
125
|
+
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 1.10.3
|
130
|
+
type: :runtime
|
131
|
+
prerelease: false
|
132
|
+
version_requirements: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - "~>"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 1.10.3
|
123
137
|
- !ruby/object:Gem::Dependency
|
124
138
|
name: looker-sdk
|
125
139
|
requirement: !ruby/object:Gem::Requirement
|
@@ -127,9 +141,6 @@ dependencies:
|
|
127
141
|
- - "~>"
|
128
142
|
- !ruby/object:Gem::Version
|
129
143
|
version: 0.1.1
|
130
|
-
- - "<="
|
131
|
-
- !ruby/object:Gem::Version
|
132
|
-
version: 0.1.2
|
133
144
|
type: :runtime
|
134
145
|
prerelease: false
|
135
146
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -137,9 +148,6 @@ dependencies:
|
|
137
148
|
- - "~>"
|
138
149
|
- !ruby/object:Gem::Version
|
139
150
|
version: 0.1.1
|
140
|
-
- - "<="
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
version: 0.1.2
|
143
151
|
- !ruby/object:Gem::Dependency
|
144
152
|
name: net-http-persistent
|
145
153
|
requirement: !ruby/object:Gem::Requirement
|
@@ -214,6 +222,20 @@ dependencies:
|
|
214
222
|
- - "~>"
|
215
223
|
- !ruby/object:Gem::Version
|
216
224
|
version: '3.0'
|
225
|
+
- !ruby/object:Gem::Dependency
|
226
|
+
name: rspec_junit_formatter
|
227
|
+
requirement: !ruby/object:Gem::Requirement
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
232
|
+
type: :development
|
233
|
+
prerelease: false
|
234
|
+
version_requirements: !ruby/object:Gem::Requirement
|
235
|
+
requirements:
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: '0'
|
217
239
|
description: This tool will help manage the content of a Looker instance.
|
218
240
|
email:
|
219
241
|
- drstrangelove@google.com
|
@@ -224,6 +246,7 @@ extra_rdoc_files: []
|
|
224
246
|
files:
|
225
247
|
- ".github/scripts/parse_version.sh"
|
226
248
|
- ".github/scripts/wait_for_looker.sh"
|
249
|
+
- ".github/workflows/lint-pr.yml"
|
227
250
|
- ".github/workflows/release.yml"
|
228
251
|
- ".github/workflows/ruby-ci.yml"
|
229
252
|
- ".gitignore"
|
@@ -262,6 +285,14 @@ files:
|
|
262
285
|
- lib/gzr/commands/dashboard/import.rb
|
263
286
|
- lib/gzr/commands/dashboard/mv.rb
|
264
287
|
- lib/gzr/commands/dashboard/rm.rb
|
288
|
+
- lib/gzr/commands/folder.rb
|
289
|
+
- lib/gzr/commands/folder/cat.rb
|
290
|
+
- lib/gzr/commands/folder/create.rb
|
291
|
+
- lib/gzr/commands/folder/export.rb
|
292
|
+
- lib/gzr/commands/folder/ls.rb
|
293
|
+
- lib/gzr/commands/folder/rm.rb
|
294
|
+
- lib/gzr/commands/folder/top.rb
|
295
|
+
- lib/gzr/commands/folder/tree.rb
|
265
296
|
- lib/gzr/commands/group.rb
|
266
297
|
- lib/gzr/commands/group/ls.rb
|
267
298
|
- lib/gzr/commands/group/member_groups.rb
|
@@ -296,14 +327,6 @@ files:
|
|
296
327
|
- lib/gzr/commands/role/user_add.rb
|
297
328
|
- lib/gzr/commands/role/user_ls.rb
|
298
329
|
- lib/gzr/commands/role/user_rm.rb
|
299
|
-
- lib/gzr/commands/space.rb
|
300
|
-
- lib/gzr/commands/space/cat.rb
|
301
|
-
- lib/gzr/commands/space/create.rb
|
302
|
-
- lib/gzr/commands/space/export.rb
|
303
|
-
- lib/gzr/commands/space/ls.rb
|
304
|
-
- lib/gzr/commands/space/rm.rb
|
305
|
-
- lib/gzr/commands/space/top.rb
|
306
|
-
- lib/gzr/commands/space/tree.rb
|
307
330
|
- lib/gzr/commands/subcommandbase.rb
|
308
331
|
- lib/gzr/commands/user.rb
|
309
332
|
- lib/gzr/commands/user/cat.rb
|
@@ -316,6 +339,7 @@ files:
|
|
316
339
|
- lib/gzr/modules/connection.rb
|
317
340
|
- lib/gzr/modules/dashboard.rb
|
318
341
|
- lib/gzr/modules/filehelper.rb
|
342
|
+
- lib/gzr/modules/folder.rb
|
319
343
|
- lib/gzr/modules/group.rb
|
320
344
|
- lib/gzr/modules/look.rb
|
321
345
|
- lib/gzr/modules/model.rb
|
@@ -323,7 +347,6 @@ files:
|
|
323
347
|
- lib/gzr/modules/plan.rb
|
324
348
|
- lib/gzr/modules/role.rb
|
325
349
|
- lib/gzr/modules/session.rb
|
326
|
-
- lib/gzr/modules/space.rb
|
327
350
|
- lib/gzr/modules/user.rb
|
328
351
|
- lib/gzr/templates/.gitkeep
|
329
352
|
- lib/gzr/templates/attribute/cat/.gitkeep
|
@@ -398,8 +421,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
398
421
|
- !ruby/object:Gem::Version
|
399
422
|
version: '0'
|
400
423
|
requirements: []
|
401
|
-
|
402
|
-
rubygems_version: 2.7.6.2
|
424
|
+
rubygems_version: 3.1.6
|
403
425
|
signing_key:
|
404
426
|
specification_version: 4
|
405
427
|
summary: Command line tool to manage the content of a Looker instance.
|