|
|
|
@ -43,6 +43,7 @@ __author__ = 'Paul Dovbush <dpp@dpp.su>'
|
|
|
|
|
|
|
|
|
|
import json # py2.6+ TODO: add support for other JSON serialization modules
|
|
|
|
|
from google.protobuf.descriptor import FieldDescriptor as FD
|
|
|
|
|
import binascii
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ParseError(Exception): pass
|
|
|
|
@ -76,8 +77,9 @@ def json2pb(pb, js):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def pb2json(pb, js={}):
|
|
|
|
|
def pb2json(pb):
|
|
|
|
|
''' convert google.protobuf.descriptor instance to JSON string '''
|
|
|
|
|
js = {}
|
|
|
|
|
# fields = pb.DESCRIPTOR.fields #all fields
|
|
|
|
|
fields = pb.ListFields() #only filled (including extensions)
|
|
|
|
|
for field,value in fields:
|
|
|
|
@ -108,7 +110,7 @@ _ftype2js = {
|
|
|
|
|
FD.TYPE_BOOL: bool,
|
|
|
|
|
FD.TYPE_STRING: unicode,
|
|
|
|
|
#FD.TYPE_MESSAGE: pb2json, #handled specially
|
|
|
|
|
FD.TYPE_BYTES: lambda x: x.encode('string_escape'),
|
|
|
|
|
FD.TYPE_BYTES: lambda x: binascii.hexlify(x),
|
|
|
|
|
FD.TYPE_UINT32: int,
|
|
|
|
|
FD.TYPE_ENUM: int,
|
|
|
|
|
FD.TYPE_SFIXED32: float,
|
|
|
|
@ -128,7 +130,7 @@ _js2ftype = {
|
|
|
|
|
FD.TYPE_BOOL: bool,
|
|
|
|
|
FD.TYPE_STRING: unicode,
|
|
|
|
|
# FD.TYPE_MESSAGE: json2pb, #handled specially
|
|
|
|
|
FD.TYPE_BYTES: lambda x: x.decode('string_escape'),
|
|
|
|
|
FD.TYPE_BYTES: lambda x: binascii.unhexlify(x),
|
|
|
|
|
FD.TYPE_UINT32: int,
|
|
|
|
|
FD.TYPE_ENUM: int,
|
|
|
|
|
FD.TYPE_SFIXED32: float,
|
|
|
|
|