Open eyudkin opened 4 years ago
Heya! We are planning on completely rewriting altsrc
for v3, so its unlikely that a maintainer will get to this issue! I'm marking it as help wanted
for any other contributor that wants to help, though 🙏
Ah, I just re-read the issue. It looks like this is a feature request? Since altsrc is about to be rewritten, we aren't currently accepting feature requests for it.
This issue or PR has been automatically marked as stale because it has not had recent activity. Please add a comment bumping this if you're still interested in it's resolution! Thanks for your help, please let us know if you need anything else.
Closing this as it has become stale.
Looks like it is fixed new, and it is possible to choose any key name in a config file.
configFiles := []string{
filepath.Join(testdataDir, "config.yaml"),
filepath.Join(testdataDir, "alt-config.yaml"),
}
app := &cli.Command{
Name: "greet",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "name",
Aliases: []string{"n"},
Sources: altsrc.YAML("greet.name", configFiles...),
},
&cli.IntFlag{
Name: "enthusiasm",
Aliases: []string{"!"},
Sources: altsrc.YAML("greet.enthusiasm", configFiles...),
},
},
Action: func(cCtx *cli.Context) error {
punct := ""
if cCtx.Int("enthusiasm") > 9000 {
punct = "!"
}
fmt.Fprintf(os.Stdout, "Hello, %[1]v%[2]v\n", cCtx.String("name"), punct)
return nil
},
}
// Simulating os.Args
os.Args = []string{"greet"}
if err := app.Run(context.Background(), os.Args); err != nil {
fmt.Fprintf(os.Stdout, "OH NO: %[1]v\n", err)
}
What problem does this solve?
For now altsrc requires to name my flags using dots to find them into multi-level config files. I.e. to find a flag "level" in the following config:
..i need to name my flag "infrastructure.logger.level" without exceptions. But what if I don't need it? For my cli interface I want its name to be "--log-level", because I don't need any nested things there. So, I want to be able name flags as I want and configure paths as I want too, separately.
Solution description
Something like:
Describe alternatives you've considered
Using aliases is not an option there because this ugly long "infrastructure.logger.level" name will be displayed at help screen anyway.