Skip to main content

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.

Caveats

  • 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.

Installation

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

Usage

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

from google.appengine.ext import ndb
import automessage

@automessage.attach()
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
    book.put()
    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.

Metadata

Release files for automessage 0.1.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for automessage 0.1.5
File Size Uploaded
automessage-0.1.5.tar.gz 5.4 kB Details

Release files / automessage-0.1.5.tar.gz

Download URL automessage-0.1.5.tar.gz
Size 5.4 kB
Tags Source
SHA-256 checksum
How to use checksums
209b250315c7f2b8a3a91c16860e074e14c2cf253bb4666308c43a0bcb70b9ad
BLAKE2b-256 checksum
How to use checksums
ed3a0b8e7e8aee8e1de0efddc42df3779d680ba9489a8e74661ca7da6d02e999
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.64.0 CPython/2.7.16

Release history Release notifications | RSS feed

This release

0.1.5 This release

1 release file

0.1.4

1 release file

0.1.3

1 release file

0.1.2

1 release file

0.1.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page