Asyncio Python Client for Google Cloud Datastore
Project description
Installation
$ pip install --upgrade gcloud-aio-datastore
Usage
We’re still working on documentation; for now, this should help get you started:
from gcloud.aio.datastore import Datastore
from gcloud.aio.datastore import Key
from gcloud.aio.datastore import PathElement
from gcloud.aio.datastore import GQLQuery
ds = Datastore('my-gcloud-project', '/path/to/creds.json')
key1 = Key('my-gcloud-project', [PathElement('Kind', 'entityname')])
key2 = Key('my-gcloud-project', [PathElement('Kind', 'entityname2')])
# batched lookups
entities = await ds.lookup([key1, key2])
# convenience functions for any datastore mutations
await ds.insert(key1, {'a_boolean': True, 'meaning_of_life': 41})
await ds.update(key1, {'a_boolean': True, 'meaning_of_life': 42})
await ds.upsert(key1, {'animal': 'aardvark'})
await ds.delete(key1)
# or build your own mutation sequences with full transaction support
transaction = await ds.beginTransaction()
try:
mutations = [
ds.make_mutation(Operation.INSERT, key1, properties={'animal': 'sloth'}),
ds.make_mutation(Operation.UPSERT, key1, properties={'animal': 'aardvark'}),
ds.make_mutation(Operation.INSERT, key2, properties={'animal': 'aardvark'}),
]
await ds.commit(transaction, mutations=[mutation])
except Exception:
await ds.rollback(transaction)
# support for partial keys
partial_key = Key('my-gcloud-project', [PathElement('Kind')])
# and ID allocation or reservation
allocated_keys = await ds.allocateIds([partial_key])
await ds.reserveIds(allocated_keys)
# query support
query = GQLQuery('SELECT * FROM the_meaning_of_life WHERE answer = @answer',
named_bindings={'answer': 42})
results = await ds.runQuery(query, session=s)
Custom Subclasses
gcloud-aio-datastore provides class interfaces mirroring all official Google API types, ie. Key and PathElement, Entity and EntityResult, and QueryResultBatch. These types will be returned from arbitrary Datastore operations, for example Datastore.allocateIds(...) will return a list of Key entities.
For advanced usage, all of these datatypes may be overloaded. A common use-case may be to deserialize entities into more specific classes. For example, given a custom entity class such as:
class MyEntityKind(gcloud.aio.datastore.Entity):
def __init__(self, key, properties = None) -> None:
self.key = key
self.is_an_aardvark = (properties or {}).get('aardvark', False)
def __repr__(self):
return "I'm an aardvark!" if self.is_an_aardvark else "Sorry, nope"
We can then configure gcloud-aio-datastore to serialize/deserialize from this custom entity class with:
class MyCustomDatastore(gcloud.aio.datastore.Datastore):
entity_result_kind.entity_kind = MyEntityKind
The full list of classes which may be overridden in this way is:
class MyVeryCustomDatastore(gcloud.aio.datastore.Datastore):
entity_result_kind = EntityResult
entity_result_kind.entity_kind = Entity
entity_result_kind.entity_kind.key_kind = Key
key_kind = Key
key_kind.path_element_kind = PathElement
query_result_batch_kind = QueryResultBatch
query_result_batch_kind.entity_result_kind = EntityResult
You can then drop-in the MyVeryCustomDatastore class anywhere where you previously used Datastore.
Contributing
Please see our contributing guide.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for gcloud-aio-datastore-3.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9b06ab77fdb5069eea38b1b8d986aa25dbcebb9c5ce8d6493eb4854f2be2a90 |
|
MD5 | 81f94b3c869544f0624d14175a617651 |
|
BLAKE2b-256 | 66b5137712b1871f7507d16bb59d62f781118d3e1d0fdb16a13c8601a0c3aa9d |
Hashes for gcloud_aio_datastore-3.0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e41a1e10ad3dea7eaa63e70aa9a273d032c38229772751430891d6798d5f8706 |
|
MD5 | 22e687e73ecd12531160b6b678bdf59f |
|
BLAKE2b-256 | 6be29b00e0e2f5338e70da1a0cfccae6783d1c6407d3cd7efe46a910281197e4 |