sub build
{
my $self = shift;
- $self->{'authToken'} ||= $ENV{'ARVADOS_API_TOKEN'};
- $self->{'apiHost'} ||= $ENV{'ARVADOS_API_HOST'};
- $self->{'apiProtocolScheme'} ||= $ENV{'ARVADOS_API_PROTOCOL_SCHEME'};
+
+ $config = load_config_file("$ENV{HOME}/.config/arvados/settings.conf");
+
+ $self->{'authToken'} ||=
+ $ENV{ARVADOS_API_TOKEN} || $config->{ARVADOS_API_TOKEN};
+
+ $self->{'apiHost'} ||=
+ $ENV{ARVADOS_API_HOST} || $config->{ARVADOS_API_HOST};
+
+ $self->{'apiProtocolScheme'} ||=
+ $ENV{ARVADOS_API_PROTOCOL_SCHEME} ||
+ $config->{ARVADOS_API_PROTOCOL_SCHEME};
$self->{'ua'} = new Arvados::Request;
Arvados::Request->new();
}
+sub load_config_file ($)
+{
+ my $config_file = shift;
+ my %config;
+
+ if (open (CONF, $config_file)) {
+ while (<CONF>) {
+ next if /^\s*#/ || /^\s*$/; # skip comments and blank lines
+ chomp;
+ my ($key, $val) = split /\s*=\s*/, $_, 2;
+ $config{$key} = $val;
+ }
+ }
+ close CONF;
+ return \%config;
+}
+
1;
@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