Work around QUrl::query() not being available with PyQt 5.9.1

See https://www.riverbankcomputing.com/pipermail/pyqt/2017-November/039702.html
This commit is contained in:
Florian Bruhin 2017-11-06 08:50:03 +01:00
parent 2514b009af
commit b55bb5dc6f
5 changed files with 23 additions and 4 deletions

View File

@ -64,6 +64,8 @@ Fixed
- Sites like `qute://help` now redirect to `qute://help/` to make sure links
work properly.
- Fixes for the size calculation of pinned tabs in the tab bar.
- Worked around a crash with PyQt 5.9.1 compiled against Qt < 5.9.1 when using
:yank or qute:// URLs.
Deprecated
~~~~~~~~~~

View File

@ -814,7 +814,7 @@ class CommandDispatcher:
flags |= QUrl.FullyEncoded
url = QUrl(self._current_url())
url_query = QUrlQuery()
url_query_str = url.query()
url_query_str = urlutils.query_string(url)
if '&' not in url_query_str and ';' in url_query_str:
url_query.setQueryDelimiters('=', ';')
url_query.setQuery(url_query_str)

View File

@ -36,7 +36,7 @@ from PyQt5.QtCore import QUrlQuery, QUrl
import qutebrowser
from qutebrowser.config import config, configdata, configexc, configdiff
from qutebrowser.utils import (version, utils, jinja, log, message, docutils,
objreg)
objreg, urlutils)
from qutebrowser.misc import objects
@ -137,7 +137,7 @@ def data_for_url(url):
"""
path = url.path()
host = url.host()
query = url.query()
query = urlutils.query_string(url)
# A url like "qute:foo" is split as "scheme:path", not "scheme:host".
log.misc.debug("url: {}, path: {}, host {}".format(
url.toDisplayString(), path, host))

View File

@ -26,7 +26,7 @@ import ipaddress
import posixpath
import urllib.parse
from PyQt5.QtCore import QUrl
from PyQt5.QtCore import QUrl, QUrlQuery
from PyQt5.QtNetwork import QHostInfo, QHostAddress, QNetworkProxy
from qutebrowser.config import config
@ -615,6 +615,18 @@ def safe_display_string(qurl):
return qurl.toDisplayString()
def query_string(qurl):
"""Get a query string for the given URL.
This is a WORKAROUND for:
https://www.riverbankcomputing.com/pipermail/pyqt/2017-November/039702.html
"""
try:
return qurl.query()
except AttributeError: # pragma: no cover
return QUrlQuery(qurl).query()
class InvalidProxyTypeError(Exception):
"""Error raised when proxy_from_url gets an unknown proxy type."""

View File

@ -758,6 +758,11 @@ def test_safe_display_string_invalid():
urlutils.safe_display_string(QUrl())
def test_query_string():
url = QUrl('https://www.example.com/?foo=bar')
assert urlutils.query_string(url) == 'foo=bar'
class TestProxyFromUrl:
@pytest.mark.parametrize('url, expected', [