response_body = response.read()
if response.status != httplib.OK:
logger.debug("Received response\n%s", response_body)
if b'<html>' in response_body:
parse_error_page(response_body)
else:
# assume the response is in protobuf format
parse_error_protobuf(response_body)
raise errors.InterfaceError('RPC request returned invalid status code', response.status)
The problem is that the response_body is of type bytes while for the
function parse_error_page()'s call to parser.feed(html) expects a
string (parser being instantiated from a call to JettyErrorPageParser()).
Below a full stacktrace showing the problem. Locally, I modified the file
avatica.py (not sure why my dependency downloaded from pip is not
client.py, but the files are similar and the bug are in both files) and changed:
response_body = response.read().decode('utf-8')
...and it worked; I finally got the error message showing up. Not sure that
this simple fix would work with all uses of response_body. Further code
review and testing would be required. Also, here we make the assumption
(probably good) that the Phoenix server always return UTF-8 documents, but that
must be validated.
Traceback (most recent call last):
File "./pythonscript", line 224, in mainwrapper
main()
File "./pythonscript", line 210, in main
phoenix_cursor = phoenix_connect().cursor()
File "./pythonscript", line 51, in phoenix_connect
return phoenixdb.connect(phoenix_url, autocommit=True)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/__init__.py", line 67, in connect
return Connection(client, **kwargs)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/connection.py", line 56, in __init__
self.open()
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/connection.py", line 73, in open
self._client.open_connection(self._id, info=self._connection_args)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/avatica.py", line 329, in open_connection
response_data = self._apply(request)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/avatica.py", line 212, in _apply
if b'<html>' in response_body:
TypeError: 'in <string>' requires string as left operand, not bytes
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "./pythonscript", line 229, in <module>
mainwrapper()
File "./pythonscript", line 227, in mainwrapper
logger.error("Exception lancée: %s", exception.message)
AttributeError: 'TypeError' object has no attribute 'message'
Exception ignored in: <bound method Connection.__del__ of <phoenixdb.connection.Connection object at 0x7fa90be2ce80>>
Traceback (most recent call last):
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/connection.py", line 61, in __del__
self.close()
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/connection.py", line 89, in close
self._client.close_connection(self._id)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/avatica.py", line 341, in close_connection
self._apply(request)
File "/home/myuser/.local/lib/python3.6/site-packages/phoenixdb/avatica.py", line 212, in _apply
if b'<html>' in response_body:
TypeError: 'in <string>' requires string as left operand, not bytes
The python library is now maintenanced in the phoenix repo. They took over ownership of the project. Could you please open the issue on the phoenix mailing list?
In
avatica/client.py
, line 509, we find:The problem is that the response_body is of type
bytes
while for the functionparse_error_page()
's call toparser.feed(html)
expects astring
(parser
being instantiated from a call toJettyErrorPageParser()
).Below a full stacktrace showing the problem. Locally, I modified the file
avatica.py
(not sure why my dependency downloaded from pip is notclient.py
, but the files are similar and the bug are in both files) and changed:...and it worked; I finally got the error message showing up. Not sure that this simple fix would work with all uses of
response_body
. Further code review and testing would be required. Also, here we make the assumption (probably good) that the Phoenix server always return UTF-8 documents, but that must be validated.