mirror of
https://github.com/spf13/viper
synced 2025-05-06 12:17:18 +00:00
Exclude keys bound to env from AllKeys/AllSettings unless env var is set
This commit is contained in:
parent
dd14d2c73f
commit
da54697d46
2 changed files with 14 additions and 9 deletions
20
viper.go
20
viper.go
|
@ -339,6 +339,16 @@ func (v *Viper) getEnv(key string) (string, bool) {
|
||||||
return val, ok && (v.allowEmptyEnv || val != "")
|
return val, ok && (v.allowEmptyEnv || val != "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Viper) getAllEnvBoundAndSet() map[string]interface{} {
|
||||||
|
tgt := map[string]interface{}{}
|
||||||
|
for key, value := range v.env {
|
||||||
|
if _, ok := v.getEnv(v.mergeWithEnvPrefix(key)); ok {
|
||||||
|
tgt[key] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return tgt
|
||||||
|
}
|
||||||
|
|
||||||
// ConfigFileUsed returns the file used to populate the config registry.
|
// ConfigFileUsed returns the file used to populate the config registry.
|
||||||
func ConfigFileUsed() string { return v.ConfigFileUsed() }
|
func ConfigFileUsed() string { return v.ConfigFileUsed() }
|
||||||
func (v *Viper) ConfigFileUsed() string { return v.configFile }
|
func (v *Viper) ConfigFileUsed() string { return v.configFile }
|
||||||
|
@ -1571,14 +1581,6 @@ func castToMapStringInterface(
|
||||||
return tgt
|
return tgt
|
||||||
}
|
}
|
||||||
|
|
||||||
func castMapStringSliceToMapInterface(src map[string][]string) map[string]interface{} {
|
|
||||||
tgt := map[string]interface{}{}
|
|
||||||
for k, v := range src {
|
|
||||||
tgt[k] = v
|
|
||||||
}
|
|
||||||
return tgt
|
|
||||||
}
|
|
||||||
|
|
||||||
func castMapStringToMapInterface(src map[string]string) map[string]interface{} {
|
func castMapStringToMapInterface(src map[string]string) map[string]interface{} {
|
||||||
tgt := map[string]interface{}{}
|
tgt := map[string]interface{}{}
|
||||||
for k, v := range src {
|
for k, v := range src {
|
||||||
|
@ -1745,7 +1747,7 @@ func (v *Viper) AllKeys() []string {
|
||||||
m = v.flattenAndMergeMap(m, castMapStringToMapInterface(v.aliases), "")
|
m = v.flattenAndMergeMap(m, castMapStringToMapInterface(v.aliases), "")
|
||||||
m = v.flattenAndMergeMap(m, v.override, "")
|
m = v.flattenAndMergeMap(m, v.override, "")
|
||||||
m = v.mergeFlatMap(m, castMapFlagToMapInterface(v.pflags))
|
m = v.mergeFlatMap(m, castMapFlagToMapInterface(v.pflags))
|
||||||
m = v.mergeFlatMap(m, castMapStringSliceToMapInterface(v.env))
|
m = v.mergeFlatMap(m, v.getAllEnvBoundAndSet())
|
||||||
m = v.flattenAndMergeMap(m, v.config, "")
|
m = v.flattenAndMergeMap(m, v.config, "")
|
||||||
m = v.flattenAndMergeMap(m, v.kvstore, "")
|
m = v.flattenAndMergeMap(m, v.kvstore, "")
|
||||||
m = v.flattenAndMergeMap(m, v.defaults, "")
|
m = v.flattenAndMergeMap(m, v.defaults, "")
|
||||||
|
|
|
@ -1832,6 +1832,7 @@ empty_dict: {}
|
||||||
initConfig(v, "yaml", yamlWithEnvVars)
|
initConfig(v, "yaml", yamlWithEnvVars)
|
||||||
v.SetKnown("is_known")
|
v.SetKnown("is_known")
|
||||||
v.SetDefault("has_default", true)
|
v.SetDefault("has_default", true)
|
||||||
|
v.BindEnv("is_bound")
|
||||||
|
|
||||||
// AllKeys includes empty keys
|
// AllKeys includes empty keys
|
||||||
keys := v.AllKeys()
|
keys := v.AllKeys()
|
||||||
|
@ -1841,6 +1842,7 @@ empty_dict: {}
|
||||||
assert.Contains(t, keys, "empty_dict")
|
assert.Contains(t, keys, "empty_dict")
|
||||||
assert.NotContains(t, keys, "is_known")
|
assert.NotContains(t, keys, "is_known")
|
||||||
assert.Contains(t, keys, "has_default")
|
assert.Contains(t, keys, "has_default")
|
||||||
|
assert.NotContains(t, keys, "is_bound")
|
||||||
|
|
||||||
// AllSettings includes empty keys
|
// AllSettings includes empty keys
|
||||||
vars := v.AllSettings()
|
vars := v.AllSettings()
|
||||||
|
@ -1850,4 +1852,5 @@ empty_dict: {}
|
||||||
assert.Contains(t, vars, "empty_dict")
|
assert.Contains(t, vars, "empty_dict")
|
||||||
assert.NotContains(t, vars, "is_known")
|
assert.NotContains(t, vars, "is_known")
|
||||||
assert.Contains(t, vars, "has_default")
|
assert.Contains(t, vars, "has_default")
|
||||||
|
assert.NotContains(t, vars, "is_bound")
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue