RESTful Python Client for Google Cloud
Project description
This project is a collection of Google Cloud client libraries for the REST-only APIs; its raison d’etre is to implement a simple CloudTasks API as well as a more abstract TaskManager. That… isn’t as relevant now that Google has deprecated PullQueue-style tasks, but this library will continue to be OSS to provide support to anyone looking for a concurrency-friendly approach to interacting with the GCP APIs in Python 2 and 3.
If you don’t need to support Python 2, you probably want to use gcloud-aio, which has support for all the same APIs (and more!) and additionally includes native support for asyncio.
Some of the client libraries live in separate packages:
Note that all the modules will eventually be released separately, and the gcloud-rest package will be deprecated.
Installation
$ pip install --upgrade gcloud-rest
(or, for the packages released independently):
$ pip install --upgrade gcloud-rest-datastore
Usage
This project currently exposes interfaces to CloudTasks, Datastore, KMS, and Storage.
For the libraries that are packaged separately, you can find usage examples in the corresponding README file.
For the others, keep reading.
Storage (see bucket.py):
from gcloud.rest.storage import Bucket
bk = Bucket('my-project', 'bucket-name')
# list all objects
objects_in_bucket = bk.list_objects()
# list objects with prefix
objects_in_bucket = bk.list_objects(prefix='in/subdir/')
object = bk.download('object-name')
object_contents = bk.download_as_string('object-name')
KMS (see client.py):
from gcloud.rest.kms import KMS
from gcloud.rest.core import encode
kms = KMS('my-project', 'my-keyring', 'my-key-name')
# encrypt
plaintext = 'the-best-animal-is-the-aardvark'
ciphertext = kms.encrypt(encode(plaintext))
# decrypt
assert kms.decode(encode(ciphertext)) == plaintext
TaskQueue (for CloudTasks, see queue.py):
from gcloud.rest.core import decode
from gcloud.rest.core import encode
from gcloud.rest.taskqueue import TaskQueue
tq = TaskQueue('my-project', 'taskqueue-name')
# create a task
payload = 'aardvarks-are-awesome'
tq.insert(encode(payload))
# list and get tasks
tasks = tq.list()
random_task = tasks.get('tasks')[42]
random_task_body = tq.get(random_task['name'])
# lease, renew, and ack/cancel/delete tasks
task_leases = tq.lease(num_tasks=3)
tasks = task_lease.get('tasks')
# assert len(tasks) <= 3
for task in tasks:
payload = decode(task['pullMessage']['payload']).decode()
# you'll need to renew the task if you take longer than
# task['scheduleTime'] to process it
tq.renew(task)
# do something with payload
if success:
tq.ack(task)
elif temporary_failure:
tq.cancel(task)
elif permanent_failure:
tq.delete(task['name'])
TaskManager (for CloudTasks, see manager.py):
from gcloud.rest.taskqueue import FailFastError
from gcloud.rest.taskqueue import TaskManager
def worker_method(payloads):
for task in payloads:
# do something with the task
if success:
yield 'anything'
elif temporary_failure:
yield Exception('insert message here')
elif permanent_failure:
yeild FailFastError('insert message here')
tm = TaskManager('my-project', 'taskqueue-name', worker_method)
tm.find_tasks_forever()
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_rest-2.0.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c64bfaf23172340c986bab3f290958245fbfbf41d9b80547bbef1533002993ca |
|
MD5 | e0ec8cdb236a597f873ec7ef631a14b1 |
|
BLAKE2b-256 | f7672a8958aa7016206abd22276e931c0b8f6c8049b5d031794e12136776d225 |