Add facet completion func
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
package list
|
||||
|
||||
import (
|
||||
"github.com/k0kubun/pp/v3"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"gitea.libretechconsulting.com/50W/eia-api-go/cmd/eia-client/internal/util"
|
||||
@ -10,12 +11,18 @@ var ListFacetsCmd = &cobra.Command{
|
||||
Use: "facets route",
|
||||
Args: cobra.ExactArgs(1),
|
||||
Short: "List facets for given API route",
|
||||
ValidArgsFunction: util.CompleteRoutes,
|
||||
PreRun: util.SetClient,
|
||||
ValidArgsFunction: util.CompleteRouteOrFacet,
|
||||
Run: RunListFacetsCmd,
|
||||
}
|
||||
|
||||
func RunListFacetsCmd(cmd *cobra.Command, args []string) {
|
||||
logger := util.Logger(cmd)
|
||||
|
||||
resp, err := util.GetFacets(cmd, args[0])
|
||||
util.Logger(cmd).Info().Any("resp", resp).Err(err).Send()
|
||||
if err != nil {
|
||||
logger.Fatal().
|
||||
Err(err).Str("route", args[0]).Msg("failed to fetch facets")
|
||||
}
|
||||
|
||||
pp.Print(resp)
|
||||
}
|
||||
|
@ -31,6 +31,7 @@ import (
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
"gitea.libretechconsulting.com/50W/eia-api-go/cmd/eia-client/cmd/get"
|
||||
"gitea.libretechconsulting.com/50W/eia-api-go/cmd/eia-client/cmd/list"
|
||||
"gitea.libretechconsulting.com/50W/eia-api-go/cmd/eia-client/internal/util"
|
||||
)
|
||||
@ -42,7 +43,7 @@ var rootCmd = &cobra.Command{
|
||||
PersistentPreRun: PreRun,
|
||||
}
|
||||
|
||||
func PreRun(cmd *cobra.Command, _ []string) {
|
||||
func PreRun(cmd *cobra.Command, args []string) {
|
||||
// Set up logging
|
||||
console := zerolog.ConsoleWriter{
|
||||
Out: os.Stdout,
|
||||
@ -53,13 +54,16 @@ func PreRun(cmd *cobra.Command, _ []string) {
|
||||
|
||||
util.SetLogger(cmd, &logger)
|
||||
|
||||
// Be quiet if we're completing
|
||||
if strings.Contains(cmd.CommandPath(), "comple") {
|
||||
return
|
||||
cmd.Flags().Set(util.FLAG_API_LOG_LEVEL, "trace")
|
||||
} else {
|
||||
util.Logger(cmd).Debug().
|
||||
Str("logLevel", util.Logger(cmd).GetLevel().String()).
|
||||
Msg("logging configured")
|
||||
}
|
||||
|
||||
util.Logger(cmd).Debug().
|
||||
Str("logLevel", util.Logger(cmd).GetLevel().String()).
|
||||
Msg("logging configured")
|
||||
util.SetClient(cmd, args)
|
||||
}
|
||||
|
||||
// Execute adds all child commands to the root command and sets flags appropriately.
|
||||
@ -93,4 +97,5 @@ func init() {
|
||||
|
||||
// Subcommands
|
||||
rootCmd.AddCommand(list.ListCmd)
|
||||
rootCmd.AddCommand(get.GetCmd)
|
||||
}
|
||||
|
@ -9,7 +9,36 @@ import (
|
||||
"gitea.libretechconsulting.com/50W/eia-api-go/pkg/eia"
|
||||
)
|
||||
|
||||
func CompleteRoutes(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
// Given args of <route> <facet>, complete either the route arg or the
|
||||
// facet arg, whichever is appropriate
|
||||
func CompleteRouteOrFacet(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
if len(args) < 1 {
|
||||
return CompleteRoute(cmd, args, toComplete)
|
||||
}
|
||||
return CompleteFacet(cmd, args, toComplete)
|
||||
}
|
||||
|
||||
func CompleteFacet(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
facets, err := GetFacets(cmd, args[0])
|
||||
if err != nil {
|
||||
Logger(cmd).Err(err).Send()
|
||||
return nil, cobra.ShellCompDirectiveError
|
||||
} else if facets.FacetOptions == nil || len(*facets.FacetOptions) < 1 {
|
||||
Logger(cmd).Error().Str("route", args[0]).Msg("no facets found for route")
|
||||
return nil, cobra.ShellCompDirectiveError
|
||||
}
|
||||
|
||||
compFacets := make([]string, 0, len(*facets.FacetOptions))
|
||||
for _, facet := range *facets.FacetOptions {
|
||||
if strings.HasPrefix(facet, toComplete) {
|
||||
compFacets = append(compFacets, facet)
|
||||
}
|
||||
}
|
||||
|
||||
return slices.Clip(compFacets), cobra.ShellCompDirectiveNoFileComp
|
||||
}
|
||||
|
||||
func CompleteRoute(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
||||
routes := eia.GetRoutes()
|
||||
compRoutes := make([]string, 0, len(routes))
|
||||
|
||||
|
Reference in New Issue
Block a user