presto-client 0.5.9 → 0.5.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 778236be62b2a245780444b105de67acd22e5438
4
- data.tar.gz: 227f62d8e1037f10ebfaa43b3899f9c2b9ab558a
3
+ metadata.gz: 9766f45b1fccb135815e0e24e710a344d3f52758
4
+ data.tar.gz: 8f08cf0d14c1290665806ff20f72aa0152892897
5
5
  SHA512:
6
- metadata.gz: 37d25df99ebf6b395f9d2ddfb6359cb66f65437beba8436e37e04b901dfea0ebf0eff6866be4d18c82d9debf01a6860e1c6be8cae1e45cd332554366ec2a588a
7
- data.tar.gz: 68e8dd6ae42a3a12be1def41eb4c94d1b467222f8dd1cea9269ba5402aacaa8c62a37b2b3ac35f5241c5429ab1ee73f7d8968bcdd4340c995ff7e56de589a85b
6
+ metadata.gz: 1b75b118f64cc17d459c6a15954cf785c41f9fe47fa7e3dd31352be4bfbe97b67a8e1564f1d1138d1f3a6743cb9285cea0dc2244c87fae0b8b6f95e3852ae316
7
+ data.tar.gz: e6237ed2c819394162fd6691e9fcf9e9902db9ea2d173bbecc6352822eaeff70448a998bf06b042c03499c44bd4c5c14f177f97cdeb324594fb6e43d54fc0717
data/ChangeLog CHANGED
@@ -1,4 +1,9 @@
1
+ 2018-03-22 version 0.5.10
2
+
3
+ * Added client_info, client_tags, and http_headers options.
4
+
1
5
  2018-03-02 version 0.5.9
6
+
2
7
  * Added error_name field at PrestoQueryError
3
8
 
4
9
  2017-11-13 version 0.5.8
data/README.md CHANGED
@@ -87,11 +87,14 @@ $ bundle exec rake modelgen:latest
87
87
  * **catalog** sets catalog (connector) name of Presto such as `hive-cdh4`, `hive-hadoop1`, etc.
88
88
  * **schema** sets default schema name of Presto. You need to use qualified name like `FROM myschema.table1` to use non-default schemas.
89
89
  * **source** sets source name to connect to a Presto. This name is shown on Presto web interface.
90
+ * **client_info** sets client info to queries. It can be a string to pass a raw string, or an object that can be encoded to JSON.
91
+ * **client_tags** sets client tags to queries. It needs to be an array of strings. The tags are shown on web interface.
90
92
  * **user** sets user name to connect to a Presto.
91
93
  * **password** sets a password to connect to Presto using basic auth.
92
94
  * **time_zone** sets time zone of queries. Time zone affects some functions such as `format_datetime`.
93
95
  * **language** sets language of queries. Language affects some functions such as `format_datetime`.
94
96
  * **properties** set session properties. Session properties affect internal behavior such as `hive.force_local_scheduling: true`, `raptor.reader_stream_buffer_size: "32MB"`, etc.
97
+ * **http_headers** sets custom HTTP headers. It must be a Hash of string to string.
95
98
  * **http_proxy** sets host:port of a HTTP proxy server.
96
99
  * **http_debug** enables debug message to STDOUT for each HTTP requests.
97
100
  * **http_open_timeout** sets timeout in seconds to open new HTTP connection.
@@ -23,6 +23,8 @@ module Presto::Client
23
23
  PRESTO_TIME_ZONE = "X-Presto-Time-Zone"
24
24
  PRESTO_LANGUAGE = "X-Presto-Language"
25
25
  PRESTO_SESSION = "X-Presto-Session"
26
+ PRESTO_CLIENT_INFO = "X-Presto-Client-Info";
27
+ PRESTO_CLIENT_TAGS = "X-Presto-Client-Tags";
26
28
 
27
29
  PRESTO_CURRENT_STATE = "X-Presto-Current-State"
28
30
  PRESTO_MAX_WAIT = "X-Presto-Max-Wait"
@@ -118,6 +120,12 @@ module Presto::Client
118
120
  if v = options[:properties]
119
121
  headers[PrestoHeaders::PRESTO_SESSION] = encode_properties(v)
120
122
  end
123
+ if v = options[:client_info]
124
+ headers[PrestoHeaders::PRESTO_CLIENT_INFO] = encode_client_info(v)
125
+ end
126
+ if v = options[:client_tags]
127
+ headers[PrestoHeaders::PRESTO_CLIENT_TAGS] = encode_client_tags(v)
128
+ end
121
129
  if options[:enable_x_msgpack]
