Skip to content
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

Fix AttributeError: 'ByteBuffer' object has no attribute 'tobytes' #81

Merged
merged 1 commit into from
Sep 28, 2020

Conversation

bdrung
Copy link
Contributor

@bdrung bdrung commented Sep 28, 2020

Following Python code fails:

interface = pyipmi.interfaces.create_interface(interface='ipmitool', interface_type='lanplus')
ipmi = pyipmi.create_connection(interface)
ipmi.session.set_session_type_rmcp(host=fqdn, port=port)
ipmi.session.set_auth_type_user(username=username, password=password)
ipmi.target = pyipmi.Target()
ipmi.session.establish()
ipmi_info = ipmi.get_device_id()
Traceback (most recent call last):
  File "example.py", line 7
    ipmi_info = ipmi.get_device_id()
  File "pyipmi/bmc.py", line 25, in get_device_id
    return DeviceId(self.send_message_with_name('GetDeviceId'))
  File "pyipmi/__init__.py", line 206, in send_message_with_name
    rsp = self.send_message(req)
  File "pyipmi/__init__.py", line 190, in send_message
    rsp = self.interface.send_and_receive(req)
  File "pyipmi/interfaces/ipmitool.py", line 147, in send_and_receive
    py3_array_tobytes(req_data))
  File "pyipmi/utils.py", line 57, in py3_array_tobytes
    return msg.tobytes()
AttributeError: 'ByteBuffer' object has no attribute 'tobytes'

Add a ByteBuffer.tobytes method. ByteBuffer.tobytes will only be called if Python's array.array has a tobytes method. Therefore the helper py3_array_tobytes is not needed.

Fixes #80

Following Python code fails:

```python
interface = pyipmi.interfaces.create_interface(interface='ipmitool', interface_type='lanplus')
ipmi = pyipmi.create_connection(interface)
ipmi.session.set_session_type_rmcp(host=fqdn, port=port)
ipmi.session.set_auth_type_user(username=username, password=password)
ipmi.target = pyipmi.Target()
ipmi.session.establish()
ipmi_info = ipmi.get_device_id()
```

```
Traceback (most recent call last):
  File "example.py", line 7
    ipmi_info = ipmi.get_device_id()
  File "pyipmi/bmc.py", line 25, in get_device_id
    return DeviceId(self.send_message_with_name('GetDeviceId'))
  File "pyipmi/__init__.py", line 206, in send_message_with_name
    rsp = self.send_message(req)
  File "pyipmi/__init__.py", line 190, in send_message
    rsp = self.interface.send_and_receive(req)
  File "pyipmi/interfaces/ipmitool.py", line 147, in send_and_receive
    py3_array_tobytes(req_data))
  File "pyipmi/utils.py", line 57, in py3_array_tobytes
    return msg.tobytes()
AttributeError: 'ByteBuffer' object has no attribute 'tobytes'
```

Add a `ByteBuffer.tobytes` method. `ByteBuffer.tobytes` will only be
called if Python's array.array has a `tobytes` method. Therefore the
helper `py3_array_tobytes` is not needed.

Bug: kontron#80
Signed-off-by: Benjamin Drung <benjamin.drung@cloud.ionos.com>
@hthiery
Copy link
Contributor

hthiery commented Sep 28, 2020

thank you

@hthiery hthiery merged commit e66013b into kontron:master Sep 28, 2020
@bdrung bdrung deleted the fix-tobytes branch September 28, 2020 15:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

AttributeError: 'ByteBuffer' object has no attribute 'tobytes'
2 participants