Fixed issue where pickle helpers didnt use new from_bytes with context

- Added with context to benchmarks that use with_bytes
This commit is contained in:
Madhava Jay
2022-05-24 11:38:27 +10:00
parent 26de61d847
commit fc617142c0
5 changed files with 17 additions and 16 deletions

View File

@@ -35,13 +35,12 @@ def writeAddressBook():
def printAddressBook(msg_bytes): def printAddressBook(msg_bytes):
addressBook = addressbook.AddressBook.from_bytes(msg_bytes) with addressbook.AddressBook.from_bytes(msg_bytes) as addressBook:
for person in addressBook.people:
for person in addressBook.people: print(person.name, ":", person.email)
print(person.name, ":", person.email) for phone in person.phones:
for phone in person.phones: print(phone.type, ":", phone.number)
print(phone.type, ":", phone.number) print()
print()
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -40,12 +40,11 @@ def writeAddressBook():
@profile @profile
def printAddressBook(msg_bytes): def printAddressBook(msg_bytes):
addressBook = addressbook.AddressBook.from_bytes(msg_bytes) with addressbook.AddressBook.from_bytes(msg_bytes) as addressBook:
for person in addressBook.people:
for person in addressBook.people: person.name, person.email
person.name, person.email for phone in person.phones:
for phone in person.phones: phone.type, phone.number
phone.type, phone.number
@profile @profile

View File

@@ -1099,7 +1099,8 @@ if getattr(_sys, 'subversion', [''])[0] == 'PyPy':
from pickle_helper import _struct_reducer from pickle_helper import _struct_reducer
else: else:
def _struct_reducer(schema_id, data): def _struct_reducer(schema_id, data):
return _global_schema_parser.modules_by_id[schema_id].from_bytes(data) with _global_schema_parser.modules_by_id[schema_id].from_bytes(data) as msg:
return msg
cdef class _DynamicStructReader: cdef class _DynamicStructReader:

View File

@@ -3,4 +3,5 @@ import capnp
def _struct_reducer(schema_id, data): def _struct_reducer(schema_id, data):
'Hack to deal with pypy not allowing reduce functions to be "built-in" methods (ie. compiled from a .pyx)' 'Hack to deal with pypy not allowing reduce functions to be "built-in" methods (ie. compiled from a .pyx)'
return capnp._global_schema_parser.modules_by_id[schema_id].from_bytes(data) with capnp._global_schema_parser.modules_by_id[schema_id].from_bytes(data) as msg:
return msg

View File

@@ -13,7 +13,8 @@ import test_capnp # noqa: E402
def decode(name): def decode(name):
class_name = name[0].upper() + name[1:] class_name = name[0].upper() + name[1:]
print(getattr(test_capnp, class_name).from_bytes(sys.stdin.read())._short_str()) with getattr(test_capnp, class_name).from_bytes(sys.stdin.read()) as msg:
print(msg._short_str())
def encode(name): def encode(name):