Skip to content
This repository has been archived by the owner on Jan 5, 2021. It is now read-only.

TypeError: Type str doesn't support the buffer API (python 3.4) #138

Closed
DIYtechie opened this issue Sep 5, 2016 · 10 comments
Closed

TypeError: Type str doesn't support the buffer API (python 3.4) #138

DIYtechie opened this issue Sep 5, 2016 · 10 comments

Comments

@DIYtechie
Copy link

How can I avoid getting this error?

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 884, in handle_one_response
    self.run_application()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 871, in run_application
    self.process_result()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 860, in process_result
    for data in self.result:
  File "/usr/local/lib/python3.4/dist-packages/ouimeaux/subscribe.py", line 70, in _handle
    data = data.split("\n\n")[0]
TypeError: Type str doesn't support the buffer API
{'CONTENT_LENGTH': '189',
 'CONTENT_TYPE': 'text/xml; charset="utf-8"',
 'GATEWAY_INTERFACE': 'CGI/1.1',
 'HTTP_HOST': '192.168.3.6:8864',
 'HTTP_NT': 'upnp:event',
 'HTTP_NTS': 'upnp:propchange',
 'HTTP_SEQ': '0',
 'HTTP_SID': 'uuid:90c85032-1dd2-11b2-81b9-b20893bae8be',
 'PATH_INFO': '/',
 'QUERY_STRING': '',
 'REMOTE_ADDR': '192.168.3.4',
 'REMOTE_PORT': '4790',
 'REQUEST_METHOD': 'NOTIFY',
 'SCRIPT_NAME': '',
 'SERVER_NAME': 'raspberrypi',
 'SERVER_PORT': '8864',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'SERVER_SOFTWARE': 'gevent/1.1 Python/3.4',
 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>,
 'wsgi.input': <gevent.pywsgi.Input object at 0x761691f0>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)} failed with TypeError
@iancmcc
Copy link
Owner

iancmcc commented Sep 5, 2016

Looks like wsgi.version is a tuple instead of a string. Some change in the
server, probably.
On Mon, Sep 5, 2016 at 2:46 PM PiRune notifications@github.com wrote:

How can I avoid getting this error?

Traceback (most recent call last):
File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 884, in handle_one_response
self.run_application()
File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 871, in run_application
self.process_result()
File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 860, in process_result
for data in self.result:
File "/usr/local/lib/python3.4/dist-packages/ouimeaux/subscribe.py", line 70, in _handle
data = data.split("\n\n")[0]
TypeError: Type str doesn't support the buffer API
{'CONTENT_LENGTH': '189',
'CONTENT_TYPE': 'text/xml; charset="utf-8"',
'GATEWAY_INTERFACE': 'CGI/1.1',
'HTTP_HOST': '192.168.3.6:8864',
'HTTP_NT': 'upnp:event',
'HTTP_NTS': 'upnp:propchange',
'HTTP_SEQ': '0',
'HTTP_SID': 'uuid:90c85032-1dd2-11b2-81b9-b20893bae8be',
'PATH_INFO': '/',
'QUERY_STRING': '',
'REMOTE_ADDR': '192.168.3.4',
'REMOTE_PORT': '4790',
'REQUEST_METHOD': 'NOTIFY',
'SCRIPT_NAME': '',
'SERVER_NAME': 'raspberrypi',
'SERVER_PORT': '8864',
'SERVER_PROTOCOL': 'HTTP/1.1',
'SERVER_SOFTWARE': 'gevent/1.1 Python/3.4',
'wsgi.errors': <_io.TextIOWrapper name='' mode='w' encoding='UTF-8'>,
'wsgi.input': <gevent.pywsgi.Input object at 0x761691f0>,
'wsgi.multiprocess': False,
'wsgi.multithread': False,
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.version': (1, 0)} failed with TypeError


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
#138, or mute the thread
https://github.com/notifications/unsubscribe-auth/AADic2w53oTZznXFwngDnVJv45oYGzNHks5qnHGTgaJpZM4J1Shq
.

@DIYtechie
Copy link
Author

@iancmcc Thanks for you reply :) I must admit I'm not sure what that means. Should I change something in the server and how?

@iancmcc
Copy link
Owner

iancmcc commented Sep 6, 2016

Naah, and also I was entirely wrong. Reading tracebacks on a phone leads to
mistakes :). The problem is that data is bytes being split with a string,
according to Google. If you change "\n\n" to b"\n\n", that may fix it.

