looker-sdk 0.0.5 → 0.1.1
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 +5 -5
- data/.gitignore +3 -0
- data/.travis.yml +1 -2
- data/CODE_OF_CONDUCT.md +46 -0
- data/Gemfile +1 -1
- data/LICENSE.md +33 -0
- data/Makefile +81 -0
- data/Rakefile +24 -27
- data/authentication.md +3 -3
- data/examples/add_delete_users.rb +24 -0
- data/examples/change_credentials_email_address_for_users.rb +24 -0
- data/examples/convert_look_to_lookless_tile.rb +71 -0
- data/examples/create_credentials_email_for_users.rb +24 -0
- data/examples/delete_all_user_sessions.rb +24 -0
- data/examples/delete_credentials_google_for_users.rb +24 -0
- data/examples/generate_password_reset_tokens_for_users.rb +24 -0
- data/examples/ldap_roles_test.rb +24 -0
- data/examples/me.rb +24 -0
- data/examples/refresh_user_notification_addresses.rb +24 -0
- data/examples/roles_and_users_with_permission.rb +24 -0
- data/examples/sdk_setup.rb +24 -0
- data/examples/streaming_downloads.rb +24 -0
- data/examples/users_with_credentials_email.rb +24 -0
- data/examples/users_with_credentials_embed.rb +33 -0
- data/examples/users_with_credentials_google.rb +23 -1
- data/examples/users_with_credentials_google_without_credentials_email.rb +24 -0
- data/lib/looker-sdk/authentication.rb +27 -2
- data/lib/looker-sdk/client/dynamic.rb +61 -11
- data/lib/looker-sdk/client.rb +86 -21
- data/lib/looker-sdk/configurable.rb +28 -2
- data/lib/looker-sdk/default.rb +30 -0
- data/lib/looker-sdk/error.rb +28 -0
- data/lib/looker-sdk/rate_limit.rb +24 -0
- data/lib/looker-sdk/response/raise_error.rb +25 -3
- data/lib/looker-sdk/sawyer_patch.rb +25 -1
- data/lib/looker-sdk/version.rb +25 -1
- data/lib/looker-sdk.rb +50 -0
- data/looker-sdk.gemspec +4 -3
- data/readme.md +12 -9
- data/shell/.netrc +3 -1
- data/shell/shell.rb +27 -2
- data/test/fixtures/{.netrc → .netrc.template} +0 -0
- data/test/helper.rb +26 -2
- data/test/looker/swagger.json +74 -3
- data/test/looker/test_client.rb +102 -6
- data/test/looker/test_dynamic_client.rb +101 -4
- data/test/looker/test_dynamic_client_agent.rb +24 -0
- metadata +50 -22
- data/LICENSE +0 -21
data/examples/sdk_setup.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require 'rubygems'
|
2
26
|
require 'bundler/setup'
|
3
27
|
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require './sdk_setup'
|
2
26
|
|
3
27
|
# This snippet shows how to download sdk responses using http streaming.
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require './sdk_setup'
|
2
26
|
|
3
27
|
users = sdk.all_users(:fields => 'id, is_disabled, credentials_email').
|
@@ -0,0 +1,33 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
25
|
+
require './sdk_setup'
|
26
|
+
|
27
|
+
users = sdk.all_users(fields:'id, is_disabled, display_name, credentials_embed').map do |u|
|
28
|
+
next if u.is_diabled || u.credentials_embed.empty?
|
29
|
+
creds = u.credentials_embed.first
|
30
|
+
[u.id, u.display_name, creds.external_user_id, creds.external_group_id, creds.logged_in_at]
|
31
|
+
end.compact
|
32
|
+
|
33
|
+
users.each{|u| p u}
|
@@ -1,4 +1,26 @@
|
|
1
|
-
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
2
24
|
|
3
25
|
require './sdk_setup'
|
4
26
|
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require './sdk_setup'
|
2
26
|
|
3
27
|
users = sdk.all_users(:fields => 'id, is_disabled, credentials_email, credentials_google').
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
module LookerSDK
|
2
26
|
|
3
27
|
# Authentication methods for {LookerSDK::Client}
|
@@ -27,7 +51,8 @@ module LookerSDK
|
|
27
51
|
|
28
52
|
set_access_token_from_params(nil)
|
29
53
|
without_authentication do
|
30
|
-
|
54
|
+
encoded_auth = Faraday::Utils.build_query(application_credentials)
|
55
|
+
post("#{URI.parse(api_endpoint).path}/login", encoded_auth, header: {:'Content-Type' => 'application/x-www-form-urlencoded'})
|
31
56
|
raise "login failure #{last_response.status}" unless last_response.status == 200
|
32
57
|
set_access_token_from_params(last_response.data)
|
33
58
|
end
|
@@ -46,7 +71,7 @@ module LookerSDK
|
|
46
71
|
|
47
72
|
def logout
|
48
73
|
without_authentication do
|
49
|
-
result = !!@access_token && ((delete(
|
74
|
+
result = !!@access_token && ((delete("#{URI.parse(api_endpoint).path}/logout") ; delete_succeeded?) rescue false)
|
50
75
|
set_access_token_from_params(nil)
|
51
76
|
result
|
52
77
|
end
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
module LookerSDK
|
2
26
|
class Client
|
3
27
|
|
@@ -25,19 +49,39 @@ module LookerSDK
|
|
25
49
|
def load_swagger
|
26
50
|
# We only need the swagger if we are going to be building our own 'operations' hash
|
27
51
|
return if shared_swagger && @@sharable_operations[api_endpoint]
|
28
|
-
#
|
29
|
-
@swagger ||= without_authentication {try_load_swagger}
|
52
|
+
# First, try to load swagger.json w/o authenticating
|
53
|
+
@swagger ||= without_authentication { try_load_swagger }
|
54
|
+
|
55
|
+
unless @swagger
|
56
|
+
# try again, this time with authentication
|
57
|
+
@swagger = try_load_swagger
|
58
|
+
end
|
59
|
+
|
60
|
+
# in unit tests, @swagger may be nil and last_response nil because no HTTP request was made
|
61
|
+
if @swagger.nil?
|
62
|
+
if @last_error
|
63
|
+
raise @last_error
|
64
|
+
else
|
65
|
+
raise "Load of swagger.json failed."
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
@swagger
|
30
70
|
end
|
31
71
|
|
32
72
|
def operations
|
33
73
|
return @@sharable_operations[api_endpoint] if shared_swagger && @@sharable_operations[api_endpoint]
|
34
74
|
|
75
|
+
if !@swagger && @lazy_swagger
|
76
|
+
load_swagger
|
77
|
+
end
|
78
|
+
|
35
79
|
return nil unless @swagger
|
36
80
|
@operations ||= Hash[
|
37
81
|
@swagger[:paths].map do |path_name, path_info|
|
38
82
|
path_info.map do |method, route_info|
|
39
83
|
route = @swagger[:basePath].to_s + path_name.to_s
|
40
|
-
[route_info[:operationId], {:route => route, :method => method, :info => route_info}]
|
84
|
+
[route_info[:operationId].to_sym, {:route => route, :method => method, :info => route_info}]
|
41
85
|
end
|
42
86
|
end.reduce(:+)
|
43
87
|
].freeze
|
@@ -70,7 +114,7 @@ module LookerSDK
|
|
70
114
|
private
|
71
115
|
|
72
116
|
def find_entry(method_name)
|
73
|
-
operations && operations[method_name.
|
117
|
+
operations && operations[method_name.to_sym] if dynamic
|
74
118
|
end
|
75
119
|
|
76
120
|
def invoke_remote(entry, method_name, *args, &block)
|
@@ -85,19 +129,25 @@ module LookerSDK
|
|
85
129
|
raise ArgumentError.new("wrong number of arguments (#{params_passed} for #{params_required}) in call to '#{method_name}'. See '#{method_link(entry)}'")
|
86
130
|
end
|
87
131
|
|
88
|
-
# substitute the actual params into the route template
|
89
|
-
params.each
|
132
|
+
# substitute the actual params into the route template, encoding if needed
|
133
|
+
params.each do |param|
|
134
|
+
value = args.shift.to_s
|
135
|
+
if value == CGI.unescape(value)
|
136
|
+
value = CGI.escape(value)
|
137
|
+
end
|
138
|
+
route.sub!("{#{param[:name]}}", value)
|
139
|
+
end
|
90
140
|
|
91
141
|
a = args.length > 0 ? args[0] : {}
|
92
142
|
b = args.length > 1 ? args[1] : {}
|
93
143
|
|
94
144
|
method = entry[:method].to_sym
|
95
145
|
case method
|
96
|
-
when :get then get(route, a, &block)
|
97
|
-
when :post then post(route, a, merge_content_type_if_body(a, b), &block)
|
98
|
-
when :put then put(route, a, merge_content_type_if_body(a, b), &block)
|
99
|
-
when :patch then patch(route, a, merge_content_type_if_body(a, b), &block)
|
100
|
-
when :delete then delete(route, a) ; @raw_responses ? last_response : delete_succeeded?
|
146
|
+
when :get then get(route, a, true, &block)
|
147
|
+
when :post then post(route, a, merge_content_type_if_body(a, b), true, &block)
|
148
|
+
when :put then put(route, a, merge_content_type_if_body(a, b), true, &block)
|
149
|
+
when :patch then patch(route, a, merge_content_type_if_body(a, b), true, &block)
|
150
|
+
when :delete then delete(route, a, true) ; @raw_responses ? last_response : delete_succeeded?
|
101
151
|
else raise "unsupported method '#{method}' in call to '#{method_name}'. See '#{method_link(entry)}'"
|
102
152
|
end
|
103
153
|
end
|
data/lib/looker-sdk/client.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require 'sawyer'
|
2
26
|
require 'ostruct'
|
3
27
|
require 'looker-sdk/sawyer_patch'
|
@@ -34,7 +58,9 @@ module LookerSDK
|
|
34
58
|
@original_options = options.dup
|
35
59
|
|
36
60
|
load_credentials_from_netrc unless application_credentials?
|
37
|
-
|
61
|
+
if !@lazy_swagger
|
62
|
+
load_swagger
|
63
|
+
end
|
38
64
|
self.dynamic = true
|
39
65
|
end
|
40
66
|
|
@@ -65,11 +91,12 @@ module LookerSDK
|
|
65
91
|
#
|
66
92
|
# @param url [String] The path, relative to {#api_endpoint}
|
67
93
|
# @param options [Hash] Query and header params for request
|
94
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
68
95
|
# @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
|
69
96
|
# the server. The block must return true to continue, or false to abort streaming.
|
70
97
|
# @return [Sawyer::Resource]
|
71
|
-
def get(url, options = {}, &block)
|
72
|
-
request :get, url, nil, parse_query_and_convenience_headers(options), &block
|
98
|
+
def get(url, options = {}, encoded=false, &block)
|
99
|
+
request :get, url, nil, parse_query_and_convenience_headers(options), encoded, &block
|
73
100
|
end
|
74
101
|
|
75
102
|
# Make a HTTP POST request
|
@@ -77,11 +104,12 @@ module LookerSDK
|
|
77
104
|
# @param url [String] The path, relative to {#api_endpoint}
|
78
105
|
# @param data [String|Array|Hash] Body and optionally header params for request
|
79
106
|
# @param options [Hash] Optional header params for request
|
107
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
80
108
|
# @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
|
81
109
|
# the server. The block must return true to continue, or false to abort streaming.
|
82
110
|
# @return [Sawyer::Resource]
|
83
|
-
def post(url, data = {}, options = {}, &block)
|
84
|
-
request :post, url, data, parse_query_and_convenience_headers(options), &block
|
111
|
+
def post(url, data = {}, options = {}, encoded=false, &block)
|
112
|
+
request :post, url, data, parse_query_and_convenience_headers(options), encoded, &block
|
85
113
|
end
|
86
114
|
|
87
115
|
# Make a HTTP PUT request
|
@@ -89,11 +117,12 @@ module LookerSDK
|
|
89
117
|
# @param url [String] The path, relative to {#api_endpoint}
|
90
118
|
# @param data [String|Array|Hash] Body and optionally header params for request
|
91
119
|
# @param options [Hash] Optional header params for request
|
120
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
92
121
|
# @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
|
93
122
|
# the server. The block must return true to continue, or false to abort streaming.
|
94
123
|
# @return [Sawyer::Resource]
|
95
|
-
def put(url, data = {}, options = {}, &block)
|
96
|
-
request :put, url, data, parse_query_and_convenience_headers(options), &block
|
124
|
+
def put(url, data = {}, options = {}, encoded=false, &block)
|
125
|
+
request :put, url, data, parse_query_and_convenience_headers(options), encoded, &block
|
97
126
|
end
|
98
127
|
|
99
128
|
# Make a HTTP PATCH request
|
@@ -101,29 +130,32 @@ module LookerSDK
|
|
101
130
|
# @param url [String] The path, relative to {#api_endpoint}
|
102
131
|
# @param data [String|Array|Hash] Body and optionally header params for request
|
103
132
|
# @param options [Hash] Optional header params for request
|
133
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
104
134
|
# @param &block [Block] Block to be called with |response, chunk| for each chunk of the body from
|
105
135
|
# the server. The block must return true to continue, or false to abort streaming.
|
106
136
|
# @return [Sawyer::Resource]
|
107
|
-
def patch(url, data = {}, options = {}, &block)
|
108
|
-
request :patch, url, data, parse_query_and_convenience_headers(options), &block
|
137
|
+
def patch(url, data = {}, options = {}, encoded=false, &block)
|
138
|
+
request :patch, url, data, parse_query_and_convenience_headers(options), encoded, &block
|
109
139
|
end
|
110
140
|
|
111
141
|
# Make a HTTP DELETE request
|
112
142
|
#
|
113
143
|
# @param url [String] The path, relative to {#api_endpoint}
|
114
144
|
# @param options [Hash] Query and header params for request
|
145
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
115
146
|
# @return [Sawyer::Resource]
|
116
|
-
def delete(url, options = {}, &block)
|
117
|
-
request :delete, url, nil, parse_query_and_convenience_headers(options)
|
147
|
+
def delete(url, options = {}, encoded=false, &block)
|
148
|
+
request :delete, url, nil, parse_query_and_convenience_headers(options), encoded, &block
|
118
149
|
end
|
119
150
|
|
120
151
|
# Make a HTTP HEAD request
|
121
152
|
#
|
122
153
|
# @param url [String] The path, relative to {#api_endpoint}
|
123
154
|
# @param options [Hash] Query and header params for request
|
155
|
+
# @param encoded [Boolean] true: url already encoded, false: url needs encoding
|
124
156
|
# @return [Sawyer::Resource]
|
125
|
-
def head(url, options = {}, &block)
|
126
|
-
request :head, url, nil, parse_query_and_convenience_headers(options)
|
157
|
+
def head(url, options = {}, encoded=false, &block)
|
158
|
+
request :head, url, nil, parse_query_and_convenience_headers(options), encoded
|
127
159
|
end
|
128
160
|
|
129
161
|
# Make one or more HTTP GET requests, optionally fetching
|
@@ -168,7 +200,7 @@ module LookerSDK
|
|
168
200
|
Sawyer::Agent.new(api_endpoint, options) do |http|
|
169
201
|
http.headers[:accept] = default_media_type
|
170
202
|
http.headers[:user_agent] = user_agent
|
171
|
-
http.authorization
|
203
|
+
http.headers[:authorization] = "token #{@access_token}" if token_authenticated?
|
172
204
|
end
|
173
205
|
end
|
174
206
|
|
@@ -190,10 +222,34 @@ module LookerSDK
|
|
190
222
|
#
|
191
223
|
# @return http status code
|
192
224
|
def alive
|
193
|
-
|
225
|
+
without_authentication do
|
226
|
+
get '/alive'
|
227
|
+
end
|
194
228
|
last_response.status
|
195
229
|
end
|
196
230
|
|
231
|
+
# Are we connected to the server? - Does not attempt to authenticate.
|
232
|
+
def alive?
|
233
|
+
begin
|
234
|
+
without_authentication do
|
235
|
+
get('/alive')
|
236
|
+
end
|
237
|
+
true
|
238
|
+
rescue
|
239
|
+
false
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
# Are we connected and authenticated to the server?
|
244
|
+
def authenticated?
|
245
|
+
begin
|
246
|
+
ensure_logged_in
|
247
|
+
true
|
248
|
+
rescue
|
249
|
+
false
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
197
253
|
# Response for last HTTP request
|
198
254
|
#
|
199
255
|
# @return [Sawyer::Response]
|
@@ -248,12 +304,16 @@ module LookerSDK
|
|
248
304
|
@agent = nil
|
249
305
|
end
|
250
306
|
|
251
|
-
def request(method, path, data, options, &block)
|
307
|
+
def request(method, path, data, options, encoded, &block)
|
252
308
|
ensure_logged_in
|
253
309
|
begin
|
310
|
+
path = path.to_s
|
311
|
+
if !encoded
|
312
|
+
path = URI::Parser.new.escape(path)
|
313
|
+
end
|
254
314
|
@last_response = @last_error = nil
|
255
315
|
return stream_request(method, path, data, options, &block) if block_given?
|
256
|
-
@last_response = response = agent.call(method,
|
316
|
+
@last_response = response = agent.call(method, path, data, options)
|
257
317
|
@raw_responses ? response : response.data
|
258
318
|
rescue StandardError => e
|
259
319
|
@last_error = e
|
@@ -365,15 +425,20 @@ module LookerSDK
|
|
365
425
|
|
366
426
|
# slight modification to the base class' decode_hash_value function to
|
367
427
|
# less permissive when decoding time values.
|
428
|
+
# also prevent conversion from non-string types to Time e.g. integer/float timestamp
|
368
429
|
#
|
369
430
|
# See https://github.com/looker/looker-sdk-ruby/issues/53 for more details
|
370
431
|
#
|
371
432
|
# Base class function that we're overriding: https://github.com/lostisland/sawyer/blob/master/lib/sawyer/serializer.rb#L101-L121
|
372
433
|
def decode_hash_value(key, value)
|
373
|
-
if time_field?(key, value)
|
374
|
-
|
375
|
-
|
376
|
-
|
434
|
+
if time_field?(key, value)
|
435
|
+
if value.is_a?(String)
|
436
|
+
begin
|
437
|
+
Time.iso8601(value)
|
438
|
+
rescue ArgumentError
|
439
|
+
value
|
440
|
+
end
|
441
|
+
else
|
377
442
|
value
|
378
443
|
end
|
379
444
|
else
|
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
module LookerSDK
|
2
26
|
|
3
27
|
# Configuration options for {Client}, defaulting to values
|
@@ -42,7 +66,8 @@ module LookerSDK
|
|
42
66
|
attr_accessor :access_token, :auto_paginate, :client_id,
|
43
67
|
:client_secret, :default_media_type, :connection_options,
|
44
68
|
:middleware, :netrc, :netrc_file,
|
45
|
-
:per_page, :proxy, :user_agent, :faraday, :swagger, :shared_swagger, :raw_responses
|
69
|
+
:per_page, :proxy, :user_agent, :faraday, :swagger, :shared_swagger, :raw_responses,
|
70
|
+
:lazy_swagger
|
46
71
|
attr_writer :web_endpoint, :api_endpoint
|
47
72
|
|
48
73
|
class << self
|
@@ -68,7 +93,8 @@ module LookerSDK
|
|
68
93
|
:shared_swagger,
|
69
94
|
:swagger,
|
70
95
|
:raw_responses,
|
71
|
-
:web_endpoint
|
96
|
+
:web_endpoint,
|
97
|
+
:lazy_swagger,
|
72
98
|
]
|
73
99
|
end
|
74
100
|
end
|
data/lib/looker-sdk/default.rb
CHANGED
@@ -1,3 +1,27 @@
|
|
1
|
+
############################################################################################
|
2
|
+
# The MIT License (MIT)
|
3
|
+
#
|
4
|
+
# Copyright (c) 2018 Looker Data Sciences, Inc.
|
5
|
+
#
|
6
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
7
|
+
# of this software and associated documentation files (the "Software"), to deal
|
8
|
+
# in the Software without restriction, including without limitation the rights
|
9
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
# copies of the Software, and to permit persons to whom the Software is
|
11
|
+
# furnished to do so, subject to the following conditions:
|
12
|
+
#
|
13
|
+
# The above copyright notice and this permission notice shall be included in
|
14
|
+
# all copies or substantial portions of the Software.
|
15
|
+
#
|
16
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
17
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
18
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
19
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
20
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
21
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
22
|
+
# THE SOFTWARE.
|
23
|
+
############################################################################################
|
24
|
+
|
1
25
|
require 'looker-sdk/response/raise_error'
|
2
26
|
require 'looker-sdk/version'
|
3
27
|
|
@@ -101,6 +125,12 @@ module LookerSDK
|
|
101
125
|
false
|
102
126
|
end
|
103
127
|
|
128
|
+
# Default behavior for loading swagger during initialization or at first call
|
129
|
+
# @return [Boolean]
|
130
|
+
def lazy_swagger
|
131
|
+
false
|
132
|
+
end
|
133
|
+
|
104
134
|
def raw_responses
|
105
135
|
false
|
106
136
|
end
|