Skip to main content
Join the official 2019 Python Developers SurveyStart the survey!

Automatic protorpc message types for ndb.Model subclasses (Google App Engine only)

Project description

automessage is a library that helps you quickly create protorpc-based web services that interact with ndb models (Google Cloud Datastore) by automatically generating Message classes for your ndb.Model subclasses, along with easy serialization/deserialization.


  • This is pretty rough, alpha-level code. There are lots of TODOs. Use at your own risk.
  • This only works for Google App Engine standard environment + Python with the protorpc and ndb libraries.


Follow this guide to install automessage as a third-party library for your App Engine Python app; the pip command you want is:

pip install -t lib/ automessage


First, use a @automessage.attach decorator on your ndb.Model subclass:

from google.appengine.ext import ndb
import automessage

class Book(ndb.Model):
  title = ndb.StringProperty()
  author = ndb.StringProperty()
  publish_date = ndb.DateTimeProperty(indexed=True)

This generates a class BookMessage (a subclass of protorpc.messages.Message) in the same module as the Book class, that you can then use in your protorpc-based services, like so:

class BooksService(remote.Service):
  class FindRequest(messages.Message):
    title = messages.StringField(1, required=True)

  @remote.method(FindRequest, BookMessage)
  def find(self, request):
    return (Book
        .query(Book.title == request.title)
        .to_message()) # to_message() added by automessage

  @remote.method(BookMessage, BookMessage)
  def create(self, request):
    book = Book.from_message(request) # from_message() added by automessage
    return book.to_message()

attach takes several parameters (see the code for details) that lets you customize the name of the generated message class, convert to camel case, add an ID field, blacklist/whitelist properties, etc. You can decorate models with multiple attach calls (with different parameters) to create multiple message types for a given model. When doing so, you'll need to provide the message type in to_message calls, e.g. book.to_message(CustomBookMessage).

Related work

  • Protopigeon is an almost identical, older approach with a slightly different API and better testing.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for automessage, version 0.1.4
Filename, size File type Python version Upload date Hashes
Filename, size automessage-0.1.4.tar.gz (5.3 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page