td-client 0.8.5 → 0.8.6

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 CHANGED
@@ -1,4 +1,9 @@
1
1
 
2
+ == 2012-01-19 version 0.8.6
3
+
4
+ * Check JSON format of HTTP responses
5
+
6
+
2
7
  == 2011-12-04 version 0.8.5
3
8
 
4
9
  * added new feature: ResultSet
@@ -88,8 +88,7 @@ class API
88
88
  if code != "200"
89
89
  raise_error("List databases failed", res)
90
90
  end
91
- # TODO format check
92
- js = JSON.load(body)
91
+ js = checked_json(body, %w[databases])
93
92
  names = js["databases"].map {|dbinfo| dbinfo['name'] }
94
93
  return names
95
94
  end
@@ -123,8 +122,7 @@ class API
123
122
  if code != "200"
124
123
  raise_error("List tables failed", res)
125
124
  end
126
- # TODO format check
127
- js = JSON.load(body)
125
+ js = checked_json(body, %w[tables])
128
126
  result = {}
129
127
  js["tables"].map {|m|
130
128
  name = m['name']
@@ -180,8 +178,7 @@ class API
180
178
  if code != "200"
181
179
  raise_error("Drop table failed", res)
182
180
  end
183
- # TODO format check
184
- js = JSON.load(body)
181
+ js = checked_json(body, %w[])
185
182
  type = (js['type'] || '?').to_sym
186
183
  return type
187
184
  end
@@ -217,8 +214,7 @@ class API
217
214
  if code != "200"
218
215
  raise_error("List jobs failed", res)
219
216
  end
220
- # TODO format check
221
- js = JSON.load(body)
217
+ js = checked_json(body, %w[jobs])
222
218
  result = []
223
219
  js['jobs'].each {|m|
224
220
  job_id = m['job_id']
@@ -239,8 +235,7 @@ class API
239
235
  if code != "200"
240
236
  raise_error("Show job failed", res)
241
237
  end
242
- # TODO format check
243
- js = JSON.load(body)
238
+ js = checked_json(body, %w[status])
244
239
  # TODO debug
245
240
  type = (js['type'] || '?').to_sym # TODO
246
241
  query = js['query']
@@ -302,8 +297,7 @@ class API
302
297
  if code != "200"
303
298
  raise_error("Get job result failed", res)
304
299
  end
305
- # TODO format check
306
- js = JSON.load(body)
300
+ js = checked_json(body, %w[])
307
301
  former_status = js['former_status']
308
302
  return former_status
309
303
  end
@@ -316,8 +310,7 @@ class API
316
310
  if code != "200"
317
311
  raise_error("Query failed", res)
318
312
  end
319
- # TODO format check
320
- js = JSON.load(body)
313
+ js = checked_json(body, %w[job_id])
321
314
  return js['job_id'].to_s
322
315
  end
323
316
 
@@ -333,8 +326,7 @@ class API
333
326
  if code != "200"
334
327
  raise_error("Create schedule failed", res)
335
328
  end
336
- # TODO format check
337
- js = JSON.load(body)
329
+ js = checked_json(body, %w[start])
338
330
  return js['start']
339
331
  end
340
332
 
@@ -344,8 +336,7 @@ class API
344
336
  if code != "200"
345
337
  raise_error("Delete schedule failed", res)
346
338
  end
347
- # TODO format check
348
- js = JSON.load(body)
339
+ js = checked_json(body, %w[])
349
340
  return js['cron'], js["query"]
350
341
  end
351
342
 
@@ -355,8 +346,7 @@ class API
355
346
  if code != "200"
356
347
  raise_error("List schedules failed", res)
357
348
  end
358
- # TODO format check
359
- js = JSON.load(body)
349
+ js = checked_json(body, %w[schedules])
360
350
  result = []
361
351
  js['schedules'].each {|m|
362
352
  name = m['name']
@@ -377,8 +367,7 @@ class API
377
367
  if code != "200"
378
368
  raise_error("List history failed", res)
379
369
  end
380
- # TODO format check
381
- js = JSON.load(body)
370
+ js = checked_json(body, %w[history])
382
371
  result = []
383
372
  js['history'].each {|m|
384
373
  job_id = m['job_id']
@@ -405,8 +394,7 @@ class API
405
394
  if code[0] != ?2
406
395
  raise_error("Import failed", res)
407
396
  end
408
- # TODO format check
409
- js = JSON.load(body)
397
+ js = checked_json(body, %w[])
410
398
  time = js['time'].to_f
411
399
  return time
412
400
  end
@@ -425,8 +413,7 @@ class API
425
413
  if code != "200"
426
414
  raise_error("List result set failed", res)
427
415
  end
428
- # TODO format check
429
- js = JSON.load(body)
416
+ js = checked_json(body, %w[host port user pass])
430
417
  type = (js["type"] || 'unknown').to_s
431
418
  host = js["host"].to_s
432
419
  port = js["port"].to_i
@@ -469,8 +456,7 @@ class API
469
456
  if code != "200"
470
457
  raise_error("List aggregation schema failed", res)
471
458
  end
472
- # TODO format check
473
- js = JSON.load(body)
459
+ js = checked_json(body, %w[aggrs])
474
460
  result = js["aggrs"].map {|aggrinfo|
475
461
  name = aggrinfo['name'].to_s
476
462
  relation_key = aggrinfo['relation_key'].to_s
@@ -513,8 +499,7 @@ class API
513
499
  if code != "200"
514
500
  raise_error("Show job failed", res)
515
501
  end
516
- # TODO format check
517
- js = JSON.load(body)
502
+ js = checked_json(body, %w[relation_key logs attrs])
518
503
  relation_key = js['relation_key']
519
504
  logs = js['logs'].map {|loginfo|
520
505
  entry_name = loginfo['name'].to_s
@@ -605,8 +590,7 @@ class API
605
590
  raise_error("Authentication failed", res)
606
591
  end
607
592
  end
608
- # TODO format check
609
- js = JSON.load(body)
593
+ js = checked_json(body, %w[apikey])
610
594
  apikey = js['apikey']
611
595
  return apikey
612
596
  end
@@ -621,8 +605,7 @@ class API
621
605
  if code != "200"
622
606
  return "Server is down (#{code})"
623
607
  end
624
- # TODO format check
625
- js = JSON.load(body)
608
+ js = checked_json(body, %w[status])
626
609
  status = js['status']
627
610
  return status
628
611
  end
@@ -754,6 +737,24 @@ class API
754
737
  require 'cgi'
755
738
  CGI.escape(s.to_s)
756
739
  end
740
+
741
+ def checked_json(body, required)
742
+ js = nil
743
+ begin
744
+ js = JSON.load(body)
745
+ rescue
746
+ raise "Unexpected API response: #{$!}"
747
+ end
748
+ unless js.is_a?(Hash)
749
+ raise "Unexpected API response: #{body}"
750
+ end
751
+ required.each {|k|
752
+ unless js[k]
753
+ raise "Unexpected API response: #{body}"
754
+ end
755
+ }
756
+ js
757
+ end
757
758
  end
758
759
 
759
760
 
@@ -1,5 +1,5 @@
1
1
  module TreasureData
2
2
 
3
- VERSION = '0.8.5'
3
+ VERSION = '0.8.6'
4
4
 
5
5
  end
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.5
4
+ version: 0.8.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-04 00:00:00.000000000Z
12
+ date: 2012-01-20 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
16
- requirement: &70311656540280 !ruby/object:Gem::Requirement
16
+ requirement: &70253485013900 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70311656540280
24
+ version_requirements: *70253485013900
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: json
27
- requirement: &70311656539740 !ruby/object:Gem::Requirement
27
+ requirement: &70253485012660 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 1.4.3
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70311656539740
35
+ version_requirements: *70253485012660
36
36
  description:
37
37
  email:
38
38
  executables: []
@@ -68,7 +68,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
68
  version: '0'
69
69
  requirements: []
70
70
  rubyforge_project:
71
- rubygems_version: 1.8.10
71
+ rubygems_version: 1.8.12
72
72
  signing_key:
73
73
  specification_version: 3
74
74
  summary: Treasure Data API library for Ruby