122
130
  # option name is enable_"x"_msgpack because "Accept: application/x-msgpack" header is
123
131
  # not officially supported by Presto. We can use this option only if a proxy server
@@ -125,6 +133,9 @@ module Presto::Client
125
133
  # name should be enable_msgpack, which might be slightly different behavior.
126
134
  headers['Accept'] = 'application/x-msgpack,application/json'
127
135
  end
136
+ if v = options[:http_headers]
137
+ headers.merge!(v)
138
+ end
128
139
  headers
129
140
  end
130
141
 
@@ -149,6 +160,18 @@ module Presto::Client
149
160
  end.join("\r\n#{PrestoHeaders::PRESTO_SESSION}: ")
150
161
  end
151
162
 
152
- private_class_method :faraday_ssl_options, :optional_headers, :encode_properties
163
+ def self.encode_client_info(info)
164
+ if info.is_a?(String)
165
+ info
166
+ else
167
+ JSON.dump(info)
168
+ end
169
+ end
170
+
171
+ def self.encode_client_tags(tags)
172
+ Array(tags).join(",")
173
+ end
174
+
175
+ private_class_method :faraday_ssl_options, :optional_headers, :encode_properties, :encode_client_info, :encode_client_tags
153
176
 
154
177
  end
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.5.9"
18
+ VERSION = "0.5.10"
19
19
  end
20
20
  end
@@ -9,7 +9,6 @@ describe Presto::Client::StatementClient do
9
9
  schema: "default",
10
10
  time_zone: "US/Pacific",
11
11
  language: "ja_JP",
12
- properties: {"hello" => "world", "name"=>"value"},
13
12
  debug: true,
14
13
  }
15
14
  end
@@ -39,7 +38,6 @@ describe Presto::Client::StatementClient do
39
38
  "X-Presto-User" => options[:user],
40
39
  "X-Presto-Language" => options[:language],
41
40
  "X-Presto-Time-Zone" => options[:time_zone],
42
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
43
41
  }).to_return(body: response_json.to_json)
44
42
 
45
43
  StatementClient.new(faraday, query, options)
@@ -64,7 +62,6 @@ describe Presto::Client::StatementClient do
64
62
  "X-Presto-User" => options[:user],
65
63
  "X-Presto-Language" => options[:language],
66
64
  "X-Presto-Time-Zone" => options[:time_zone],
67
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
68
65
  }).to_return(body: response_json2.to_json)
69
66
 
70
67
  stub_request(:get, "localhost/v1/next_uri").
@@ -75,7 +72,6 @@ describe Presto::Client::StatementClient do
75
72
  "X-Presto-User" => options[:user],
76
73
  "X-Presto-Language" => options[:language],
77
74
  "X-Presto-Time-Zone" => options[:time_zone],
78
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
79
75
  }).to_return(body: lambda{|req|if retry_p; response_json.to_json; else; retry_p=true; raise Timeout::Error.new("execution expired"); end })
80
76
 
81
77
  sc = StatementClient.new(faraday, query, options.merge(http_open_timeout: 1))
@@ -95,7 +91,6 @@ describe Presto::Client::StatementClient do
95
91
  "X-Presto-User" => options[:user],
96
92
  "X-Presto-Language" => options[:language],
97
93
  "X-Presto-Time-Zone" => options[:time_zone],
98
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
99
94
  "Accept" => "application/x-msgpack,application/json"
100
95
  }).to_return(body: MessagePack.dump(response_json2), headers: {"Content-Type" => "application/x-msgpack"})
101
96
 
@@ -107,7 +102,6 @@ describe Presto::Client::StatementClient do
107
102
  "X-Presto-User" => options[:user],
108
103
  "X-Presto-Language" => options[:language],
109
104
  "X-Presto-Time-Zone" => options[:time_zone],
110
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
111
105
  "Accept" => "application/x-msgpack,application/json"
112
106
  }).to_return(body: lambda{|req|if retry_p; MessagePack.dump(response_json); else; retry_p=true; raise Timeout::Error.new("execution expired"); end }, headers: {"Content-Type" => "application/x-msgpack"})
113
107
 
@@ -147,7 +141,6 @@ describe Presto::Client::StatementClient do
147
141
  "X-Presto-User" => options[:user],
148
142
  "X-Presto-Language" => options[:language],
