argos-ruby 1.1.0 → 1.1.2
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 +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
|