English

Google App Engine

The Capabilities Python API

With the Capabilities API, your application can detect outages and scheduled downtime for specific API capabilities. You can use this API to reduce downtime in your application by detecting when a capability is unavailable and then bypassing it.

For example, if you use the Images API to resize images, you can use the Capabilities API to detect when the Images API is unavailable and skip the resize:

from google.appengine.api import capabilities

def StoreUploadedProfileImage(self):
    uploaded_image = self.request.get('img')
    # If the images API is unavailable, we'll just skip the resize.
    if capabilities.CapabilitySet('images').is_enabled():
        uploaded_image = images.resize(uploaded_image, 64, 64)
    store(uploaded_image)

The Capabilities API provides a convenience wrapper for the DATASTORE_WRITES capability. While you can test most capabilities simply by supplying the capability name as an argument to CapabilitySet(), in this case you need to use a convenience wrapper. The following sample shows how to detect the availability of datastore writes using a convenience wrapper and, during downtime, provide a message to users:

from google.appengine.ext import db

def RenderHTMLForm(self):
    datastore_readonly = db.WRITE_CAPABILITY
    ...

Using the Capabilities API in Python

The CapabilitySet class defines all of the available methods for this API. You can either name capabilities explicitly or infer them from the methods provided by this class. See below for the list of services currently enabled in this API.

Supported Capabilities

The API currently supports the following capabilities:

Capability Argument to CapabilitySet
Availability of the blobstore blobstore
Datastore reads datastore_v3
Datastore writes datastore_v3, write
Availability of the Mail service mail
Availability of the Memcache service memcache
Availability of the Task Queue service taskqueue
Availability of the URL Fetch service urlfetch