argos-ruby 1.1.0 → 1.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/argos/exception.rb +2 -0
- data/lib/argos/soap.rb +53 -10
- data/lib/argos/soap_command.rb +35 -12
- data/lib/argos.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
Mjc1YTlhYTAwYTA4ZGE4MmYyZGFkYmUwNGNhNDE3MDNkYTA4MDdjNQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YjQzNDA1MDlkZjkyMWZlYTAwZWQ3NTVjODNhNjk5ZDI3MDZhOThiOA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTcxM2NmZTdmYmU4MGZiOTRiYmM2MjM3NmE5NmJjMmFlOGNlYzVlNTgwYmEy
|
10
|
+
NDQ3OTBkZTViZDk2MTJlMDc4NjA4NWE3OTMzYmIzN2ZhZDYwMjIyN2QyZWIy
|
11
|
+
MjE2NThhY2RlZTM3Njg1MjkyMThlNDliYmVkYzgzZmMzZjU0MTQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NmMyNzcwMDE0MjA3NTFhZjNkYzcyNjQyMDJhYjcxZmY4OTI3ZWQ3NGJmZWRj
|
14
|
+
MTczZDQwODE0Njg2OTE2ZjIxOTlkODFjMjdkZGIwM2VhYzRmNzg0MDIyODNk
|
15
|
+
YzE1NDkzZDUzMDc5N2EzOTUwYjQzNWZmMjY4M2VmNmZmODA4NzE=
|
data/lib/argos/exception.rb
CHANGED
data/lib/argos/soap.rb
CHANGED
@@ -26,9 +26,16 @@ module Argos
|
|
26
26
|
# response [Savon::Response]
|
27
27
|
# operation [Savon::Operation]
|
28
28
|
# xml [String] (Extracted, inner) XML
|
29
|
+
# filter FIXME
|
30
|
+
# platformId [String] Comma-separated list of platforms
|
31
|
+
# programNumber [String] Comma-separated list of programs
|
32
|
+
# nbDaysFromNow
|
33
|
+
# period
|
29
34
|
attr_accessor :client, :request, :response, :operation, :xml, :filter,
|
30
35
|
:platformId, :programNumber, :nbDaysFromNow, :period
|
31
|
-
|
36
|
+
|
37
|
+
# username [String]
|
38
|
+
# password [String]
|
32
39
|
attr_writer :username, :password
|
33
40
|
|
34
41
|
URI = "http://ws-argos.cls.fr/argosDws/services/DixService"
|
@@ -37,6 +44,7 @@ module Argos
|
|
37
44
|
WSDL = "#{URI}?wsdl"
|
38
45
|
|
39
46
|
ARGOS_NS = "http://service.dataxmldistribution.argos.cls.fr/types"
|
47
|
+
|
40
48
|
SOAP_NS = "http://www.w3.org/2003/05/soap-envelope"
|
41
49
|
|
42
50
|
NAMESPACES = {
|
@@ -147,6 +155,12 @@ module Argos
|
|
147
155
|
}
|
148
156
|
@response = o.call
|
149
157
|
@request = o.build
|
158
|
+
|
159
|
+
# Handle faults (before extracting data)
|
160
|
+
_envelope.xpath("soap:Body/soap:Fault", namespaces).each do | fault |
|
161
|
+
raise fault.to_s
|
162
|
+
end
|
163
|
+
|
150
164
|
@text = _extract_escaped_xml("csvResponse").call(response)
|
151
165
|
end
|
152
166
|
|
@@ -159,10 +173,20 @@ module Argos
|
|
159
173
|
# {"data":{"program":[{"programNumber":"9660","platform":[{ .. },{ .. }]}],"@version":"1.0"}}
|
160
174
|
# Each platform Hash (.. above): {"platformId":"129990","lastLocationClass":"3","lastCollectDate":"2013-10-03T08:32:24.000Z","lastLocationDate":"2013-05-22T04:55:15.000Z","lastLatitude":"47.67801","lastLongitude":"-122.13419"}
|
161
175
|
def getPlatformList
|
162
|
-
_call_xml_operation(:getPlatformList, { platformListRequest:
|
176
|
+
platformList = _call_xml_operation(:getPlatformList, { platformListRequest:
|
163
177
|
# Cannot use #baseRequest here because that methods calls #programs which also calls #getPlatformList...
|
164
178
|
{ username: _username, password: _password },
|
165
179
|
}, _extract_escaped_xml("platformListResponse"))
|
180
|
+
|
181
|
+
# Raise error if no programs
|
182
|
+
if platformList["data"]["program"].nil?
|
183
|
+
raise platformList.to_json
|
184
|
+
end
|
185
|
+
# Force Array
|
186
|
+
if not platformList["data"]["program"].is_a? Array
|
187
|
+
platformList["data"]["program"] = [platformList["data"]["program"]]
|
188
|
+
end
|
189
|
+
platformList
|
166
190
|
end
|
167
191
|
|
168
192
|
# @return [Hash]
|
@@ -205,26 +229,36 @@ module Argos
|
|
205
229
|
@text = _extract_escaped_xml("observationResponse").call(response)
|
206
230
|
end
|
207
231
|
|
208
|
-
#
|
232
|
+
# Platforms: array of platformId integers
|
233
|
+
# @return [Array] of [Integer]
|
209
234
|
def platforms(programNumber=nil)
|
210
235
|
platforms = []
|
211
|
-
|
236
|
+
|
237
|
+
platformListPrograms = getPlatformList["data"]["program"]
|
238
|
+
|
212
239
|
if programNumber.to_s =~ /\d+/
|
213
|
-
|
240
|
+
platformListPrograms.select! {|p| p["programNumber"].to_i == programNumber.to_i }
|
214
241
|
end
|
215
|
-
|
242
|
+
platformListPrograms.each do |program|
|
216
243
|
platforms += program["platform"].map {|p| p["platformId"].to_i}
|
217
244
|
end
|
218
245
|
platforms
|
219
246
|
end
|
220
247
|
|
248
|
+
# Period request
|
221
249
|
def period(startDate, endDate)
|
222
250
|
{ startDate: startDate, endDate: endDate }
|
223
251
|
end
|
224
252
|
|
253
|
+
# Programs: Array of programNumber integers
|
225
254
|
# @return [Array]
|
226
255
|
def programs
|
227
|
-
|
256
|
+
platformList = getPlatformList
|
257
|
+
if platformList.key?("data") and platformList["data"].key?("program")
|
258
|
+
platformList["data"]["program"].map {|p| p["programNumber"].to_i }
|
259
|
+
else
|
260
|
+
raise platformList
|
261
|
+
end
|
228
262
|
end
|
229
263
|
|
230
264
|
# @return [String]
|
@@ -284,7 +318,7 @@ module Argos
|
|
284
318
|
|
285
319
|
# Handle faults (before extracting data)
|
286
320
|
_envelope.xpath("soap:Body/soap:Fault", namespaces).each do | fault |
|
287
|
-
raise fault.to_s
|
321
|
+
raise Exception, fault.to_s
|
288
322
|
end
|
289
323
|
|
290
324
|
# Extract data
|
@@ -297,8 +331,17 @@ module Argos
|
|
297
331
|
# Handle errors
|
298
332
|
ng = Nokogiri.XML(xml)
|
299
333
|
ng.xpath("/data/errors/error").each do | error |
|
300
|
-
|
301
|
-
|
334
|
+
if error.key?("code")
|
335
|
+
case error["code"]
|
336
|
+
when "4"
|
337
|
+
raise NodataException
|
338
|
+
end
|
339
|
+
#<error code="2">max response reached</error>
|
340
|
+
#<errors><error code="9">start date upper than end date</error></errors>
|
341
|
+
|
342
|
+
else
|
343
|
+
raise error
|
344
|
+
end
|
302
345
|
end
|
303
346
|
|
304
347
|
# Validation
|
data/lib/argos/soap_command.rb
CHANGED
@@ -3,7 +3,14 @@ require "net/http"
|
|
3
3
|
require "csv"
|
4
4
|
|
5
5
|
module Argos
|
6
|
-
|
6
|
+
|
7
|
+
# argos-soap command
|
8
|
+
#
|
9
|
+
# On success, data is pumped to STDOUT, on faults/errors to STDERR
|
10
|
+
# Examples:
|
11
|
+
# $ argos-soap --operation getXml
|
12
|
+
# $ argos-soap -o getXml --startDate="2014-03-10T00:00:00Z" --endDate="2014-03-10T23:59:59.999Z" --log-level=1
|
13
|
+
# $ argos-soap -o getXml --startDate="`date --date=yesterday -I`T00:00:00Z" --endDate="`date --date=yesterday -I`T23:59:59.999Z" --username=**** --password=***** > /my/argos/xml/archive/`date -I --date=yesterday`.xml
|
7
14
|
class SoapCommand
|
8
15
|
|
9
16
|
CMD = "argos-soap"
|
@@ -16,8 +23,8 @@ module Argos
|
|
16
23
|
cmd.run
|
17
24
|
exit(true)
|
18
25
|
rescue => e
|
19
|
-
|
20
|
-
|
26
|
+
STDERR.write e
|
27
|
+
STDERR.write e.backtrace.join("\n")
|
21
28
|
exit(false)
|
22
29
|
end
|
23
30
|
end
|
@@ -36,6 +43,8 @@ module Argos
|
|
36
43
|
opts.on("--debug", "Debug (alias for --log-level=0") do
|
37
44
|
@param[:level] = Logger::DEBUG
|
38
45
|
end
|
46
|
+
|
47
|
+
# --date shorthand for 1 day startDate endDate
|
39
48
|
|
40
49
|
opts.on("--format=format", "-f=format", "{ json | xml | text | raw }") do |format|
|
41
50
|
@param[:format] = format.to_sym
|
@@ -64,7 +73,7 @@ module Argos
|
|
64
73
|
end
|
65
74
|
|
66
75
|
opts.on("--endDate=dateTime", "Set period end") do |endDate|
|
67
|
-
@param[:period].merge({ endDate: endDate })
|
76
|
+
@param[:period] = (@param[:period]||{}).merge({ endDate: endDate })
|
68
77
|
end
|
69
78
|
|
70
79
|
opts.on("--operations", "List operations") do
|
@@ -107,7 +116,7 @@ module Argos
|
|
107
116
|
option_parser.parse!
|
108
117
|
|
109
118
|
if operation.nil?
|
110
|
-
|
119
|
+
STDOUT.write option_parser.help
|
111
120
|
exit(false)
|
112
121
|
end
|
113
122
|
|
@@ -120,6 +129,7 @@ module Argos
|
|
120
129
|
end
|
121
130
|
|
122
131
|
def run
|
132
|
+
begin
|
123
133
|
@soap = Argos::Soap.new(param)
|
124
134
|
|
125
135
|
@result = nil
|
@@ -152,33 +162,42 @@ module Argos
|
|
152
162
|
else
|
153
163
|
raise ArgumentError, "Unspported operation: #{param[:operation]}"
|
154
164
|
end
|
155
|
-
output
|
165
|
+
STDOUT.write output
|
166
|
+
|
167
|
+
rescue NodataException
|
168
|
+
log.debug output
|
169
|
+
rescue => e
|
170
|
+
STDERR.write output
|
171
|
+
end
|
156
172
|
|
157
173
|
end
|
158
174
|
|
159
175
|
protected
|
160
176
|
|
161
177
|
def output
|
178
|
+
|
162
179
|
if debug?
|
163
180
|
log.debug "#{CMD} param: #{param.to_json}"
|
164
181
|
log.debug "$ curl -XPOST #{Argos::Soap::URI} -d'#{soap.request}' -H \"Content-Type: application/soap+xml\""
|
165
182
|
end
|
183
|
+
|
166
184
|
if result.is_a? Savon::Response
|
167
185
|
@result = result.raw
|
168
186
|
end
|
169
187
|
|
170
|
-
case format.to_sym
|
188
|
+
output = case format.to_sym
|
171
189
|
|
172
190
|
when :ruby
|
173
|
-
|
191
|
+
result
|
174
192
|
when :json
|
175
|
-
|
193
|
+
result.to_json
|
176
194
|
when :text
|
177
|
-
|
195
|
+
soap.text
|
178
196
|
when :raw
|
179
|
-
|
197
|
+
soap.raw
|
180
198
|
when :xml
|
181
|
-
|
199
|
+
# Return XML with parameter and time in trailing comment
|
200
|
+
soap.xml+xml_trailer
|
182
201
|
else
|
183
202
|
raise ArgumentError, "Unknown format: #{format}"
|
184
203
|
end
|
@@ -197,5 +216,9 @@ module Argos
|
|
197
216
|
[:getCsv, :getStreamXml, :getKml, :getXml, :getXsd, :getPlatformList, :getObsCsv, :getObsXml]
|
198
217
|
end
|
199
218
|
|
219
|
+
def xml_trailer
|
220
|
+
"<!-- #{Argos.library_version} #{param.reject {|k,v| k =~ /^password$/}.to_json} now: #{Time.now.utc.xmlschema} -->"
|
221
|
+
end
|
222
|
+
|
200
223
|
end
|
201
224
|
end
|
data/lib/argos.rb
CHANGED
@@ -12,7 +12,7 @@ require_relative "argos/ascii"
|
|
12
12
|
require_relative "argos/ds"
|
13
13
|
require_relative "argos/diag"
|
14
14
|
require_relative "argos/soap"
|
15
|
-
require_relative "argos/download"
|
15
|
+
#require_relative "argos/download"
|
16
16
|
|
17
17
|
# Argos library containg
|
18
18
|
# * Parsers for Argos legacy ASCII files (DS/DAT and DIAG files)
|
@@ -25,7 +25,7 @@ require_relative "argos/download"
|
|
25
25
|
#
|
26
26
|
# For information about Argos, see: http://www.argos-system.org
|
27
27
|
module Argos
|
28
|
-
VERSION = "1.1.
|
28
|
+
VERSION = "1.1.2"
|
29
29
|
|
30
30
|
def self.library_version
|
31
31
|
"argos-ruby-#{VERSION}"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: argos-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Espen Egeland
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-03-
|
12
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|