python-hyper / hyper

HTTP/2 for Python.

Home Page:http://hyper.rtfd.org/en/latest/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

basestring erroneously ignores unicode in Python2.7

imankulov opened this issue · comments

Documenting it for those poor souls who are still stuck with hyper under Python2.7.

Passing a Unicode object (not an "str") in Python2.7 to a hyper.tls.init_context as a cert argument raises an exception IOError: [Errno 21] Is a directory.

This happens because "basestring" is erroneously set to (str, str) here:

hyper/hyper/tls.py

Lines 123 to 127 in 18b629b

if cert is not None:
try:
basestring
except NameError:
basestring = (str, bytes)

Note that because of the assignment to the basestring on line 127, an attempt to dereference the object before will always raise NameError, because the interpreter will consider basestring as a local variable. The behavior is explained in the Python FAQ, and the solution is to declare basestring as global explicitly.