@application_version ||= 0.0
@application_name ||= File.split($0).last
+ @config = self.load_config_file
+
@arvados_api_version = opts[:api_version] ||
- ENV['ARVADOS_API_VERSION'] ||
+ @config['ARVADOS_API_VERSION'] ||
'v1'
@arvados_api_host = opts[:api_host] ||
- ENV['ARVADOS_API_HOST'] or
+ @config['ARVADOS_API_HOST'] or
raise "#{$0}: no :api_host or ENV[ARVADOS_API_HOST] provided."
@arvados_api_token = opts[:api_token] ||
- ENV['ARVADOS_API_TOKEN'] or
+ @config['ARVADOS_API_TOKEN'] or
raise "#{$0}: no :api_token or ENV[ARVADOS_API_TOKEN] provided."
- if (opts[:api_host] ? opts[:suppress_ssl_warnings] :
- ENV['ARVADOS_API_HOST_INSECURE'])
+ if (opts[:suppress_ssl_warnings] or
+ @config['ARVADOS_API_HOST_INSECURE'])
suppress_warnings do
OpenSSL::SSL.const_set 'VERIFY_PEER', OpenSSL::SSL::VERIFY_NONE
end
$stderr.puts "#{File.split($0).last} #{$$}: #{message}" if @@debuglevel >= verbosity
end
+ def load_config_file(config_file_path="~/.config/arvados/settings.conf")
+ # Initialize config settings with environment variables.
+ config = {}
+ config['ARVADOS_API_HOST'] = ENV['ARVADOS_API_HOST']
+ config['ARVADOS_API_TOKEN'] = ENV['ARVADOS_API_TOKEN']
+ config['ARVADOS_API_HOST_INSECURE'] = ENV['ARVADOS_API_HOST_INSECURE']
+ config['ARVADOS_API_VERSION'] = ENV['ARVADOS_API_VERSION']
+
+ # Load settings from the config file.
+ lineno = 0
+ File.open(File.expand_path config_file_path).each do |line|
+ lineno = lineno + 1
+ # skip comments and blank lines
+ next if line.match('^\s*#') or not line.match('\S')
+ var, val = line.chomp.split('=', 2)
+ # allow environment settings to override config files.
+ if var and val
+ config[var] ||= val
+ else
+ warn "#{config_file}: #{lineno}: could not parse `#{line}'"
+ end
+ end
+
+ config
+ end
+
class Model
def self.arvados_api
arvados.arvados_api
end
def self.api_exec(method, parameters={})
parameters = parameters.
- merge(:api_token => ENV['ARVADOS_API_TOKEN'])
+ merge(:api_token => @config['ARVADOS_API_TOKEN'])
parameters.each do |k,v|
parameters[k] = v.to_json if v.is_a? Array or v.is_a? Hash
end