import (
"context"
"fmt"
"io"
vision "cloud.google.com/go/vision/apiv1"
"cloud.google.com/go/vision/v2/apiv1/visionpb"
)
// importProductSets creates a product set using information in a csv file on GCS.
func importProductSets(w io.Writer, projectID string, location string, gcsURI string) error {
ctx := context.Background()
c, err := vision.NewProductSearchClient(ctx)
if err != nil {
return fmt.Errorf("NewProductSearchClient: %w", err)
}
defer c.Close()
req := &visionpb.ImportProductSetsRequest{
Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
InputConfig: &visionpb.ImportProductSetsInputConfig{
Source: &visionpb.ImportProductSetsInputConfig_GcsSource{
GcsSource: &visionpb.ImportProductSetsGcsSource{
CsvFileUri: gcsURI,
},
},
},
}
op, err := c.ImportProductSets(ctx, req)
if err != nil {
return fmt.Errorf("ImportProductSets: %w", err)
}
fmt.Fprintf(w, "Processing operation name: %s\n", op.Name())
resp, err := op.Wait(ctx)
if err != nil {
return fmt.Errorf("Wait: %w", err)
}
fmt.Fprintf(w, "processing done.\n")
for i, status := range resp.Statuses {
// `0` is the coee for OK in google.rpc.code
fmt.Fprintf(w, "Status of processing line %d of the csv: %d\n", i, status.Code)
if status.Code == 0 {
fmt.Fprintf(w, "Reference image name: %s\n", resp.ReferenceImages[i].Name)
} else {
fmt.Fprintf(w, "Status code not OK: %s\n", status.Message)
}
}
return nil
}