Cap'n Proto serialization/RPC system - Python bindings
Find a file
2013-09-24 11:22:29 -07:00
benchmark Update benchmarks to not use files for input/output 2013-09-22 17:41:01 -07:00
capnp Add ability for from_bytes to create Builders 2013-09-20 14:35:35 -07:00
docs Update docs 2013-09-04 21:53:05 -07:00
examples Update docs with new import method 2013-09-03 01:16:48 -07:00
scripts Fix decode test to actually decode message from stdin 2013-09-20 00:27:43 -07:00
test Fix up formatting issues with test_object.py 2013-09-18 21:09:17 -07:00
.gitignore Initial commit of docs 2013-08-18 21:49:12 -07:00
.travis.yml Fix travis build to point at v0.3 explicitly 2013-09-24 11:22:29 -07:00
LICENSE Change all references to old project name 2013-09-01 01:15:31 -07:00
MANIFEST.in Add requirements.txt to MANIFEST. Also add version 2013-08-26 10:08:34 -07:00
README.md Clarify the instructions for running tests. 2013-09-20 03:12:56 -07:00
requirements.txt Add testing libraries to requirements.txt 2013-08-28 16:04:36 -07:00
setup.py Bump version for v0.3.15 2013-09-19 21:28:39 -07:00
tox.ini Add initial tests 2013-08-28 23:13:38 -07:00

#pycapnp

More thorough docs are available at http://jparyani.github.io/pycapnp/.

Requirements

First you need a system-wide installation of the Cap'n Proto C++ library >= 0.3. Follow the official installation docs or for the lazy:

curl -O http://capnproto.org/capnproto-c++-0.3.0.tar.gz
tar zxf capnproto-c++-0.3.0.tar.gz
cd capnproto-c++-0.3.0
./configure
make -j6 check
sudo make install

A recent version of cython and setuptools is also required. You can install these with:

pip install -U cython
pip install -U setuptools

Building and installation

Install with pip install pycapnp. You can set the CC environment variable to control which compiler is used, ie CC=gcc-4.8 pip install pycapnp.

Or you can clone the repo like so:

git clone https://github.com/jparyani/pycapnp.git

cd into the repo directory and run pip install .

Development

This project uses git-flow. Essentially, just make sure you do your changes in the develop branch. You can run the tests by installing pytest with pip install pytest, and then run py.test from the test directory.

Documentation/Example

There is some basic documentation here.

The examples directory has one example that shows off the capabilities quite nicely. Here it is, reproduced:

from __future__ import print_function
import os
import capnp

import addressbook_capnp

def writeAddressBook(file):
    addresses = addressbook_capnp.AddressBook.new_message()
    people = addresses.init('people', 2)

    alice = people[0]
    alice.id = 123
    alice.name = 'Alice'
    alice.email = 'alice@example.com'
    alicePhones = alice.init('phones', 1)
    alicePhones[0].number = "555-1212"
    alicePhones[0].type = 'mobile'
    alice.employment.school = "MIT"

    bob = people[1]
    bob.id = 456
    bob.name = 'Bob'
    bob.email = 'bob@example.com'
    bobPhones = bob.init('phones', 2)
    bobPhones[0].number = "555-4567"
    bobPhones[0].type = 'home'
    bobPhones[1].number = "555-7654"
    bobPhones[1].type = 'work'
    bob.employment.unemployed = None

    addresses.write(file)


def printAddressBook(file):
    addresses = addressbook_capnp.AddressBook.read(file)

    for person in addresses.people:
        print(person.name, ':', person.email)
        for phone in person.phones:
            print(phone.type, ':', phone.number)

        which = person.employment.which()
        print(which)

        if which == 'unemployed':
            print('unemployed')
        elif which == 'employer':
            print('employer:', person.employment.employer)
        elif which == 'school':
            print('student at:', person.employment.school)
        elif which == 'selfEmployed':
            print('self employed')
        print()


if __name__ == '__main__':
    f = open('example', 'w')
    writeAddressBook(f)

    f = open('example', 'r')
    printAddressBook(f)

Common Problems

If you get an error on installation like:

...
gcc-4.8: error: capnp/capnp.c: No such file or directory

gcc-4.8: fatal error: no input files

Then you have too old a version of setuptools. Run pip install -U setuptools then try again.

An error like:

...
capnp/capnp.cpp:312:10: fatal error: 'capnp/dynamic.h' file not found
#include "capnp/dynamic.h"

Means you haven't installed the Cap'n Proto C++ library. Please follow the directions at the official installation docs

Build Status