Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

Download
ActivePython
INSTALL>
pypm install extprot

How to install extprot

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install extprot
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
0.2.4 Available View build log
Windows (64-bit)
0.2.4 Available View build log
Mac OS X (10.5+)
0.2.4 Available View build log
Linux (32-bit)
0.2.4 Available View build log
Linux (64-bit)
0.2.4 Available View build log
 
Author
License
MIT
Lastest release
version 0.2.4 on Jan 5th, 2011

extprot: compact, efficient, extensible binary serialization format

This is a python implementation of the 'extprot' serialization scheme, the details of which are described at:

http://eigenclass.org/R2/writings/extprot-extensible-protocols-intro

Similar to Google's Protocol Buffers and Apache Thrift, extprot allows the definition of structured data "messages". Messages are essentially a set of typed key-value pairs that can be efficiently serialized to/from a compact binary format, and are defined in a language-neutral "protocol" file. Here's a simple example of an extprot message:

message person = { id: int; name: string; emails: [ string ] }

Here the 'person' message contains three fields: 'id' is an integer, 'name' is a string, and 'emails' is a list of strings. Such protocol descriptions are compiled into a set of Python classes that can be manipulated using standard syntax and idioms. If the above protocol is recorded in the file "person.proto", here's a simple example of how it might be used:

>>> extprot.import_protocol("person.proto",globals())
>>> p1 = person(1,"Guido")
>>> print p1.emails   # fields use a sensible default if possible
[]
>>> p1.emails.append("guido@python.org")
>>> p1.emails.append(7)   # all fields are dynamically typechecked
Traceback (mosts recent call last):
...
ValueError: not a valid String: 7
>>> print repr(p1.to_string())
'\x01\x1f\x03\x00\x02\x03\x05Guido\x05\x13\x01\x03\x10guido@python.org'
>>> print person.from_string(p1.to_string()).name
'Guido'
>>>

Extprot compares favourably to related serialization technologies:

  • powerful type system; strongly-typed tuples and lists, tagged disjoint

System Message: WARNING/2 (<string>, line 44)

Bullet list ends without a blank line; unexpected unindent.

unions, parametric polymorphism. * self-delimiting data; all serialized messages indicate their length, allowing easy streaming and skipping of messages. * self-describing data; the 'skeleton' of a message can be reconstructed without having the protocol definition. * compact binary format; comparable to protocol-buffers/thrift, but with some overhead due to self-delimiting nature.

These features combine to make extprot strongly extensible, often allowing messages to maintain backward and forward compatibility across protocol extensions that include: adding fields to a message, adding elements to a tuple, adding cases to a disjoint union, and promoting a primitive type into a tuple, list or union.

The function extprot.import_protocol() will dynamically load a protocol file and convert it into the corresponding python class structure. This is quite convenient while developing a protocol since it avoids an extra compilation step, but it does add some startup overhead and requires the pyparsing module.

To compile a protocol definition into python sourcecode for the corresponding class definitions, use the function extprot.compile_protocol() or pipe the file through extprot/compiler.py like so:

$ cat mydefs.proto | python extprot/compiler.py > mydefs.py

Subscribe to package updates

Last updated Jan 5th, 2011

Download Stats

Last month:15

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.