presto-client 0.4.16 → 0.4.17

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: c24fbba9d7c847c89172174c795ee15f0a904390
4
- data.tar.gz: 79c640e5a3c73c96d2b302954bca4246f2831106
3
+ metadata.gz: 33c1344d5c5fdbd9243609bee287ead639459b42
4
+ data.tar.gz: 3930795b17c3c7568f0f907fe7719aeda4552af9
5
5
  SHA512:
6
- metadata.gz: b53c68da6dac166ffeffa33f4b4b02b0fea9b8febdecd4dfa7233a88ef1ff48434ad18db3255b111bc27c4b3402bf62fca41a9ddfa570e2f33cbaeea706b8b25
7
- data.tar.gz: 83e0759cbf3cee85e8c8899307f2c813ecfacd225e7a83c587260bd4d21ff5dbd54af4b641206b2c11d2441763bb98224dff1aa98f8b593894ab86b878a54bb1
6
+ metadata.gz: 6dacfb03dc4ec93ff88db6dba2cd1d015ddd67fad92fdf25732434763e7ef52c7ab58e58186068bf6cc133e7301fea9f38d03cc0616ffdd7f498ed5c215cddb6
7
+ data.tar.gz: 06986f8b3bc2f52b518e3e34d0d05a9edade2aae43b3abdd65f80c5f32695eb1fd03042b99f6b0d9bc34b9aab69adea882f6ed458b13966caa27b8f6ce1eda94
data/ChangeLog CHANGED
@@ -1,11 +1,18 @@
1
+ 2016-08-09 version 0.4.17:
2
+
3
+ * Added support for :ssl option.
4
+
5
+
1
6
  2016-08-03 version 0.4.16:
2
7
 
3
8
  * Upgraded Presto model version to 0.151
4
9
 
10
+
5
11
  2016-08-03 version 0.4.15:
6
12
 
7
13
  * decode method of model classes validate Hash type
8
14
 
15
+
9
16
  2016-08-02 version 0.4.14:
10
17
 
11
18
  * Added support for resuming fetching query results by using new `Query.resume(next_uri, options)` method (@tetrakai++)
data/README.md CHANGED
@@ -14,24 +14,28 @@ require 'presto-client'
14
14
 
15
15
  # create a client object:
16
16
  client = Presto::Client.new(
17
- server: "localhost:8880",
17
+ server: "localhost:8880", # required option
18
+ ssl: {verify: false},
18
19
  catalog: "native",
19
20
  schema: "default",
20
21
  user: "frsyuki",
21
- time_zone: "US/Pacific", # optional
22
- language: "English", # optional
23
- properties: {"hello" => "world", "mycatalog.hello" => "world"}, # optional
24
- http_proxy: "proxy.example.com:8080", # optional
22
+ time_zone: "US/Pacific",
23
+ language: "English",
24
+ properties: {
25
+ "hive.force_local_scheduling": true,
26
+ "raptor.reader_stream_buffer_size": "32MB"
27
+ },
28
+ http_proxy: "proxy.example.com:8080",
25
29
  http_debug: true,
26
30
  )
27
31
 
28
- # run a query and get results:
32
+ # run a query and get results as an array of arrays:
29
33
  columns, rows = client.run("select * from sys.node")
30
34
  rows.each {|row|
31
- p row
35
+ p row # row is an array
32
36
  }
33
37
 
34
- # run a query and get results as a hash:
38
+ # run a query and get results as an array of hashes:
35
39
  results = client.run_with_names("select alpha, 1 AS beta from tablename")
