Skip to main content

A cython wrapping of the C++ capnproto library

Project description

More thorough docs are available at http://jparyani.github.io/capnpc-python-cpp/.

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:

wget http://capnproto.org/capnproto-c++-0.3.0-rc5.tar.gz
tar xzf capnproto-c++-0.3.0-rc5.tar.gz
cd capnproto-c++-0.3.0-rc5
./configure
make -j8 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 capnp. You can set the CC environment variable to control the compiler version, ie CC=gcc-4.8 pip install capnp.

Or you can clone the repo like so:

git clone https://github.com/jparyani/capnpc-python-cpp.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.

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:

import capnp
addressbook = capnp.load('addressbook.capnp')

def writeAddressBook(fd):
    message = capnp.MallocMessageBuilder()
    addressBook = message.initRoot(addressbook.AddressBook)
    people = addressBook.initPeople(2)

    alice = people[0]
    alice.id = 123
    alice.name = 'Alice'
    alice.email = 'alice@example.com'
    alicePhones = alice.initPhones(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.initPhones(2)
    bobPhones[0].number = "555-4567"
    bobPhones[0].type = 'home'
    bobPhones[1].number = "555-7654"
    bobPhones[1].type = 'work'
    bob.employment.unemployed = None

    capnp.writePackedMessageToFd(fd, message)

f = open('example', 'w')
writeAddressBook(f.fileno())

def printAddressBook(fd):
    message = capnp.PackedFdMessageReader(f.fileno())
    addressBook = message.getRoot(addressbook.AddressBook)

    for person in addressBook.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

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

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

Project details


Download files

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

Source Distribution

pycapnp-0.1.0.tar.gz (114.7 kB view details)

Uploaded Source

File details

Details for the file pycapnp-0.1.0.tar.gz.

File metadata

  • Download URL: pycapnp-0.1.0.tar.gz
  • Upload date:
  • Size: 114.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pycapnp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 883759877b894f774a83f7c1e3b31a433589b27f04caf0ac6f7b771fbe1263d4
MD5 a85f00e6e8a6b2822ff3f26602030341
BLAKE2b-256 3c47964ae1f9f27c059f9b99843ac95ece12bd0ff3d6eae5cfd80bcb18cea529

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page