Cap'n Proto serialization/RPC system - Python bindings
Find a file
2013-09-19 14:43:36 -07:00
benchmark Update benchmarks 2013-09-03 22:50:52 -07:00
capnp Remove debugging print statements from to_dict 2013-09-19 14:43:21 -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 Add test script for testing with https://github.com/kaos/capnp_test 2013-09-19 14:43:36 -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 Change travis to only test the test directory 2013-08-29 17:04:45 -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 Update docs for v0.3.0 release of C++ api 2013-09-04 10:38:00 -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.14 2013-09-04 11:20:48 -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

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.

Build Status