yelp-python icon indicating copy to clipboard operation
yelp-python copied to clipboard

Search can't handle Unicode terms

Open mittonk opened this issue 8 years ago • 4 comments

I'd expect Search to take Unicode objects in Python 2.7:

# -*- coding: utf-8 -*-                                                          
from yelp.client import Client                                                   
from yelp.oauth1_authenticator import Oauth1Authenticator                        

auth = Oauth1Authenticator(...)                                                                                                                                                              
client = Client(auth)                                                           
response = client.search('San Francisco', term=u'aü')                           

It fails:

Traceback (most recent call last):
  File "foo.py", line 19, in <module>
    response = client.search('San Francisco', term=u'aü')
  File "/nail/home/kmitton/pg/other/yelp-python/yelp/endpoint/search.py", line 44, in search
    self.client._make_request(SEARCH_PATH, url_params)
  File "/nail/home/kmitton/pg/other/yelp-python/yelp/client.py", line 47, in _make_request
    signed_url = self.authenticator.sign_request(url, url_params)
  File "/nail/home/kmitton/pg/other/yelp-python/yelp/oauth1_authenticator.py", line 36, in sign_request
    return oauth_request.to_url()
  File "/nail/home/kmitton/pg/kmitton-bash/virtualenv_run/lib/python2.7/site-packages/oauth2/__init__.py", line 363, in to_url
    urllib.urlencode(query, True), fragment)
  File "/usr/lib64/python2.7/urllib.py", line 1354, in urlencode
    l.append(k + '=' + quote_plus(str(elt)))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 1: ordinal not in range(128)

Workaround: Manually encode as UTF-8 bytestring:

response = client.search('San Francisco', term=u'aü'.encode('utf8'))            

Feels like we should be able to handle Unicode.

mittonk avatar Apr 26 '16 15:04 mittonk

(Discovered while investigating Cyrillic & Romanian characters in https://github.com/Yelp/yelp-api/issues/124, but repros on simpler strings like the one above.)

mittonk avatar Apr 26 '16 15:04 mittonk

Shouldn't be encouraged Python3 usage? :)

pathcl avatar Apr 27 '16 20:04 pathcl

Encourage, yes! Force, no.

mittonk avatar Apr 28 '16 06:04 mittonk

Well ideally it should work on both worlds I'll try to reproduce it

pathcl avatar Apr 28 '16 06:04 pathcl