From 173fd24a12049818e28d2b979c753e77163c6083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marta=20Marczykowska-G=C3=B3recka?= Date: Mon, 6 May 2024 17:37:47 +0200 Subject: [PATCH] Remove deprecated pkg_resources, replace with importlib references QubesOS/qubes-issues#9195 --- qubesappmenus/__init__.py | 21 +++++---- qubesappmenus/receive.py | 9 ++-- qubesappmenus/tests.py | 89 ++++++++++++++++++++++++--------------- 3 files changed, 71 insertions(+), 48 deletions(-) diff --git a/qubesappmenus/__init__.py b/qubesappmenus/__init__.py index 2e89ae3..a8bf14e 100644 --- a/qubesappmenus/__init__.py +++ b/qubesappmenus/__init__.py @@ -30,7 +30,7 @@ import logging import itertools -import pkg_resources +import importlib.resources import xdg.BaseDirectory import qubesadmin @@ -345,11 +345,11 @@ def _appmenus_create_onedir(self, vm, force=False, refresh_cache=True, anything_changed = False directory_changed = False directory_file = self._directory_path(vm, dispvm=dispvm) + data = importlib.resources.files(__name__).joinpath( + self.directory_template_name(vm, dispvm)).read_text() if self.write_desktop_file( vm, - pkg_resources.resource_string( - __name__, - self.directory_template_name(vm, dispvm)).decode(), + data, directory_file, dispvm): anything_changed = True @@ -384,12 +384,11 @@ def _appmenus_create_onedir(self, vm, force=False, refresh_cache=True, if not dispvm: vm_settings_fname = os.path.join( appmenus_dir, self.settings_name(vm)) + data = importlib.resources.files(__name__).joinpath( + 'qubes-vm-settings.desktop.template').read_text() if self.write_desktop_file( vm, - pkg_resources.resource_string( - __name__, - 'qubes-vm-settings.desktop.template' - ).decode(), + data, vm_settings_fname): changed_appmenus.append(vm_settings_fname) target_appmenus.append(os.path.basename(vm_settings_fname)) @@ -598,9 +597,9 @@ def appmenus_init(self, vm, src=None): with open( os.path.join(own_templates_dir, 'qubes-start.desktop'), 'wb') as qubes_start_f: - qubes_start_f.write(pkg_resources.resource_string( - __name__, - 'qubes-start.desktop.template')) + data = importlib.resources.files(__name__).joinpath( + 'qubes-start.desktop.template').read_bytes() + qubes_start_f.write(data) source_whitelist_filename = 'vm-' + AppmenusSubdirs.whitelist if src and ('default-menu-items' in src.features or os.path.exists( diff --git a/qubesappmenus/receive.py b/qubesappmenus/receive.py index 4037b7a..27837e2 100755 --- a/qubesappmenus/receive.py +++ b/qubesappmenus/receive.py @@ -27,7 +27,7 @@ import os import sys import shlex -import pkg_resources +import importlib.resources import qubesimgconverter import qubesadmin.exc @@ -305,9 +305,10 @@ def process_appmenus_templates(appmenusext, vm, appmenus): if not os.path.exists(qubes_start_fname): with open(qubes_start_fname, 'wb') as qubes_start_f: vm.log.info("Creating Start") - qubes_start_f.write(pkg_resources.resource_string( - __name__, - 'qubes-start.desktop.template')) + template_data = importlib.resources.files( + __name__).joinpath( + 'qubes-start.desktop.template').read_bytes() + qubes_start_f.write(template_data) # Do not create reserved Start entry appmenus.pop('qubes-start', None) diff --git a/qubesappmenus/tests.py b/qubesappmenus/tests.py index 945b23a..0035c26 100644 --- a/qubesappmenus/tests.py +++ b/qubesappmenus/tests.py @@ -31,7 +31,7 @@ import unittest.mock import logging -import pkg_resources +import importlib.resources import qubesappmenus import qubesappmenus.receive @@ -247,16 +247,19 @@ def test_005_created_appvm(self): self.ext.appmenus_init(appvm) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template')) + f.write(importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes()) self.ext.appmenus_create(appvm, refresh_cache=False) self.ext.appicons_create(appvm) evince_path = self._make_desktop_name(appvm, 'evince.desktop') self.assertPathExists(evince_path) with open(evince_path, 'rb') as f: + new_file_bytes = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop').read_bytes() self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/evince.desktop').replace(b'%BASEDIR%', + new_file_bytes.replace(b'%BASEDIR%', qubesappmenus.basedir.encode()), f.read() ) @@ -279,27 +282,34 @@ def test_006_created_appvm_custom(self): self.ext.appmenus_init(appvm) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template')) + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() + f.write(evince_data) self.ext.appmenus_create(appvm, refresh_cache=False) self.ext.appicons_create(appvm) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'xterm.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/xterm.desktop.template')) + xterm_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/xterm.desktop.template').read_bytes() + f.write(xterm_data) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template'). - replace(b'Document Viewer', b'Random Viewer')) + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() + f.write(evince_data.replace(b'Document Viewer', b'Random Viewer')) self.ext.appmenus_update(appvm) evince_path = self._make_desktop_name(appvm, 'evince.desktop') self.assertPathExists(evince_path) with open(evince_path, 'rb') as f: + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop').read_bytes() self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/evince.desktop') + evince_data .replace(b'%BASEDIR%', qubesappmenus.basedir.encode()) .replace(b'Document Viewer', b'Random Viewer'), f.read() @@ -308,9 +318,10 @@ def test_006_created_appvm_custom(self): xterm_path = self._make_desktop_name(appvm, 'xterm.desktop') self.assertPathExists(xterm_path) with open(xterm_path, 'rb') as f: - self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/xterm.desktop') + xterm_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/xterm.desktop').read_bytes() + self.assertEqual(xterm_data .replace(b'%BASEDIR%', qubesappmenus.basedir.encode()), f.read() ) @@ -335,8 +346,10 @@ def test_007_created_dispvm(self): self.ext.appmenus_init(appvm) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template')) + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() + f.write(evince_data) self.ext.appmenus_create(appvm, refresh_cache=False) self.ext.appicons_create(appvm) appmenus_dir = self.ext.appmenus_dir(appvm) @@ -386,8 +399,8 @@ class PopenMockup(object): pass self.assertEqual(service, 'qubes.GetAppmenus') p = PopenMockup() - p.stdout = pkg_resources.resource_stream(__name__, - 'test-data/appmenus.input') + p.stdout = importlib.resources.files( + anchor=__name__).joinpath('test-data/appmenus.input').open(mode='rb') p.wait = lambda: None p.returncode = 0 return p @@ -509,8 +522,10 @@ def test_120_create_appvm(self, mock_subprocess): old_path = os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop') with open(old_path, 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template')) + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() + f.write(evince_data) appvm = TestVM('test-inst-app', klass='AppVM', template=tpl, @@ -536,10 +551,12 @@ def test_120_create_appvm(self, mock_subprocess): evince_path = self._make_desktop_name(appvm, 'evince.desktop') self.assertPathExists(evince_path) with open(evince_path, 'rb') as f: + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop').read_bytes() self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/evince.desktop').replace(b'%BASEDIR%', - qubesappmenus.basedir.encode()), + evince_data.replace(b'%BASEDIR%', + qubesappmenus.basedir.encode()), f.read() ) @@ -583,8 +600,10 @@ def test_121_create_appvm_with_whitelist(self, mock_subprocess): self.ext.appmenus_init(tpl) with open(os.path.join(self.ext.templates_dirs(tpl)[0], 'evince.desktop'), 'wb') as f: - f.write(pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template')) + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() + f.write(evince_data) with open(os.path.join(self.basedir, tpl.name, 'vm-whitelisted-appmenus.list'), 'wb') as f: @@ -601,10 +620,12 @@ def test_121_create_appvm_with_whitelist(self, mock_subprocess): evince_path = self._make_desktop_name(appvm, 'evince.desktop') self.assertPathExists(evince_path) with open(evince_path, 'rb') as f: + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop').read_bytes() self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/evince.desktop').replace(b'%BASEDIR%', - qubesappmenus.basedir.encode()), + evince_data.replace(b'%BASEDIR%', + qubesappmenus.basedir.encode()), f.read() ) @@ -666,9 +687,11 @@ class PopenMockup(object): 'evince.desktop') self.assertPathExists(evince_path) with open(evince_path, 'rb') as f: + evince_data = importlib.resources.files( + anchor=__name__).joinpath( + 'test-data/evince.desktop.template').read_bytes() self.assertEqual( - pkg_resources.resource_string(__name__, - 'test-data/evince.desktop.template'), + evince_data, f.read() ) self.assertCountEqual(self.appvm.log.mock_calls, [