Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(410)

Unified Diff: go/src/infra/gae/libs/gae/prod/raw_datastore_type_converter.go

Issue 1222903002: Refactor current GAE abstraction library to be free of the SDK* (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: more fixes Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: go/src/infra/gae/libs/gae/prod/raw_datastore_type_converter.go
diff --git a/go/src/infra/gae/libs/gae/prod/raw_datastore_type_converter.go b/go/src/infra/gae/libs/gae/prod/raw_datastore_type_converter.go
new file mode 100644
index 0000000000000000000000000000000000000000..87fdce1400d00c1ff89281bc37ba9ca59c47f192
--- /dev/null
+++ b/go/src/infra/gae/libs/gae/prod/raw_datastore_type_converter.go
@@ -0,0 +1,85 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package prod
+
+import (
+ "errors"
+
+ "infra/gae/libs/gae"
+
+ "google.golang.org/appengine"
+ "google.golang.org/appengine/datastore"
+)
+
+type typeFilter struct {
+ dps gae.DSPropertyLoadSaver
+}
+
+var _ datastore.PropertyLoadSaver = &typeFilter{}
+
+func (tf *typeFilter) Load(props []datastore.Property) (err error) {
+ newProps := map[string][]gae.DSProperty{}
+ for _, p := range props {
+ val := p.Value
+ switch x := val.(type) {
+ case datastore.ByteString:
+ val = gae.DSByteString(x)
+ case *datastore.Key:
+ val = dsR2F(x)
+ case appengine.BlobKey:
+ val = gae.BSKey(x)
+ case appengine.GeoPoint:
+ val = gae.DSGeoPoint(x)
+ }
+ prop := gae.DSProperty{}
+ if err = prop.SetValue(val, p.NoIndex); err != nil {
+ return err
+ }
+ newProps[p.Name] = append(newProps[p.Name], prop)
+ }
+ convFailures, err := tf.dps.Load(newProps)
+ if err == nil && len(convFailures) > 0 {
+ me := make(gae.MultiError, len(convFailures))
+ for i, f := range convFailures {
+ me[i] = errors.New(f)
+ }
+ err = me
+ }
+ return
+}
+
+func (tf *typeFilter) Save() ([]datastore.Property, error) {
+ newProps, err := tf.dps.Save()
+ if err != nil {
+ return nil, err
+ }
+
+ props := []datastore.Property{}
+ for name, propList := range newProps {
+ multiple := len(propList) > 1
+ for _, prop := range propList {
+ toAdd := datastore.Property{
+ Name: name,
+ Multiple: multiple,
+ NoIndex: prop.NoIndex(),
+ }
+ switch x := prop.Value().(type) {
+ case gae.DSByteString:
+ toAdd.Value = datastore.ByteString(x)
+ case gae.DSKey:
+ toAdd.Value = dsF2R(x)
+ case gae.BSKey:
+ toAdd.Value = appengine.BlobKey(x)
+ case gae.DSGeoPoint:
+ toAdd.Value = appengine.GeoPoint(x)
+ default:
+ toAdd.Value = x
+ }
+ props = append(props, toAdd)
+ }
+ }
+
+ return props, nil
+}

Powered by Google App Engine
This is Rietveld 408576698