On Tue, Sep 6, 2016 at 2:26 AM PiRune notifications@github.com wrote:

@iancmcc https://github.com/iancmcc Thanks for you reply :) I must
admit I'm not sure what that means. Should I change something in the server
and how?


You are receiving this because you were mentioned.

Reply to this email directly, view it on GitHub
#138 (comment),
or mute the thread
https://github.com/notifications/unsubscribe-auth/AADicwtKfkIz1McWcw8eWaIyYBdFvkj0ks5qnRWFgaJpZM4J1Shq
.

@DIYtechie
Copy link
Author

Unfortunately, that was the first thing I tried (after Googling), but that results in a new TypeError:

TypeError: an integer is required and

TypeError: ('Not a bytestring', '<html><body><h1>200 OK</h1></body></html>'

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 739, in _write_with_headers
    towrite.extend(data)
TypeError: an integer is required

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 884, in handle_one_response
    self.run_application()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 871, in run_application
    self.process_result()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 862, in process_result
    self.write(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 713, in write
    self._write_with_headers(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 741, in _write_with_headers
    raise TypeError("Not a bytestring", data)
TypeError: ('Not a bytestring', '<html><body><h1>200 OK</h1></body></html>')
{'CONTENT_LENGTH': '190',
 'CONTENT_TYPE': 'text/xml; charset="utf-8"',
 'GATEWAY_INTERFACE': 'CGI/1.1',
 'HTTP_HOST': '192.168.3.6:8885',
 'HTTP_NT': 'upnp:event',
 'HTTP_NTS': 'upnp:propchange',
 'HTTP_SEQ': '0',
 'HTTP_SID': 'uuid:8d1f14bc-1dd2-11b2-81ba-b20893bae8be',
 'PATH_INFO': '/',
 'QUERY_STRING': '',
 'REMOTE_ADDR': '192.168.3.4',
 'REMOTE_PORT': '3286',
 'REQUEST_METHOD': 'NOTIFY',
 'SCRIPT_NAME': '',
 'SERVER_NAME': 'raspberrypi',
 'SERVER_PORT': '8885',
 'SERVER_PROTOCOL': 'HTTP/1.1',
 'SERVER_SOFTWARE': 'gevent/1.1 Python/3.4',
 'wsgi.errors': <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>,
 'wsgi.input': <gevent.pywsgi.Input object at 0x76223298>,
 'wsgi.multiprocess': False,
 'wsgi.multithread': False,
 'wsgi.run_once': False,
 'wsgi.url_scheme': 'http',
 'wsgi.version': (1, 0)} failed with TypeError

@DIYtechie
Copy link
Author

Still not anyone who can help with this error?

@iancmcc
Copy link
Owner

iancmcc commented Dec 7, 2016 via email

@DIYtechie
Copy link
Author

Great! :) Would love to have ouimeaux working with Python 3.4 so I can integrate with my other smart home Python scripts.

@fahrmairm
Copy link

I had a similar error when running under Python 3.4:

Traceback (most recent call last):
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 936, in handle_one_response
    self.run_application()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 910, in run_application
    self.process_result()
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 896, in process_result
    self.write(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 742, in write
    self._write_with_headers(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 764, in _write_with_headers
    self._write(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 727, in _write
    self._sendall(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/pywsgi.py", line 702, in _sendall
    self.socket.sendall(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/_socket3.py", line 409, in sendall
    data_memory = _get_memory(data)
  File "/usr/local/lib/python3.4/dist-packages/gevent/_socket3.py", line 36, in _get_memory
    mv = memoryview(data)
TypeError: memoryview: str object does not have the buffer interface
Fri Mar 10 16:36:24 2017 {'REMOTE_ADDR': '::ffff:192.168.10.64', 'HTTP_HOST': '192.168.10.61:8591', 'REMOTE_PORT': '4928', (hidden keys: 22)} failed with TypeError

fix in my case was changing line 21 in ouimeaux/subscribe.py

from

SUCCESS = '<html><body><h1>200 OK</h1></body></html>'

to

SUCCESS = b'<html><body><h1>200 OK</h1></body></html>'

@DIYtechie
Copy link
Author

@fahrmairm thank you :) I'll try this at my earliest opportunity.

@DIYtechie
Copy link
Author

No error so far :) It appears to be working, but will continue testing.

@iancmcc iancmcc closed this as completed Jan 4, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants