go.mercari.io/datastore@v1.8.2/aedatastore/example_test.go (about)

     1  package aedatastore_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"net/url"
     7  
     8  	"go.mercari.io/datastore/aedatastore"
     9  	"google.golang.org/appengine"
    10  	"google.golang.org/appengine/aetest"
    11  	"google.golang.org/appengine/taskqueue"
    12  )
    13  
    14  func appengineContext() (ctx context.Context, cancelFn func() error) {
    15  	inst, err := aetest.NewInstance(&aetest.Options{StronglyConsistentDatastore: true, SuppressDevAppServerLog: true})
    16  	if err != nil {
    17  		panic(err)
    18  	}
    19  	cancelFn = inst.Close
    20  	r, err := inst.NewRequest("GET", "/", nil)
    21  	if err != nil {
    22  		panic(err)
    23  	}
    24  	ctx = appengine.NewContext(r)
    25  
    26  	return
    27  }
    28  
    29  func ExampleFromContext() {
    30  	inst, err := aetest.NewInstance(&aetest.Options{StronglyConsistentDatastore: true, SuppressDevAppServerLog: true})
    31  	if err != nil {
    32  		panic(err)
    33  	}
    34  	defer inst.Close()
    35  	r, err := inst.NewRequest("GET", "/", nil)
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  	ctx := appengine.NewContext(r)
    40  
    41  	client, err := aedatastore.FromContext(
    42  		ctx,
    43  	)
    44  	if err != nil {
    45  		panic(err)
    46  	}
    47  	defer client.Close()
    48  
    49  	type Data struct {
    50  		Name string
    51  	}
    52  
    53  	key := client.IncompleteKey("Data", nil)
    54  	entity := &Data{Name: "mercari"}
    55  	key, err = client.Put(ctx, key, entity)
    56  	if err != nil {
    57  		panic(err)
    58  	}
    59  
    60  	entity = &Data{}
    61  	err = client.Get(ctx, key, entity)
    62  	if err != nil {
    63  		panic(err)
    64  	}
    65  
    66  	fmt.Println(entity.Name)
    67  	// Output: mercari
    68  }
    69  
    70  func ExampleTransactionContext() {
    71  	ctx, cancelFn := appengineContext()
    72  	go cancelFn()
    73  
    74  	client, err := aedatastore.FromContext(ctx)
    75  	if err != nil {
    76  		panic(err)
    77  	}
    78  	defer client.Close()
    79  
    80  	tx, err := client.NewTransaction(ctx)
    81  	if err != nil {
    82  		panic(err)
    83  	}
    84  	go tx.Commit()
    85  
    86  	txCtx := aedatastore.TransactionContext(tx)
    87  
    88  	// join task to Transaction!
    89  	task := taskqueue.NewPOSTTask("/foobar", url.Values{})
    90  	_, err = taskqueue.Add(txCtx, task, "")
    91  	if err != nil {
    92  		panic(err)
    93  	}
    94  }