From 1cb53550b73bfb164e6e2849bd761c303dea9f74 Mon Sep 17 00:00:00 2001 From: Tim Burks Date: Sat, 7 Mar 2020 16:07:25 -0800 Subject: [PATCH] primitive file (and spec) upload --- apps/disco-flame/main.go | 50 ++++++++++++++++++++++++++++++++++++++-- models/file.go | 4 +++- models/spec.go | 1 + server/actions_files.go | 1 + 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/apps/disco-flame/main.go b/apps/disco-flame/main.go index 28a6e3d25..7f74d48f5 100644 --- a/apps/disco-flame/main.go +++ b/apps/disco-flame/main.go @@ -37,8 +37,8 @@ func main() { Usage: disco help disco list [--raw] - disco get [] [] [--raw] [--openapi2] [--openapi3] [--features] [--schemas] [--all] - disco [--openapi2] [--openapi3] [--features] [--schemas] + disco get [] [] [--upload] [--raw] [--openapi2] [--openapi3] [--features] [--schemas] [--all] + disco [--upload] [--openapi2] [--openapi3] [--features] [--schemas] ` arguments, err := docopt.Parse(usage, nil, false, "Disco 1.0", false) if err != nil { @@ -195,6 +195,52 @@ func handleExportArgumentsForBytes(arguments map[string]interface{}, bytes []byt if err != nil { return true, err } + if arguments["--upload"].(bool) { + log.Printf("uploading") + initFlame() + api := document + ctx := context.TODO() + // does the spec exist? if not, create it + { + request := &rpcpb.GetSpecRequest{} + request.Name = "projects/google/products/" + api.Name + + "/versions/" + api.Version + + "/specs/discovery" + response, err := FlameClient.GetSpec(ctx, request) + log.Printf("response %+v\nerr %+v", response, err) + if err != nil { // TODO only do this for NotFound errors + request := &rpcpb.CreateSpecRequest{} + request.Parent = "projects/google/products/" + api.Name + + "/versions/" + api.Version + request.SpecId = "discovery" + request.Spec = &rpcpb.Spec{} + request.Spec.Style = "discovery" + response, err := FlameClient.CreateSpec(ctx, request) + log.Printf("response %+v\nerr %+v", response, err) + } + } + // does the file exist? if not, create it + { + request := &rpcpb.GetFileRequest{} + request.Name = "projects/google/products/" + api.Name + + "/versions/" + api.Version + + "/specs/discovery" + + "/files/0" + response, err := FlameClient.GetFile(ctx, request) + log.Printf("response %+v\nerr %+v", response, err) + if err != nil { // TODO only do this for NotFound errors + request := &rpcpb.CreateFileRequest{} + request.Parent = "projects/google/products/" + api.Name + + "/versions/" + api.Version + "/specs/discovery" + request.FileId = "0" + request.File = &rpcpb.File{} + request.File.Contents = bytes + response, err := FlameClient.CreateFile(ctx, request) + log.Printf("response %+v\nerr %+v", response, err) + } + } + handled = true + } if arguments["--raw"].(bool) { // Write the Discovery document as a JSON file. filename := "disco-" + document.Name + "-" + document.Version + ".json" diff --git a/models/file.go b/models/file.go index 2fe5068af..b0b30902a 100644 --- a/models/file.go +++ b/models/file.go @@ -27,7 +27,7 @@ type File struct { SizeInBytes int32 // Size of the file. Hash string // A hash of the file. SourceURI string // The original source URI of the file. - Contents []byte // The contents of the file. + Contents []byte `datastore:",noindex"` // The contents of the file. } // ParseParentSpec ... @@ -108,6 +108,7 @@ func (file *File) Message() (message *rpc.File, err error) { message.Description = file.Description message.CreateTime, err = ptypes.TimestampProto(file.CreateTime) message.UpdateTime, err = ptypes.TimestampProto(file.UpdateTime) + message.Contents = file.Contents //message.Availability = file.Availability //message.RecommendedVersion = file.RecommendedVersion return message, err @@ -115,6 +116,7 @@ func (file *File) Message() (message *rpc.File, err error) { // Update modifies a file using the contents of a message. func (file *File) Update(message *rpc.File) error { + file.Contents = message.GetContents() file.UpdateTime = file.CreateTime return nil } diff --git a/models/spec.go b/models/spec.go index 2f8c37b62..d598d7e48 100644 --- a/models/spec.go +++ b/models/spec.go @@ -106,6 +106,7 @@ func (spec *Spec) Message() (message *rpc.Spec, err error) { // Update modifies a spec using the contents of a message. func (spec *Spec) Update(message *rpc.Spec) error { + spec.Style = message.GetStyle() spec.UpdateTime = spec.CreateTime return nil } diff --git a/server/actions_files.go b/server/actions_files.go index cda25a50a..7ba061056 100644 --- a/server/actions_files.go +++ b/server/actions_files.go @@ -34,6 +34,7 @@ func (s *server) CreateFile(ctx context.Context, request *rpc.CreateFileRequest) return nil, status.Error(codes.AlreadyExists, file.ResourceName()+" already exists") } file.CreateTime = file.UpdateTime + err = file.Update(request.GetFile()) k, err = client.Put(ctx, k, file) if err != nil { return nil, err