Skip to content

Commit 9549b6e

Browse files
committed
cmd: don't sort header when filter keys are specified
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
1 parent e24bbd0 commit 9549b6e

File tree

2 files changed

+60
-46
lines changed

2 files changed

+60
-46
lines changed

cmd/api.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,11 @@ func init() {
8888
var filterKeys []string
8989
for _, arg := range apiArgs {
9090
if strings.HasPrefix(arg, "filter=") {
91-
filterKeys = strings.Split(strings.Split(arg, "=")[1], ",")
91+
for _, filterKey := range strings.Split(strings.Split(arg, "=")[1], ",") {
92+
if len(strings.TrimSpace(filterKey)) > 0 {
93+
filterKeys = append(filterKeys, strings.TrimSpace(filterKey))
94+
}
95+
}
9296
}
9397
}
9498

cmd/output.go

Lines changed: 55 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ import (
3131
)
3232

3333
func jsonify(value interface{}) string {
34+
if value == nil {
35+
return ""
36+
}
3437
if reflect.TypeOf(value).Kind() == reflect.Map || reflect.TypeOf(value).Kind() == reflect.Slice {
3538
jsonStr, err := json.Marshal(value)
3639
if err == nil {
@@ -47,7 +50,31 @@ func printJSON(response map[string]interface{}) {
4750
enc.Encode(response)
4851
}
4952

50-
func printTable(response map[string]interface{}) {
53+
func printText(response map[string]interface{}) {
54+
for k, v := range response {
55+
valueType := reflect.TypeOf(v)
56+
if valueType.Kind() == reflect.Slice {
57+
fmt.Printf("%v:\n", k)
58+
for idx, item := range v.([]interface{}) {
59+
if idx > 0 {
60+
fmt.Println("================================================================================")
61+
}
62+
row, isMap := item.(map[string]interface{})
63+
if isMap {
64+
for field, value := range row {
65+
fmt.Printf("%s = %v\n", field, jsonify(value))
66+
}
67+
} else {
68+
fmt.Printf("%v\n", item)
69+
}
70+
}
71+
} else {
72+
fmt.Printf("%v = %v\n", k, jsonify(v))
73+
}
74+
}
75+
}
76+
77+
func printTable(response map[string]interface{}, filter []string) {
5178
table := tablewriter.NewWriter(os.Stdout)
5279
for k, v := range response {
5380
valueType := reflect.TypeOf(v)
@@ -63,12 +90,15 @@ func printTable(response map[string]interface{}) {
6390
if !ok || len(row) < 1 {
6491
continue
6592
}
66-
6793
if len(header) == 0 {
68-
for field := range row {
69-
header = append(header, field)
94+
if len(filter) > 0 {
95+
header = filter
96+
} else {
97+
for field := range row {
98+
header = append(header, field)
99+
}
100+
sort.Strings(header)
70101
}
71-
sort.Strings(header)
72102
table.SetHeader(header)
73103
}
74104
var rowArray []string
@@ -84,31 +114,7 @@ func printTable(response map[string]interface{}) {
84114
table.Render()
85115
}
86116

87-
func printText(response map[string]interface{}) {
88-
for k, v := range response {
89-
valueType := reflect.TypeOf(v)
90-
if valueType.Kind() == reflect.Slice {
91-
fmt.Printf("%v:\n", k)
92-
for idx, item := range v.([]interface{}) {
93-
if idx > 0 {
94-
fmt.Println("================================================================================")
95-
}
96-
row, isMap := item.(map[string]interface{})
97-
if isMap {
98-
for field, value := range row {
99-
fmt.Printf("%s = %v\n", field, jsonify(value))
100-
}
101-
} else {
102-
fmt.Printf("%v\n", item)
103-
}
104-
}
105-
} else {
106-
fmt.Printf("%v = %v\n", k, jsonify(v))
107-
}
108-
}
109-
}
110-
111-
func printColumn(response map[string]interface{}) {
117+
func printColumn(response map[string]interface{}, filter []string) {
112118
w := tabwriter.NewWriter(os.Stdout, 0, 0, 3, ' ', tabwriter.DiscardEmptyColumns)
113119
for _, v := range response {
114120
valueType := reflect.TypeOf(v)
@@ -125,10 +131,14 @@ func printColumn(response map[string]interface{}) {
125131
}
126132

127133
if idx == 0 {
128-
for rk := range row {
129-
header = append(header, strings.ToUpper(rk))
134+
if len(filter) > 0 {
135+
header = filter
136+
} else {
137+
for rk := range row {
138+
header = append(header, strings.ToUpper(rk))
139+
}
140+
sort.Strings(header)
130141
}
131-
sort.Strings(header)
132142
fmt.Fprintln(w, strings.Join(header, "\t"))
133143
}
134144
var values []string
@@ -142,7 +152,7 @@ func printColumn(response map[string]interface{}) {
142152
w.Flush()
143153
}
144154

145-
func printCsv(response map[string]interface{}) {
155+
func printCsv(response map[string]interface{}, filter []string) {
146156
for _, v := range response {
147157
valueType := reflect.TypeOf(v)
148158
if valueType.Kind() == reflect.Slice || valueType.Kind() == reflect.Map {
@@ -158,10 +168,14 @@ func printCsv(response map[string]interface{}) {
158168
}
159169

160170
if idx == 0 {
161-
for rk := range row {
162-
header = append(header, rk)
171+
if len(filter) > 0 {
172+
header = filter
173+
} else {
174+
for rk := range row {
175+
header = append(header, rk)
176+
}
177+
sort.Strings(header)
163178
}
164-
sort.Strings(header)
165179
fmt.Println(strings.Join(header, ","))
166180
}
167181
var values []string
@@ -170,7 +184,6 @@ func printCsv(response map[string]interface{}) {
170184
}
171185
fmt.Println(strings.Join(values, ","))
172186
}
173-
174187
}
175188
}
176189
}
@@ -195,9 +208,6 @@ func filterResponse(response map[string]interface{}, filter []string, outputType
195208
}
196209
filteredRow := make(map[string]interface{})
197210
for _, filterKey := range filter {
198-
if len(strings.TrimSpace(filterKey)) == 0 {
199-
continue
200-
}
201211
for field := range row {
202212
if filterKey == field {
203213
filteredRow[field] = row[field]
@@ -226,14 +236,14 @@ func printResult(outputType string, response map[string]interface{}, filter []st
226236
switch outputType {
227237
case config.JSON:
228238
printJSON(response)
229-
case config.TABLE:
230-
printTable(response)
231239
case config.TEXT:
232240
printText(response)
233241
case config.COLUMN:
234-
printColumn(response)
242+
printColumn(response, filter)
235243
case config.CSV:
236-
printCsv(response)
244+
printCsv(response, filter)
245+
case config.TABLE:
246+
printTable(response, filter)
237247
default:
238248
fmt.Println("Invalid output type configured, please fix that!")
239249
}

0 commit comments

Comments
 (0)