36
40
  results.each {|row|
37
41
  p row['alpha'] # access by name
@@ -40,32 +44,44 @@ results.each {|row|
40
44
  p row.values[1]
41
45
  }
42
46
 
43
- # another way to run a query and fetch results streamingly:
44
- # start running a query on presto
47
+ # run a query and fetch results streamingly:
45
48
  client.query("select * from sys.node") do |q|
46
- # wait for completion and get columns
49
+ # get columns:
47
50
  q.columns.each {|column|
48
51
  puts "column: #{column.name}.#{column.type}"
49
52
  }
50
53
 
51
- # get query results
54
+ # get query results. it feeds more rows until
55
+ # query execution finishes:
52
56
  q.each_row {|row|
53
- p row
57
+ p row # row is an array
54
58
  }
55
59
  end
56
60
  ```
57
61
 
58
62
  ## Options
59
63
 
60
- * **server** sets address[:port] to a Presto coordinator
64
+ * **server** sets address (and port) of a Presto coordinator server.
65
+ * **ssl** enables https.
66
+ * Setting `true` enables SSL and verifies server certificate using system's built-in certificates.
67
+ * Setting `{verify: false}` enables SSL but doesn't verify server certificate.
68
+ * Setting a Hash object enables SSL and verify server certificate with options:
69
+ * **ca_file**: path of a CA certification file in PEM format
70
+ * **ca_path**: path of a CA certification directory containing certifications in PEM format
71
+ * **cert_store**: a `OpenSSL::X509::Store` object used for verification
72
+ * **client_cert**: a `OpenSSL::X509::Certificate` object as client certificate
73
+ * **client_key**: a `OpenSSL::PKey::RSA` or `OpenSSL::PKey::DSA` object used for client certificate
61
74
  * **catalog** sets catalog (connector) name of Presto such as `hive-cdh4`, `hive-hadoop1`, etc.
62
- * **schema** sets default schema name of Presto. You can read other schemas by qualified name like `FROM myschema.table1`.
75
+ * **schema** sets default schema name of Presto. You need to use qualified name like `FROM myschema.table1` to use non-default schemas.
63
76
  * **source** sets source name to connect to a Presto. This name is shown on Presto web interface.
64
77
  * **user** sets user name to connect to a Presto.
65
- * **time_zone** sets time zone of the query. Time zone affects some functions such as `format_datetime`.
66
- * **language** sets language of the query. Language affects some functions such as `format_datetime`.
78
+ * **time_zone** sets time zone of queries. Time zone affects some functions such as `format_datetime`.
79
+ * **language** sets language of queries. Language affects some functions such as `format_datetime`.
80
+ * **properties** set session properties. Session properties affect internal behavior such as `hive.force_local_scheduling: true`, `raptor.reader_stream_buffer_size: "32MB"`, etc.
67
81
  * **http_proxy** sets host:port of a HTTP proxy server.
68
- * **http_debug** enables debug message to STDOUT for each HTTP requests
69
- * **http_open_timeout** sets timeout in seconds to open new HTTP connection
70
- * **http_timeout** sets timeout in seconds to read data from a server
82
+ * **http_debug** enables debug message to STDOUT for each HTTP requests.
83
+ * **http_open_timeout** sets timeout in seconds to open new HTTP connection.
84
+ * **http_timeout** sets timeout in seconds to read data from a server.
85
+
86
+ See [RDoc](http://www.rubydoc.info/gems/presto-client/) for the full documentation.
71
87
 
@@ -35,8 +35,12 @@ module Presto::Client
35
35
  raise ArgumentError, ":server option is required"
36
36
  end
37
37
 
38
+ ssl = faraday_ssl_options(options)
39
+
40
+ url = "#{ssl ? "https" : "http"}://#{server}"
38
41
  proxy = options[:http_proxy] || options[:proxy] # :proxy is obsoleted
39
- faraday = Faraday.new(url: "http://#{server}", proxy: "#{proxy}") do |faraday|
42
+
43
+ faraday = Faraday.new(url: url, proxy: "#{proxy}", ssl: ssl) do |faraday|
40
44
  #faraday.request :url_encoded
41
45
  faraday.response :logger if options[:http_debug]
42
46
  faraday.adapter Faraday.default_adapter
@@ -45,7 +49,35 @@ module Presto::Client
45
49
  return faraday
46
50
  end
47
51
 
48
- private_class_method :faraday_client
52
+ def self.faraday_ssl_options(options)
53
+ ssl = options[:ssl]
54
+
55
+ case ssl
56
+ when true
57
+ ssl = {verify: true}
58
+
59
+ when Hash
60
+ verify = ssl.fetch(:verify, true)
61
+ case verify
62
+ when true
63
+ # detailed SSL options. pass through to faraday
64
+ when nil, false
65
+ ssl = {verify: false}
66
+ else
67
+ raise ArgumentError, "Can't convert #{verify.class} of :verify option of :ssl option to true or false"
68
+ end
69
+
70
+ when nil, false
71
+ ssl = false
72
+
73
+ else
74
+ raise ArgumentError, "Can't convert #{ssl.class} of :ssl option to true, false, or Hash"
75
+ end
76
+
77
+ return ssl
78
+ end
79
+
80
+ private_class_method :faraday_client, :faraday_ssl_options
49
81
 
50
82
  def initialize(api)
51
83
  @api = api
@@ -15,6 +15,6 @@
15
15
  #
16
16
  module Presto
17
17
  module Client
18
- VERSION = "0.4.16"
18
+ VERSION = "0.4.17"
19
19
  end
20
20
  end
@@ -101,5 +101,84 @@ describe Presto::Client::StatementClient do
101
101
  })
102
102
  end.should raise_error(TypeError, /String to Hash/)
103
103
  end
104
+
105
+ describe "ssl" do
106
+ it "is disabled by default" do
107
+ f = Query.__send__(:faraday_client, {
108
+ server: "localhost",
109
+ })
110
+ f.url_prefix.to_s.should == "http://localhost/"
111
+ end
112
+
113
+ it "is enabled with ssl: true" do
114
+ f = Query.__send__(:faraday_client, {
115
+ server: "localhost",
116
+ ssl: true,
117
+ })
118
+ f.url_prefix.to_s.should == "https://localhost/"
119
+ f.ssl.verify?.should == true
120
+ end
121
+
122
+ it "is enabled with ssl: {verify: false}" do
123
+ f = Query.__send__(:faraday_client, {
124
+ server: "localhost",
125
+ ssl: {verify: false}
126
+ })
127
+ f.url_prefix.to_s.should == "https://localhost/"
128
+ f.ssl.verify?.should == false
129
+ end
130
+
131
+ it "rejects invalid ssl: verify: object" do
132
+ lambda do
133
+ f = Query.__send__(:faraday_client, {
134
+ server: "localhost",
135
+ ssl: {verify: "??"}
136
+ })
137
+ end.should raise_error(ArgumentError, /String/)
138
+ end
139
+
140
+ it "is enabled with ssl: Hash" do
141
+ require 'openssl'
142
+
143
+ ssl = {
144
+ ca_file: "/path/to/dummy.pem",
145
+ ca_path: "/path/to/pemdir",
146
+ cert_store: OpenSSL::X509::Store.new,
147
+ client_cert: OpenSSL::X509::Certificate.new,
148
+ client_key: OpenSSL::PKey::DSA.new,
149
+ }
150
+
151
+ f = Query.__send__(:faraday_client, {
152
+ server: "localhost",
153
+ ssl: ssl,
154
+ })
155
+
156
+ f.url_prefix.to_s.should == "https://localhost/"
157
+ f.ssl.verify?.should == true
158
+ f.ssl.ca_file.should == ssl[:ca_file]
159
+ f.ssl.ca_path.should == ssl[:ca_path]
160
+ f.ssl.cert_store.should == ssl[:cert_store]
161
+ f.ssl.client_cert.should == ssl[:client_cert]
162
+ f.ssl.client_key.should == ssl[:client_key]
163
+ end
164
+
165
+ it "rejects an invalid string" do
166
+ lambda do
167
+ Query.__send__(:faraday_client, {
168
+ server: "localhost",
169
+ ssl: '??',
170
+ })
171
+ end.should raise_error(ArgumentError, /String/)
172
+ end
173
+
174
+ it "rejects an integer" do
175
+ lambda do
176
+ Query.__send__(:faraday_client, {
177
+ server: "localhost",
178
+ ssl: 3,
179
+ })
180
+ end.should raise_error(ArgumentError, /:ssl/)
181
+ end
182
+ end
104
183
  end
105
184
 
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.4.16
4
+ version: 0.4.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-03 00:00:00.000000000 Z
11
+ date: 2016-08-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday