td-client 0.8.54 → 0.8.55
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +21 -14
- data/lib/td/client/api.rb +50 -25
- data/lib/td/client/version.rb +1 -1
- metadata +18 -2
data/ChangeLog
CHANGED
@@ -1,75 +1,82 @@
|
|
1
|
-
==
|
1
|
+
== 2013-09-13 version 0.8.55
|
2
|
+
|
3
|
+
* Use httpclient gem for import and bulk_import upload
|
4
|
+
* connect_timeout / read_timeout / send_timeout options are available.
|
5
|
+
* these options affect only import and bulk_import upload.
|
6
|
+
|
7
|
+
|
8
|
+
== 2013-08-23 version 0.8.54
|
2
9
|
|
3
10
|
* Support table's expire_days API
|
4
11
|
|
5
12
|
|
6
|
-
==
|
13
|
+
== 2013-07-22 version 0.8.53
|
7
14
|
|
8
15
|
* Add normalized_msgpack method to serialize Bignum type
|
9
16
|
|
10
17
|
|
11
|
-
==
|
18
|
+
== 2013-06-24 version 0.8.52
|
12
19
|
|
13
20
|
* Add last_log_timestamp to Table model
|
14
21
|
|
15
22
|
|
16
|
-
==
|
23
|
+
== 2013-06-17 version 0.8.51
|
17
24
|
|
18
25
|
* Relax dependent gem versions
|
19
26
|
|
20
27
|
|
21
|
-
==
|
28
|
+
== 2013-05-27 version 0.8.50
|
22
29
|
|
23
30
|
* add_user now requires email and passowrd
|
24
31
|
|
25
32
|
|
26
|
-
==
|
33
|
+
== 2013-05-06 version 0.8.49
|
27
34
|
|
28
35
|
* Add User-Agent header
|
29
36
|
* VERSION constant moved to under TreasureData::Client
|
30
37
|
|
31
38
|
|
32
|
-
==
|
39
|
+
== 2013-04-22 version 0.8.48
|
33
40
|
|
34
41
|
* create_schedule now takes :type option
|
35
42
|
* Fix wrong error messages
|
36
43
|
* Ues 'api-import' instead of 'api' on data import
|
37
44
|
|
38
45
|
|
39
|
-
==
|
46
|
+
== 2013-04-09 version 0.8.47
|
40
47
|
|
41
48
|
* Fix HTTP proxy handlig issue which is overwritten with ENV['HTTP_PROXY']
|
42
49
|
|
43
50
|
|
44
|
-
==
|
51
|
+
== 2013-03-29 version 0.8.46
|
45
52
|
|
46
53
|
* Add IP limitation API
|
47
54
|
|
48
55
|
|
49
|
-
==
|
56
|
+
== 2013-01-25 version 0.8.45
|
50
57
|
|
51
58
|
* Re-implement Client#job_status using /v3/job/status/job_id
|
52
59
|
instead of /v3/job/show/job_id to poll the progress of a job
|
53
60
|
|
54
61
|
|
55
|
-
==
|
62
|
+
== 2013-01-23 version 0.8.44
|
56
63
|
|
57
64
|
* Re-add json gem dependency
|
58
65
|
|
59
66
|
|
60
|
-
==
|
67
|
+
== 2013-01-23 version 0.8.43
|
61
68
|
|
62
69
|
* Add organization parameter support to create_database, query,
|
63
70
|
partial_delete, create_bulk_import, create_result
|
64
71
|
|
65
72
|
|
66
|
-
==
|
73
|
+
== 2013-01-16 version 0.8.42
|
67
74
|
|
68
75
|
* Added retry_limit to job and schedule APIs
|
69
76
|
* Increased table/database name limit from 32 to 256
|
70
77
|
|
71
78
|
|
72
|
-
==
|
79
|
+
== 2013-01-10 version 0.8.41
|
73
80
|
|
74
81
|
* Fix API#job_result_format to handle Content-Encoding properly
|
75
82
|
|
data/lib/td/client/api.rb
CHANGED
@@ -27,6 +27,8 @@ class API
|
|
27
27
|
require 'net/http'
|
28
28
|
require 'net/https'
|
29
29
|
require 'time'
|
30
|
+
#require 'faraday' # faraday doesn't support streaming upload with httpclient yet so now disabled
|
31
|
+
require 'httpclient'
|
30
32
|
|
31
33
|
@apikey = apikey
|
32
34
|
@user_agent = "TD-Client-Ruby: #{TreasureData::Client::VERSION}"
|
@@ -35,6 +37,10 @@ class API
|
|
35
37
|
endpoint = opts[:endpoint] || ENV['TD_API_SERVER'] || DEFAULT_ENDPOINT
|
36
38
|
uri = URI.parse(endpoint)
|
37
39
|
|
40
|
+
@connect_timeout = opts[:connect_timeout] || 60
|
41
|
+
@read_timeout = opts[:read_timeout] || 600
|
42
|
+
@send_timeout = opts[:send_timeout] || 600
|
43
|
+
|
38
44
|
case uri.scheme
|
39
45
|
when 'http', 'https'
|
40
46
|
@host = uri.host
|
@@ -63,10 +69,12 @@ class API
|
|
63
69
|
|
64
70
|
@http_proxy = opts[:http_proxy] || ENV['HTTP_PROXY']
|
65
71
|
if @http_proxy
|
66
|
-
if @http_proxy =~ /\Ahttp:\/\/(.*)\z/
|
67
|
-
|
68
|
-
|
69
|
-
|
72
|
+
http_proxy = if @http_proxy =~ /\Ahttp:\/\/(.*)\z/
|
73
|
+
$~[1]
|
74
|
+
else
|
75
|
+
@http_proxy
|
76
|
+
end
|
77
|
+
proxy_host, proxy_port = http_proxy.split(':',2)
|
70
78
|
proxy_port = (proxy_port ? proxy_port.to_i : 80)
|
71
79
|
@http_class = Net::HTTP::Proxy(proxy_host, proxy_port)
|
72
80
|
else
|
@@ -1404,28 +1412,26 @@ class API
|
|
1404
1412
|
end
|
1405
1413
|
|
1406
1414
|
def put(url, stream, size, opts = {})
|
1407
|
-
|
1408
|
-
|
1409
|
-
|
1410
|
-
|
1411
|
-
path = @base_path + url
|
1415
|
+
client, header = new_client(opts)
|
1416
|
+
client.send_timeout = @send_timeout
|
1417
|
+
client.receive_timeout = @read_timeout
|
1412
1418
|
|
1413
1419
|
header['Content-Type'] = 'application/octet-stream'
|
1414
1420
|
header['Content-Length'] = size.to_s
|
1415
1421
|
|
1416
|
-
|
1417
|
-
|
1418
|
-
|
1419
|
-
|
1420
|
-
|
1421
|
-
|
1422
|
-
|
1423
|
-
|
1424
|
-
|
1425
|
-
end
|
1422
|
+
body = if stream.class.name == 'StringIO'
|
1423
|
+
stream.string
|
1424
|
+
else
|
1425
|
+
stream
|
1426
|
+
end
|
1427
|
+
target = build_endpoint(url, opts[:host] || @host)
|
1428
|
+
response = client.put(target, body, header)
|
1429
|
+
return [response.code.to_s, response.body, response]
|
1430
|
+
end
|
1426
1431
|
|
1427
|
-
|
1428
|
-
|
1432
|
+
def build_endpoint(url, host)
|
1433
|
+
schema = @ssl ? 'https' : 'http'
|
1434
|
+
"#{schema}://#{host}:#{@port}/#{@base_path + url}"
|
1429
1435
|
end
|
1430
1436
|
|
1431
1437
|
def new_http(opts = {})
|
@@ -1450,17 +1456,36 @@ class API
|
|
1450
1456
|
return http, header
|
1451
1457
|
end
|
1452
1458
|
|
1459
|
+
def new_client(opts = {})
|
1460
|
+
client = HTTPClient.new(@http_proxy, @user_agent)
|
1461
|
+
client.connect_timeout = @connect_timeout
|
1462
|
+
|
1463
|
+
if @ssl
|
1464
|
+
client.ssl_config.add_trust_ca(File.join(File.dirname(__FILE__), '..', '..', '..', 'data', 'ca-bundle.crt'))
|
1465
|
+
client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
1466
|
+
end
|
1467
|
+
|
1468
|
+
header = {}
|
1469
|
+
if @apikey
|
1470
|
+
header['Authorization'] = "TD1 #{apikey}"
|
1471
|
+
end
|
1472
|
+
header['Date'] = Time.now.rfc2822
|
1473
|
+
|
1474
|
+
return client, header
|
1475
|
+
end
|
1476
|
+
|
1453
1477
|
def raise_error(msg, res, klass=nil)
|
1454
1478
|
begin
|
1455
1479
|
js = JSON.load(res.body)
|
1456
1480
|
msg = js['message']
|
1457
1481
|
error_code = js['error_code']
|
1482
|
+
status_code = res.code.to_s
|
1458
1483
|
|
1459
1484
|
if klass
|
1460
1485
|
raise klass, "#{error_code}: #{msg}"
|
1461
|
-
elsif
|
1486
|
+
elsif status_code == "404"
|
1462
1487
|
raise NotFoundError, "#{error_code}: #{msg}"
|
1463
|
-
elsif
|
1488
|
+
elsif status_code == "409"
|
1464
1489
|
raise AlreadyExistsError, "#{error_code}: #{msg}"
|
1465
1490
|
else
|
1466
1491
|
raise APIError, "#{error_code}: #{msg}"
|
@@ -1469,9 +1494,9 @@ class API
|
|
1469
1494
|
rescue
|
1470
1495
|
if klass
|
1471
1496
|
raise klass, "#{error_code}: #{msg}"
|
1472
|
-
elsif
|
1497
|
+
elsif status_code == "404"
|
1473
1498
|
raise NotFoundError, "#{msg}: #{res.body}"
|
1474
|
-
elsif
|
1499
|
+
elsif status_code == "409"
|
1475
1500
|
raise AlreadyExistsError, "#{msg}: #{res.body}"
|
1476
1501
|
else
|
1477
1502
|
raise APIError, "#{msg}: #{res.body}"
|
data/lib/td/client/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: td-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.55
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-09-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: msgpack
|
@@ -73,6 +73,22 @@ dependencies:
|
|
73
73
|
- - ! '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: 1.7.6
|
76
|
+
- !ruby/object:Gem::Dependency
|
77
|
+
name: httpclient
|
78
|
+
requirement: !ruby/object:Gem::Requirement
|
79
|
+
none: false
|
80
|
+
requirements:
|
81
|
+
- - ~>
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: 2.3.4
|
84
|
+
type: :runtime
|
85
|
+
prerelease: false
|
86
|
+
version_requirements: !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ~>
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: 2.3.4
|
76
92
|
- !ruby/object:Gem::Dependency
|
77
93
|
name: rspec
|
78
94
|
requirement: !ruby/object:Gem::Requirement
|