in odps/config.go [54:146]
func NewConfigFromIni(iniPath string) (*Config, error) {
cfg, err := ini.LoadSources(ini.LoadOptions{IgnoreInlineComment: true}, iniPath)
if err != nil {
return nil, errors.WithStack(err)
}
section := cfg.Section("odps")
conf := NewConfig()
requiredParams := []string{
"access_id",
"access_key",
"endpoint",
"project",
}
paramPointer := []*string{
&conf.AccessId,
&conf.AccessKey,
&conf.Endpoint,
&conf.ProjectName,
}
for i, p := range requiredParams {
key, err := section.GetKey(p)
if err != nil {
return nil, errors.WithStack(err)
}
*paramPointer[i] = key.String()
section.DeleteKey(p)
}
_, err = url.Parse(conf.Endpoint)
if err != nil {
return nil, errors.Wrapf(err, "invalid endpoint: \"%s\"", conf.Endpoint)
}
var connTimeout, httpTimeout string
optionalParams := []string{
"sts_token",
"tcp_connection_timeout",
"http_timeout",
"tunnel_endpoint",
"tunnel_quota_name",
}
paramPointer = []*string{
&conf.StsToken,
&connTimeout,
&httpTimeout,
&conf.TunnelEndpoint,
&conf.TunnelQuotaName,
}
for i, p := range optionalParams {
if key, err := section.GetKey(p); err == nil {
*paramPointer[i] = key.String()
section.DeleteKey(p)
}
}
if connTimeout != "" {
n, err := strconv.ParseInt(connTimeout, 10, 32)
if err == nil {
conf.TcpConnectionTimeout = time.Duration(n) * time.Second
}
}
if httpTimeout != "" {
n, err := strconv.ParseInt(httpTimeout, 10, 32)
if err == nil {
conf.HttpTimeout = time.Duration(n) * time.Second
}
}
otherParams := []string{"enableLogview"}
conf.Others = make(map[string]string)
for _, p := range otherParams {
if key, err := section.GetKey(p); err == nil {
conf.Others[p] = key.String()
section.DeleteKey(p)
}
}
conf.Hints = make(map[string]string)
keys := section.Keys()
for _, key := range keys {
hint := key.Name()
if strings.HasPrefix(hint, "hints") {
splits := strings.SplitN(key.Name(), ".", 2)
hint = splits[1]
}
conf.Hints[hint] = key.Value()
}
return conf, nil
}