149
143
  "X-Presto-Time-Zone" => options[:time_zone],
150
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
151
144
  }
152
145
 
153
146
  stub_request(:post, "http://localhost/v1/statement").
@@ -179,13 +172,71 @@ describe Presto::Client::StatementClient do
179
172
  "X-Presto-User" => options[:user],
180
173
  "X-Presto-Language" => options[:language],
181
174
  "X-Presto-Time-Zone" => options[:time_zone],
182
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: "),
183
175
  }).to_return(body: {}.to_json)
184
176
 
185
177
  Presto::Client.new(options).kill(query_id)
186
178
  end
187
179
  end
188
180
 
181
+ describe 'advanced HTTP headers' do
182
+ let(:headers) do
183
+ {
184
+ "User-Agent" => "presto-ruby/#{VERSION}",
185
+ "X-Presto-Catalog" => options[:catalog],
186
+ "X-Presto-Schema" => options[:schema],
187
+ "X-Presto-User" => options[:user],
188
+ "X-Presto-Language" => options[:language],
189
+ "X-Presto-Time-Zone" => options[:time_zone],
190
+ }
191
+ end
192
+
193
+ it "sets X-Presto-Session from properties" do
194
+ options[:properties] = {"hello" => "world", "name"=>"value"}
195
+
196
+ stub_request(:post, "localhost/v1/statement").
197
+ with(body: query,
198
+ headers: headers.merge({
199
+ "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
200
+ })).
201
+ to_return(body: response_json.to_json)
202
+
203
+ StatementClient.new(faraday, query, options)
204
+ end
205
+
206
+ it "sets X-Presto-Client-Info from client_info" do
207
+ options[:client_info] = "raw"
208
+
209
+ stub_request(:post, "localhost/v1/statement").
210
+ with(body: query,
211
+ headers: headers.merge("X-Presto-Client-Info" => "raw")).
212
+ to_return(body: response_json.to_json)
213
+
214
+ StatementClient.new(faraday, query, options)
215
+ end
216
+
217
+ it "sets X-Presto-Client-Info in JSON from client_info" do
218
+ options[:client_info] = {"k1" => "v1", "k2" => "v2"}
219
+
220
+ stub_request(:post, "localhost/v1/statement").
221
+ with(body: query,
222
+ headers: headers.merge("X-Presto-Client-Info" => '{"k1":"v1","k2":"v2"}')).
223
+ to_return(body: response_json.to_json)
224
+
225
+ StatementClient.new(faraday, query, options)
226
+ end
227
+
228
+ it "sets X-Presto-Client-Tags" do
229
+ options[:client_tags] = ["k1:v1", "k2:v2"]
230
+
231
+ stub_request(:post, "localhost/v1/statement").
232
+ with(body: query,
233
+ headers: headers.merge("X-Presto-Client-Tags" => "k1:v1,k2:v2")).
234
+ to_return(body: response_json.to_json)
235
+
236
+ StatementClient.new(faraday, query, options)
237
+ end
238
+ end
239
+
189
240
  describe 'HTTP basic auth' do
190
241
  let(:password) { 'abcd' }
191
242
 
@@ -199,7 +250,6 @@ describe Presto::Client::StatementClient do
199
250
  "X-Presto-User" => options[:user],
200
251
  "X-Presto-Language" => options[:language],
201
252
  "X-Presto-Time-Zone" => options[:time_zone],
202
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
203
253
  },
204
254
  basic_auth: [options[:user], password]
205
255
  ).to_return(body: response_json.to_json)
@@ -336,7 +386,6 @@ describe Presto::Client::StatementClient do
336
386
  "X-Presto-User" => options[:user],
337
387
  "X-Presto-Language" => options[:language],
338
388
  "X-Presto-Time-Zone" => options[:time_zone],
339
- "X-Presto-Session" => options[:properties].map {|k,v| "#{k}=#{v}"}.join("\r\nX-Presto-Session: ")
340
389
  }).to_return(body: nested_json.to_json(:max_nesting => false))
341
390
 
342
391
  StatementClient.new(faraday, query, options)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: presto-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.9
4
+ version: 0.5.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-02 00:00:00.000000000 Z
11
+ date: 2018-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -169,7 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  version: '0'
170
170
  requirements: []
171
171
  rubyforge_project:
172
- rubygems_version: 2.6.10
172
+ rubygems_version: 2.6.13
173
173
  signing_key:
174
174
  specification_version: 4
175
175
  summary: Presto client library