class Argos::SoapCommand

argos-soap command

On success, data is pumped to STDOUT, on faults/errors to STDERR

Examples: $ argos-soap –operation getXml $ argos-soap -o getXml –startDate=“2014-03-10T00:00:00Z” –endDate=“2014-03-10T23:59:59.999Z” –log-level=0 $ argos-soap -o getXml –date=“‘date –date=yesterday -I` –username=**** –password=***** > /my/argos/xml/archive/`date -I –date=yesterday`.xml

Constants

CMD
PARAM

Attributes

log[RW]
param[RW]
result[RW]
soap[RW]

Public Class Methods

new(argv=ARGV, param = PARAM) click to toggle source
# File lib/argos/soap_command.rb, line 34
def initialize(argv=ARGV, param = PARAM)
  @param = param

  option_parser = OptionParser.new(argv) do |opts|
  
    opts.version = Argos::VERSION
  
    opts.banner = "#{CMD} operation [options]\n"

    opts.on("--debug", "Debug (alias for --log-level=0)") do
      @param[:level] = Logger::DEBUG
    end
    
    # --date shorthand for 1 day period
    opts.on("--date=isodate", "Set period to one day") do |isodate|
      startDate = Time.parse(isodate+"T00:00:00Z").iso8601
      endDate = Time.parse(isodate+"T23:59:59.999Z").iso8601
      @param[:period] = { startDate: startDate,  endDate: endDate }
    end

    opts.on("--format=format", "-f=format", "{ json | xml | text | raw }") do |format|
      @param[:format] = format.to_sym
    end
    
    opts.on("--operation=operation", "-o=operation", "{ #{operations.join(" | ")} }") do |operation|
      @param[:operation] = operation.to_sym
      # Change format (from JSON) for XML and text-operations
      if [:getKml, :getObsXml, :getStreamXml, :getXml, :getXsd].include? param[:operation]
        @param[:format] = :xml
      elsif [:getCsv].include? param[:operation]
        @param[:format] = :text
      end          
    end
    
    opts.on("--log-level=level", "Log level") do |level|
      @param[:level] = level.to_i
    end
    
    opts.on("--nbDaysFromNow=days", "Set number of days") do |nbDaysFromNow|
      @param[:nbDaysFromNow] = nbDaysFromNow
    end
    
    opts.on("--startDate=dateTime", "Set period start") do |startDate|
      @param[:period] = { startDate: startDate}
    end
    
    opts.on("--endDate=dateTime", "Set period end") do |endDate|
      @param[:period] = (@param[:period]||{}).merge({ endDate: endDate })
    end
    
    opts.on("--operations", "List operations") do
      @param[:operation] = :operations
    end
            
    opts.on("--platforms", "List platforms") do
      @param[:operation] = :platforms
    end
    
    opts.on("--programs", "List programs") do
      @param[:operation] = :programs
    end
    
    opts.on("--programNumber=program1,program2", "Set programNumber(s)") do |programNumber|
      @param[:programNumber] = programNumber
    end
    
    opts.on("--platformId=platform1,platform2", "Set platformId(s)") do |platformId|
      @param[:platformId] = platformId
    end

    opts.on("--services", "Services (from WSDL)") do
      @param[:operation] = :services
    end

    opts.on("--username=username", "Set username") do |username|
      if not username.nil?
        @param[:username] = username
      end
    end
    
    opts.on("--password=password", "Set passord") do |password|
      if not password.nil?
        @param[:password] = password
      end
    end
    
    opts.on("--download=/path/to/archive", "Download") do |archive|
      @param[:archive] = archive
    end

  end
  option_parser.parse!
  
  @log = Logger.new(STDERR)
  @log.level = param[:level].to_i
  
  if not @param[:archive].nil?
    Argos::Download.download(param[:username], param[:password], param[:archive], log)
    exit(true)
  end

  if operation.nil?
    STDOUT.write option_parser.help
    exit(false)
  end
  

end
run(argv=ARGV) click to toggle source
# File lib/argos/soap_command.rb, line 20
def self.run(argv=ARGV)
  begin
    cmd = new(argv)
    cmd.run
    exit(true)
  rescue => e
    STDERR.write e
    STDERR.write e.backtrace.join("\n")
    exit(false)
  end
end

Public Instance Methods

debug?() click to toggle source
# File lib/argos/soap_command.rb, line 143
def debug?
  @param[:level] == Logger::DEBUG
end
run() click to toggle source
# File lib/argos/soap_command.rb, line 147
def run
  begin
    @soap = Argos::Soap.new(param)
    
    @result = nil
    
    case param[:operation]
    when :getCsv
      @result = soap.getCsv 
    when :getPlatformList
      @result = soap.getPlatformList
    when :getKml
      @result = soap.getKml
    when :getObsCsv
      @result = soap.getObsCsv
    when :getObsXml
      @result = soap.getObsXml
    when :getStreamXml
      @result = soap.getStreamXml
    when :getXml
      @result = soap.getXml
    when :getXsd
      @result = soap.getXsd
    when :operations
      @result = soap.operations
    when :platforms
      @result = soap.platforms
    when :programs
      @result = soap.programs
    when :services
      @result = soap.services
    else
      raise ArgumentError, "Unspported operation: #{param[:operation]}"  
    end
    puts output.to_s
    
  rescue NodataException
    log.debug output
    exit(true)
  rescue => e
    STDERR.write output
    exit(false)
  end

end

Protected Instance Methods

format() click to toggle source
# File lib/argos/soap_command.rb, line 226
def format
  param[:format]
end
operation() click to toggle source
# File lib/argos/soap_command.rb, line 230
def operation
  param[:operation]
end
operations() click to toggle source
# File lib/argos/soap_command.rb, line 234
def operations
  [:getCsv, :getStreamXml, :getKml, :getXml, :getXsd, :getPlatformList, :getObsCsv, :getObsXml] 
end
output() click to toggle source
# File lib/argos/soap_command.rb, line 195
def output
  
  if debug?
    log.debug "#{CMD} param: #{param.to_json}"
    unless soap.request.nil?
      log.debug "$ curl -XPOST #{Argos::Soap::URI} -d'#{soap.request}' -H \"Content-Type: application/soap+xml\""
    end
  end
  
  if result.is_a? Savon::Response
    @result = result.raw
  end
  
  output = case format.to_sym
  
  when :ruby
    result
  when :json
    result.to_json
  when :text
    soap.text
  when :raw
    soap.raw
  when :xml
    soap.xml+"\n"
  else
    raise ArgumentError, "Unknown format: #{format}"
  end
  
end