Skip to content

Use buffer() in Python2 and use memoryview in Python3 #2242

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: v0.6
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions src/class_singleWorker.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from helper_sql import sqlExecute, sqlQuery
from network import knownnodes, StoppableThread
from six.moves import configparser, queue
import six


def sizeof_fmt(num, suffix='h/s'):
Expand Down Expand Up @@ -515,9 +516,15 @@
payload, TTL, log_prefix='(For onionpeer object)')

inventoryHash = highlevelcrypto.calculateInventoryHash(payload)
if six.PY2:
payload_buffer = buffer(payload)
tag_buffer = buffer(tag)
else: # assume six.PY3
payload_buffer = memoryview(payload)

Check notice on line 523 in src/class_singleWorker.py

View check run for this annotation

PyBitmessage Code Quality Checks / Code Quality - pylint

R0204 / redefined-variable-type

Redefinition of payload_buffer type from buffer to memoryview
tag_buffer = memoryview(tag)

Check notice on line 524 in src/class_singleWorker.py

View check run for this annotation

PyBitmessage Code Quality Checks / Code Quality - pylint

R0204 / redefined-variable-type

Redefinition of tag_buffer type from buffer to memoryview
state.Inventory[inventoryHash] = (
objectType, streamNumber, buffer(payload), # noqa: F821
embeddedTime, buffer(tag) # noqa: F821
objectType, streamNumber, payload_buffer, # noqa: F821
embeddedTime, tag_buffer # noqa: F821
)
self.logger.info(
'sending inv (within sendOnionPeerObj function) for object: %s',
Expand Down
17 changes: 14 additions & 3 deletions src/network/bmproto.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import socket
import struct
import time
import six

# magic imports!
import addresses
Expand Down Expand Up @@ -409,8 +410,12 @@

try:
self.object.checkObjectByType()
if six.PY2:
data_buffer = buffer(self.object.data)
else: # assume six.PY3
data_buffer = memoryview(self.object.data)

Check notice on line 416 in src/network/bmproto.py

View check run for this annotation

PyBitmessage Code Quality Checks / Code Quality - pylint

R0204 / redefined-variable-type

Redefinition of data_buffer type from buffer to memoryview
objectProcessorQueue.put((
self.object.objectType, buffer(self.object.data))) # noqa: F821
self.object.objectType, data_buffer)) # noqa: F821
except BMObjectInvalidError:
BMProto.stopDownloadingObject(self.object.inventoryHash, True)
else:
Expand All @@ -424,10 +429,16 @@
state.Dandelion.removeHash(
self.object.inventoryHash, "cycle detection")

if six.PY2:
object_buffer = buffer(self.payload[objectOffset:])
tag_buffer = buffer(self.object.tag)
else: # assume six.PY3
object_buffer = memoryview(self.payload[objectOffset:])

Check notice on line 436 in src/network/bmproto.py

View check run for this annotation

PyBitmessage Code Quality Checks / Code Quality - pylint

R0204 / redefined-variable-type

Redefinition of object_buffer type from buffer to memoryview
tag_buffer = memoryview(self.object.tag)

Check notice on line 437 in src/network/bmproto.py

View check run for this annotation

PyBitmessage Code Quality Checks / Code Quality - pylint

R0204 / redefined-variable-type

Redefinition of tag_buffer type from buffer to memoryview
state.Inventory[self.object.inventoryHash] = (
self.object.objectType, self.object.streamNumber,
buffer(self.payload[objectOffset:]), self.object.expiresTime, # noqa: F821
buffer(self.object.tag) # noqa: F821
object_buffer, self.object.expiresTime, # noqa: F821
tag_buffer # noqa: F821
)
self.handleReceivedObject(
self.object.streamNumber, self.object.inventoryHash)
Expand Down