diff options
-rw-r--r-- | README.asciidoc | 2 | ||||
-rw-r--r-- | misc/requirements/requirements-qutebrowser.txt-raw | 1 | ||||
-rw-r--r-- | qutebrowser/utils/utils.py | 12 | ||||
-rw-r--r-- | qutebrowser/utils/version.py | 1 | ||||
-rw-r--r-- | requirements.txt | 1 | ||||
-rw-r--r-- | scripts/dev/recompile_requirements.py | 1 | ||||
-rwxr-xr-x | setup.py | 3 | ||||
-rw-r--r-- | tests/unit/utils/test_version.py | 2 |
8 files changed, 18 insertions, 5 deletions
diff --git a/README.asciidoc b/README.asciidoc index 5437036be..6ab9784a8 100644 --- a/README.asciidoc +++ b/README.asciidoc @@ -131,6 +131,8 @@ The following software and libraries are required to run qutebrowser: * http://pygments.org/[pygments] * https://github.com/yaml/pyyaml[PyYAML] * https://www.attrs.org/[attrs] +* https://importlib-resources.readthedocs.io/[importlib_resources] (on python + 3.8 or older) The following libraries are optional: diff --git a/misc/requirements/requirements-qutebrowser.txt-raw b/misc/requirements/requirements-qutebrowser.txt-raw index 4678b9ce5..0926b74e6 100644 --- a/misc/requirements/requirements-qutebrowser.txt-raw +++ b/misc/requirements/requirements-qutebrowser.txt-raw @@ -4,3 +4,4 @@ pyPEG2 PyYAML colorama attrs +importlib_resources diff --git a/qutebrowser/utils/utils.py b/qutebrowser/utils/utils.py index a991b2503..ab85c4d06 100644 --- a/qutebrowser/utils/utils.py +++ b/qutebrowser/utils/utils.py @@ -42,6 +42,11 @@ from typing import (Any, Callable, IO, Iterator, Optional, Sequence, Tuple, Type from PyQt5.QtCore import QUrl, QVersionNumber from PyQt5.QtGui import QClipboard, QDesktopServices from PyQt5.QtWidgets import QApplication +# We cannot use the stdlib version on 3.7-3.8 because we need the files() API. +if sys.version_info >= (3, 9): + import importlib.resources as importlib_resources +else: + import importlib_resources import pkg_resources import yaml try: @@ -216,13 +221,12 @@ def read_file(filename: str, binary: bool = False) -> Any: with open(fn, 'r', encoding='utf-8') as f: return f.read() else: - data = pkg_resources.resource_string( - qutebrowser.__name__, filename) + p = importlib_resources.files(qutebrowser) / filename if binary: - return data + return p.read_bytes() - return data.decode('UTF-8') + return p.read_text() def resource_filename(filename: str) -> str: diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 64efe4c4f..09aeb5a13 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -263,6 +263,7 @@ def _module_versions() -> Sequence[str]: ('pygments', ['__version__']), ('yaml', ['__version__']), ('attr', ['__version__']), + ('importlib_resources', []), ('PyQt5.QtWebEngineWidgets', []), ('PyQt5.QtWebEngine', ['PYQT_WEBENGINE_VERSION_STR']), ('PyQt5.QtWebKitWidgets', []), diff --git a/requirements.txt b/requirements.txt index f7a78d28d..5cd5f9c10 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,6 +2,7 @@ attrs==20.3.0 colorama==0.4.4 +importlib-resources==3.3.0 Jinja2==2.11.2 MarkupSafe==1.1.1 Pygments==2.7.3 diff --git a/scripts/dev/recompile_requirements.py b/scripts/dev/recompile_requirements.py index 4caa26667..3b7c227f2 100644 --- a/scripts/dev/recompile_requirements.py +++ b/scripts/dev/recompile_requirements.py @@ -174,6 +174,7 @@ CHANGELOG_URLS = { 'mypy-extensions': 'https://github.com/python/mypy_extensions/commits/master', 'pyroma': 'https://github.com/regebro/pyroma/blob/master/HISTORY.txt', 'pyPEG2': None, + 'importlib-resources': 'https://importlib-resources.readthedocs.io/en/latest/changelog%20%28links%29.html', } @@ -71,7 +71,8 @@ try: entry_points={'gui_scripts': ['qutebrowser = qutebrowser.qutebrowser:main']}, zip_safe=True, - install_requires=['pypeg2', 'jinja2', 'pygments', 'PyYAML', 'attrs'], + install_requires=['pypeg2', 'jinja2', 'pygments', 'PyYAML', 'attrs', + 'importlib_resources>=1.1.0; python_version < "3.9"'], python_requires='>=3.6', name='qutebrowser', version=_get_constant('version'), diff --git a/tests/unit/utils/test_version.py b/tests/unit/utils/test_version.py index 593557ae8..922692fdd 100644 --- a/tests/unit/utils/test_version.py +++ b/tests/unit/utils/test_version.py @@ -561,11 +561,13 @@ class ImportFake: ('pygments', True), ('yaml', True), ('attr', True), + ('importlib_resources', True), ('PyQt5.QtWebEngineWidgets', True), ('PyQt5.QtWebEngine', True), ('PyQt5.QtWebKitWidgets', True), ]) self.no_version_attribute = ['sip', + 'importlib_resources', 'PyQt5.QtWebEngineWidgets', 'PyQt5.QtWebKitWidgets', 'PyQt5.QtWebEngine'] |