Home

Awesome

zpp_serializer_py

The python version of zpp serializer, to be found here: https://github.com/eyalz800/serializer.

Abstract

This is a simple python 2.7/3+ script that is compatible with the aforementioned C++ serialization framework above. For more info, please read the description there.

Example

This example is similar to the C++ example you can find at the link above, essentially allowing the C++ version to communicate with the python version and vice versa. Note: the examples are written in python 2.7.

import sys
import zpp_serializer

@zpp_serializer.serializable()
class Point(object):
    x = zpp_serializer.Int32
    y = zpp_serializer.Int32

@zpp_serializer.polymorphic('v1::person')
class Person(object):
    name = zpp_serializer.String

    def print_me(self):
        print "person: " + str(self.name)

@zpp_serializer.polymorphic('v1::student')
class Student(Person):
    university = zpp_serializer.String

    def print_me(self):
        print "student: " + str(self.name) + ' ' + str(self.university)

def foobar():
    data = bytearray()
    inp = zpp_serializer.MemoryInputArchive(data)
    out = zpp_serializer.MemoryOutputArchive(data)

    out(Point(x=1337, y=1338))

    my_point = Point()
    inp(my_point)

    print "%s %s" % (my_point.x, my_point.y)

def foo():
    data = bytearray()
    inp = zpp_serializer.MemoryInputArchive(data)
    out = zpp_serializer.MemoryOutputArchive(data)

    my_person = Student(name="1337", university="1337University")
    out(my_person)

    other_person = inp(Person)
    other_person.print_me()

def main():
    foobar()
    foo()

if __name__ == '__main__':
    sys.exit(main())

Another example:

import zpp_serializer
import sys

@zpp_serializer.polymorphic('v1::a')
class A(object):
    i = zpp_serializer.Uint64
    j = zpp_serializer.Uint32
    k = zpp_serializer.Uint8

@zpp_serializer.polymorphic('v1::b')
class B(A):
    l = zpp_serializer.Uint8
    v = zpp_serializer.Vector(zpp_serializer.Uint16)
    a = zpp_serializer.Array(zpp_serializer.Uint16, 4)

@zpp_serializer.polymorphic('v1::c')
class C(B):
    m = zpp_serializer.Uint32
    s = zpp_serializer.String
    w = zpp_serializer.WString

def main():
    c = C(i=0x1337, j=0x1338, k=1, l=3, m=7)
    c.v = [1, 2, 3]
    c.a[1:3] = [5, 6]
    c.s = "hello world"
    c.w = u"hello world"
    data = bytearray()
    out = zpp_serializer.MemoryOutputArchive(data)
    inp = zpp_serializer.MemoryInputArchive(data)
    out(c)
    a = inp(A)
    print c
    print a

if __name__ == '__main__':
    sys.exit(main())