mirror of
https://github.com/capnproto/pycapnp.git
synced 2025-03-05 17:01:01 +01:00
Add ReaderOptions to read/read_packed/from_bytes
This commit is contained in:
parent
1424d46d71
commit
23e7a3891c
2 changed files with 34 additions and 13 deletions
|
@ -997,17 +997,17 @@ cdef class SchemaParser:
|
||||||
if proto.isStruct:
|
if proto.isStruct:
|
||||||
local_module.schema = schema.as_struct()
|
local_module.schema = schema.as_struct()
|
||||||
def read(bound_local_module):
|
def read(bound_local_module):
|
||||||
def helper(file):
|
def helper(file, traversalLimitInWords = None, nestingLimit = None):
|
||||||
reader = _StreamFdMessageReader(file.fileno())
|
reader = _StreamFdMessageReader(file.fileno(), traversalLimitInWords, nestingLimit)
|
||||||
return reader.get_root(bound_local_module)
|
return reader.get_root(bound_local_module)
|
||||||
return helper
|
return helper
|
||||||
def read_packed(bound_local_module):
|
def read_packed(bound_local_module):
|
||||||
def helper(file):
|
def helper(file, traversalLimitInWords = None, nestingLimit = None):
|
||||||
reader = _PackedFdMessageReader(file.fileno())
|
reader = _PackedFdMessageReader(file.fileno(), traversalLimitInWords, nestingLimit)
|
||||||
return reader.get_root(bound_local_module)
|
return reader.get_root(bound_local_module)
|
||||||
return helper
|
return helper
|
||||||
def make_from_bytes(bound_local_module):
|
def make_from_bytes(bound_local_module):
|
||||||
def from_bytes(buf, builder=False):
|
def from_bytes(buf, traversalLimitInWords = None, nestingLimit = None, builder=False):
|
||||||
"""Returns a Reader for the unpacked object in buf.
|
"""Returns a Reader for the unpacked object in buf.
|
||||||
|
|
||||||
:type buf: buffer
|
:type buf: buffer
|
||||||
|
@ -1017,7 +1017,7 @@ cdef class SchemaParser:
|
||||||
if builder:
|
if builder:
|
||||||
message = _FlatMessageBuilder(buf)
|
message = _FlatMessageBuilder(buf)
|
||||||
else:
|
else:
|
||||||
message = _FlatArrayMessageReader(buf)
|
message = _FlatArrayMessageReader(buf, traversalLimitInWords, nestingLimit)
|
||||||
return message.get_root(bound_local_module)
|
return message.get_root(bound_local_module)
|
||||||
return from_bytes
|
return from_bytes
|
||||||
def new_message(bound_local_module):
|
def new_message(bound_local_module):
|
||||||
|
@ -1246,8 +1246,15 @@ cdef class _StreamFdMessageReader(_MessageReader):
|
||||||
|
|
||||||
:Parameters: - fd (`int`) - A file descriptor
|
:Parameters: - fd (`int`) - A file descriptor
|
||||||
"""
|
"""
|
||||||
def __init__(self, int fd):
|
def __init__(self, int fd, traversalLimitInWords = None, nestingLimit = None):
|
||||||
self.thisptr = new schema_cpp.StreamFdMessageReader(fd)
|
cdef schema_cpp.ReaderOptions opts
|
||||||
|
|
||||||
|
if traversalLimitInWords is not None:
|
||||||
|
opts.traversalLimitInWords = traversalLimitInWords
|
||||||
|
if nestingLimit is not None:
|
||||||
|
opts.nestingLimit = nestingLimit
|
||||||
|
|
||||||
|
self.thisptr = new schema_cpp.StreamFdMessageReader(fd, opts)
|
||||||
|
|
||||||
cdef class _PackedFdMessageReader(_MessageReader):
|
cdef class _PackedFdMessageReader(_MessageReader):
|
||||||
"""Read a Cap'n Proto message from a file descriptor in a packed manner
|
"""Read a Cap'n Proto message from a file descriptor in a packed manner
|
||||||
|
@ -1261,20 +1268,34 @@ cdef class _PackedFdMessageReader(_MessageReader):
|
||||||
|
|
||||||
:Parameters: - fd (`int`) - A file descriptor
|
:Parameters: - fd (`int`) - A file descriptor
|
||||||
"""
|
"""
|
||||||
def __init__(self, int fd):
|
def __init__(self, int fd, traversalLimitInWords = None, nestingLimit = None):
|
||||||
self.thisptr = new schema_cpp.PackedFdMessageReader(fd)
|
cdef schema_cpp.ReaderOptions opts
|
||||||
|
|
||||||
|
if traversalLimitInWords is not None:
|
||||||
|
opts.traversalLimitInWords = traversalLimitInWords
|
||||||
|
if nestingLimit is not None:
|
||||||
|
opts.nestingLimit = nestingLimit
|
||||||
|
|
||||||
|
self.thisptr = new schema_cpp.PackedFdMessageReader(fd, opts)
|
||||||
|
|
||||||
@cython.internal
|
@cython.internal
|
||||||
cdef class _FlatArrayMessageReader(_MessageReader):
|
cdef class _FlatArrayMessageReader(_MessageReader):
|
||||||
cdef object _object_to_pin
|
cdef object _object_to_pin
|
||||||
def __init__(self, buf):
|
def __init__(self, buf, traversalLimitInWords = None, nestingLimit = None):
|
||||||
|
cdef schema_cpp.ReaderOptions opts
|
||||||
|
|
||||||
|
if traversalLimitInWords is not None:
|
||||||
|
opts.traversalLimitInWords = traversalLimitInWords
|
||||||
|
if nestingLimit is not None:
|
||||||
|
opts.nestingLimit = nestingLimit
|
||||||
|
|
||||||
cdef const void *ptr
|
cdef const void *ptr
|
||||||
cdef Py_ssize_t sz
|
cdef Py_ssize_t sz
|
||||||
PyObject_AsReadBuffer(buf, &ptr, &sz)
|
PyObject_AsReadBuffer(buf, &ptr, &sz)
|
||||||
if sz % 8 != 0:
|
if sz % 8 != 0:
|
||||||
raise ValueError("input length must be a multiple of eight bytes")
|
raise ValueError("input length must be a multiple of eight bytes")
|
||||||
self._object_to_pin = buf
|
self._object_to_pin = buf
|
||||||
self.thisptr = new schema_cpp.FlatArrayMessageReader(capnp.WordArrayPtr(<capnp.word*>ptr, sz//8))
|
self.thisptr = new schema_cpp.FlatArrayMessageReader(capnp.WordArrayPtr(<capnp.word*>ptr, sz//8), opts)
|
||||||
|
|
||||||
@cython.internal
|
@cython.internal
|
||||||
cdef class _FlatMessageBuilder(_MessageBuilder):
|
cdef class _FlatMessageBuilder(_MessageBuilder):
|
||||||
|
|
|
@ -711,6 +711,6 @@ cdef extern from "capnp/serialize.h" namespace " ::capnp":
|
||||||
cdef extern from "capnp/serialize-packed.h" namespace " ::capnp":
|
cdef extern from "capnp/serialize-packed.h" namespace " ::capnp":
|
||||||
cdef cppclass PackedFdMessageReader(MessageReader):
|
cdef cppclass PackedFdMessageReader(MessageReader):
|
||||||
PackedFdMessageReader(int) except +
|
PackedFdMessageReader(int) except +
|
||||||
StreamFdMessageReader(int, ReaderOptions) except +
|
PackedFdMessageReader(int, ReaderOptions) except +
|
||||||
|
|
||||||
void writePackedMessageToFd(int, MessageBuilder&) except +
|
void writePackedMessageToFd(int, MessageBuilder&) except +
|
||||||
|
|
Loading…
Add table
Reference in a new issue