Azure / msrest-for-python

The runtime library "msrest" for AutoRest generated Python clients.
MIT License
41 stars 64 forks source link

Object DeserializationError / unicode #107

Closed jtlz2 closed 6 years ago

jtlz2 commented 6 years ago

I have modified the example image_analysis_in_stream at https://github.com/Azure-Samples/cognitive-services-python-sdk-samples/blob/master/samples/vision/computer_vision_samples.py to rather carry out OCR, i.e.

with open(os.path.join(IMAGES_FOLDER, "image.jpg"), "rb") as image_stream:
        image_response = client.recognize_printed_text_in_stream(image_stream,language='en')

This gives the following Traceback:

  File "/anaconda2/lib/python2.7/site-packages/azure/cognitiveservices/vision/computervision/computer_vision_api.py", line 962, in recognize_printed_text_in_stream
    deserialized = self._deserialize('OcrResult', response)
  File "/anaconda2/lib/python2.7/site-packages/msrest/serialization.py", line 1179, in __call__
    return self._deserialize(target_obj, data)
  File "/anaconda2/lib/python2.7/site-packages/msrest/serialization.py", line 1245, in _deserialize
    value = self.deserialize_data(raw_value, attr_desc['type'])
  File "/anaconda2/lib/python2.7/site-packages/msrest/serialization.py", line 1433, in deserialize_data
    return self._deserialize(obj_type, data)
  File "/anaconda2/lib/python2.7/site-packages/msrest/serialization.py", line 1249, in _deserialize
    raise_with_traceback(DeserializationError, msg, err)
  File "/anaconda2/lib/python2.7/site-packages/msrest/exceptions.py", line 57, in raise_with_traceback
    raise error
msrest.exceptions.DeserializationError: Unable to deserialize to object: type, AttributeError: 'unicode' object has no attribute 'get

Line 962 requires a response code of 200, so can I assume image_stream is valid?

How do I then deserialize OcrResult to JSON?

Is this an API version mismatch..?

Thanks for any speedy help.

(This is a cross-posting of https://github.com/Azure/azure-sdk-for-python/issues/2769)

lmazuel commented 6 years ago

So, that's deserialization issue, and seeing the trace you received something from the server. That something wasn't matching the expected behavior it seems. Could you enable HTTP logs to see what you received from the server? To do that, turn on the HTTP logging (disabled by default):

client.config.enable_http_logger = True

and log using logging as usual in DEBUG mode.

I will try to see if I find time myself to reproduce it.

Edit: let's keep both issue opened until I know if it's msrest, or SDK or server.

lmazuel commented 6 years ago

It seems the service team did an update in the dev branch I didn't release yet: https://github.com/Azure/azure-sdk-for-python/pull/2614

That updates OCRResult. Could you try from that PR? You will find a direct wheel download from that PR, no need to use pip black magic to install from git.

lmazuel commented 6 years ago

After investigation, not a msrest issue but really a generated SDK. Track the fix in the SDK repo.