Client.login() fails when URL contains character requiring urlencoding
|Reported by:||Owned by:||Adrian Holovaty|
|Has patch:||yes||Needs documentation:||no|
|Needs tests:||no||Patch needs improvement:||no|
I wrote a unittest using the Test Client. It was failing to log in to a page protected by @login_required, using the login() method. My path for the login method is '/video/+sub/'. The login() method was returning False, signifying login not possible, even though the username and password were correct.
The reason for the login() failure is that the URL '/video/+sub/' becomes urlencoded as '/video/%2Bsub/' in the redirect to the login form, and the resulting redirect fails. (Why?)
- use a url without a '+' (not optimal in my application)
- call login() on a different page first, then get() on my page with '+' in the url
- Perhaps the handling of the urlencoded value is failing when it should succeed? That's beyond my current debugging experience.
- change client.py as in the attached patch - a one line change to use the non-urlencoded value in path instead of the value passed through in next.