A cython wrapping of the C++ Cap'n Proto library
Project description
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.5.x. Follow the official installation docs or for the lazy:
curl -O http://capnproto.org/capnproto-c++-0.5.0.tar.gz
tar zxf capnproto-c++-0.5.0.tar.gz
cd capnproto-c++-0.5.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 pip install --install-option '--force-cython' ./pycapnp
Note: for OSX, if using clang from Xcode 5, you will need to set CFLAGS like so:
CFLAGS='-stdlib=libc++' pip install pycapnp
Binary Packages
In order to build binary packages from this source code, you must specify the --disable-cython option:
Building a dumb binary distribution:
python setup.py bdist_dumb --disable-cython
Building a Python wheel distributiion:
python setup.py bdist_wheel --disable-cython
If it fails with an error like clang: error: no such file or directory: 'capnp/lib/capnp.cpp', then you need to cythonize fist. This can be done with:
python setup.py build --force-cython
Python Versions
Python 2.6/2.7 are supported as well as Python 3.2+. PyPy 2.1+ is also supported.
One oddity to note is that Text type fields will be treated as byte strings under Python 2, and unicode strings under Python 3. Data fields will always be treated as byte strings.
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 your sytem can’t find the installed the Cap’n Proto C++ library. If you haven’t installed it yet, please follow the directions at the official installation docs. Otherwise trying LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include pip install pycapnp may fix the problem for you.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pycapnp-0.5.3.tar.gz
.
File metadata
- Download URL: pycapnp-0.5.3.tar.gz
- Upload date:
- Size: 419.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e6a2bef89d4d135b1f11b09d77da8a3a939a09527695efe2ae5734b7fc8310ef |
|
MD5 | 5c2b0c2615cd7c3a9cba6b95cfd3a017 |
|
BLAKE2b-256 | 39920241e2bd8498c74267cd2071d42fd53dc3a1f58994e785f113f1528d6179 |