Pass Werkzeug/WSGI middleware bytestrings, not unicode. (#6180)
Pass Werkzeug/WSGI middleware bytestrings, not unicode. (#6180)

* Pass Werkzeug/WSGI middleware bytestrings, not unicode.

This fixes a bug that prevents website routing to non-ascii routes, such as
will be automatically created by items with non-ascii characters in their
names.

Werkzeug/WSGI actually does careful decoding of URLs passed to it which
ensure they are in the correct format internally. However, using a non-ascii
URL was causing a unicode error and exceptions.

In app.py, unicode_literals is in effect. SharedDataMiddleware and
StaticDataMiddleware instances are created to deal with files in 'assets'
and 'files', respectively. The paths passed need to be bytestrings; however,
due to the use of unicode, these were passed as unicode. This was causing a
later exception when using a (unicode) string method on the decoded URL
string. By explicitly passing bytestrings, this is avoided and everything
works as expected.

* Instead of calling str, call .encode('ascii') method for compatibility with Python3.

* Unicode URL WSGI fix: After testing, it is actually the key not the value of
the export that matters, however both can be wrapped in str() to get 'bytes'
in Python 2 and unicode in Python 3 (which WSGI seems to expect).

RicardoJohann/frappe,yashodhank/frappe,adityahase/frappe,saurabh6790/frappe,frappe/frappe,adityahase/frappe,vjFaLk/frappe,RicardoJohann/frappe,vjFaLk/frappe,adityahase/frappe,RicardoJohann/frappe,saurabh6790/frappe,almeidapaulopt/frappe,saurabh6790/frappe,StrellaGroup/frappe,frappe/frappe,yashodhank/frappe,StrellaGroup/frappe,RicardoJohann/frappe,almeidapaulopt/frappe,vjFaLk/frappe,mhbu50/frappe,mhbu50/frappe,adityahase/frappe,vjFaLk/frappe,saurabh6790/frappe,StrellaGroup/frappe,mhbu50/frappe,almeidapaulopt/frappe,yashodhank/frappe,yashodhank/frappe,mhbu50/frappe,frappe/frappe,almeidapaulopt/frappe