func NewConfigFromIni()

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
}