Skip to content

Commit b2bc409

Browse files
committed
Improve target error messages
1 parent d728dac commit b2bc409

File tree

3 files changed

+65
-24
lines changed

3 files changed

+65
-24
lines changed

internal/pkg/cli/command/target/target.go

Lines changed: 45 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
package target
22

33
import (
4+
"strings"
5+
46
"github.com/pinecone-io/cli/internal/pkg/dashboard"
57
"github.com/pinecone-io/cli/internal/pkg/utils/configuration/state"
68
"github.com/pinecone-io/cli/internal/pkg/utils/exit"
79
"github.com/pinecone-io/cli/internal/pkg/utils/help"
810
"github.com/pinecone-io/cli/internal/pkg/utils/log"
11+
"github.com/pinecone-io/cli/internal/pkg/utils/msg"
912
"github.com/pinecone-io/cli/internal/pkg/utils/pcio"
1013
"github.com/pinecone-io/cli/internal/pkg/utils/presenters"
1114
"github.com/pinecone-io/cli/internal/pkg/utils/style"
@@ -59,40 +62,41 @@ func NewTargetCmd() *cobra.Command {
5962
text.PrettyPrintJSON(state.GetTargetContext())
6063
return
6164
}
62-
log.Info().Msg("Outputting target context as table")
65+
log.Info().
66+
Msg("Outputting target context as table")
6367
pcio.Printf("To update the context, run %s. The current target context is:\n\n", style.Code("pinecone target --org <org> --project <project>"))
6468
presenters.PrintTargetContext(state.GetTargetContext())
6569
return
6670
}
6771

6872
orgs, err := dashboard.GetOrganizations()
6973
if err != nil {
74+
msg.FailMsg("Failed to get organizations: %s", err)
7075
exit.Error(err)
7176
}
7277

7378
var org dashboard.Organization
7479
if options.Org != "" {
75-
org, err = getOrg(orgs, options.Org)
76-
if err != nil {
77-
exit.Error(err)
78-
}
80+
org = getOrg(orgs, options.Org)
7981
if !options.json {
80-
pcio.Printf(style.SuccessMsg("Target org updated to %s\n"), style.Emphasis(org.Name))
82+
msg.SuccessMsg("Target org updated to %s", style.Emphasis(org.Name))
8183
}
82-
state.TargetOrgName.Set(org.Name)
83-
state.TargetProjectName.Set("")
84-
} else {
85-
org, err = getOrg(orgs, state.TargetOrgName.Get())
86-
if err != nil {
87-
exit.Error(err)
84+
var oldOrg = state.TargetOrgName.Get()
85+
var newOrg = org.Name
86+
87+
state.TargetOrgName.Set(newOrg)
88+
89+
// If the org has changed, reset the project
90+
if oldOrg != org.Name {
91+
state.TargetProjectName.Set("")
8892
}
93+
} else {
94+
// Use the current org if no org is specified
95+
org = getOrg(orgs, state.TargetOrgName.Get())
8996
}
9097

9198
if options.Project != "" {
92-
proj, err := getProject(org, options.Project)
93-
if err != nil {
94-
exit.Error(err)
95-
}
99+
proj := getProject(org, options.Project)
96100
if !options.json {
97101
pcio.Printf(style.SuccessMsg("Target project updated to %s\n"), style.Emphasis(proj.Name))
98102
}
@@ -117,20 +121,39 @@ func NewTargetCmd() *cobra.Command {
117121
return cmd
118122
}
119123

120-
func getOrg(orgs *dashboard.OrganizationsResponse, orgName string) (dashboard.Organization, error) {
124+
func getOrg(orgs *dashboard.OrganizationsResponse, orgName string) dashboard.Organization {
121125
for _, org := range orgs.Organizations {
122126
if org.Name == orgName {
123-
return org, nil
127+
return org
124128
}
125129
}
126-
return dashboard.Organization{}, pcio.Errorf("organization %s not found", style.Emphasis(orgName))
130+
131+
// Join org names for error message
132+
orgNames := make([]string, len(orgs.Organizations))
133+
for i, org := range orgs.Organizations {
134+
orgNames[i] = org.Name
135+
}
136+
137+
availableOrgs := strings.Join(orgNames, ", ")
138+
log.Error().Str("orgName", orgName).Str("avialableOrgs", availableOrgs).Msg("Failed to find organization")
139+
msg.FailMsg("Failed to find organization %s. Available organizations: %s.\n", style.Emphasis(orgName), availableOrgs)
140+
exit.ErrorMsg(pcio.Sprintf("organization %s not found", style.Emphasis(orgName)))
141+
return dashboard.Organization{}
127142
}
128143

129-
func getProject(org dashboard.Organization, projectName string) (dashboard.Project, error) {
144+
func getProject(org dashboard.Organization, projectName string) dashboard.Project {
130145
for _, project := range org.Projects {
131146
if project.Name == projectName {
132-
return project, nil
147+
return project
133148
}
134149
}
135-
return dashboard.Project{}, pcio.Errorf("project %s not found in org %s", style.Emphasis(projectName), style.Emphasis(org.Name))
150+
151+
availableProjects := make([]string, len(org.Projects))
152+
for i, project := range org.Projects {
153+
availableProjects[i] = project.Name
154+
}
155+
156+
msg.FailMsg("Failed to find project %s in org %s. Available projects: %s.", style.Emphasis(projectName), style.Emphasis(org.Name), strings.Join(availableProjects, ", "))
157+
exit.Error(pcio.Errorf("project %s not found in organization %s", projectName, org.Name))
158+
return dashboard.Project{}
136159
}

internal/pkg/utils/msg/message.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package msg
2+
3+
import (
4+
"github.com/pinecone-io/cli/internal/pkg/utils/pcio"
5+
"github.com/pinecone-io/cli/internal/pkg/utils/style"
6+
)
7+
8+
func FailMsg(format string, a ...interface{}) {
9+
formatted := pcio.Sprintf(format, a...)
10+
pcio.Println(style.FailMsg(formatted))
11+
}
12+
13+
func SuccessMsg(format string, a ...interface{}) {
14+
formatted := pcio.Sprintf(format, a...)
15+
pcio.Println(style.SuccessMsg(formatted))
16+
}

internal/pkg/utils/style/typography.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package style
22

33
import (
4+
"fmt"
5+
46
"github.com/fatih/color"
57
"github.com/pinecone-io/cli/internal/pkg/utils/pcio"
68
)
@@ -33,8 +35,8 @@ func SuccessMsg(s string) string {
3335
return applyStyle("[SUCCESS] ", color.FgGreen) + s
3436
}
3537

36-
func FailMsg(s string) string {
37-
return applyStyle("[ERROR] ", color.FgRed) + s
38+
func FailMsg(s string, a ...interface{}) string {
39+
return applyStyle("[ERROR] ", color.FgRed) + fmt.Sprintf(s, a...)
3840
}
3941

4042
func Code(s string) string {

0 commit comments

Comments
 (0)