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.
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.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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 883759877b894f774a83f7c1e3b31a433589b27f04caf0ac6f7b771fbe1263d4 |
|
MD5 | a85f00e6e8a6b2822ff3f26602030341 |
|
BLAKE2b-256 | 3c47964ae1f9f27c059f9b99843ac95ece12bd0ff3d6eae5cfd80bcb18cea529 |