td-client 0.8.54 → 0.8.55
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.
- 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
         
     |