Skip to content

Commit

Permalink
ref: replace setuptools pkg_resources with importlib.resources
Browse files Browse the repository at this point in the history
  • Loading branch information
paulmueller committed Nov 20, 2023
1 parent f06b2e0 commit 48e0e07
Show file tree
Hide file tree
Showing 15 changed files with 81 additions and 64 deletions.
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
0.13.1
- fix: handle not-found-errors for non-existent resource downloads
- ref: replace setuptools pkg_resources with importlib.resources
0.13.0
- setup: drop support for Python 3.9
- ci: migrate from appveyor to GitHub Actions
Expand Down
14 changes: 7 additions & 7 deletions dcoraid/__main__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
def main(splash=True):
from importlib import resources
import logging
import os
import pkg_resources
import platform
import sys

Expand All @@ -24,14 +23,14 @@ def main(splash=True):
QGuiApplication.setAttribute(Qt.AA_UseSoftwareOpenGL)

app = QApplication(sys.argv)
imdir = pkg_resources.resource_filename("dcoraid", "img")

if splash:
from PyQt5.QtWidgets import QSplashScreen
from PyQt5.QtGui import QPixmap
from PyQt5.QtCore import QEventLoop
splash_path = os.path.join(imdir, "splash.png")
splash_pix = QPixmap(splash_path)
ref_splash = resources.files("dcoraid.img") / "splash.png"
with resources.as_file(ref_splash) as splash_path:
splash_pix = QPixmap(str(splash_path))
splash = QSplashScreen(splash_pix)
splash.setMask(splash_pix.mask())
splash.show()
Expand All @@ -41,8 +40,9 @@ def main(splash=True):
from .gui import DCORAid

# Set Application Icon
icon_path = os.path.join(imdir, "icon.png")
app.setWindowIcon(QtGui.QIcon(icon_path))
ref_icon = resources.files("dcoraid.img") / "splash.png"
with resources.as_file(ref_icon) as icon_path:
app.setWindowIcon(QtGui.QIcon(str(icon_path)))

# Use dots as decimal separators
QtCore.QLocale.setDefault(QtCore.QLocale(QtCore.QLocale.C))
Expand Down
9 changes: 5 additions & 4 deletions dcoraid/gui/browse_public/widget_browse_public.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import traceback as tb

import pkg_resources
from importlib import resources

from PyQt5 import uic, QtCore, QtWidgets

Expand All @@ -17,9 +17,10 @@ class BrowsePublic(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
"""Browse public DCOR data"""
super(BrowsePublic, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.browse_public", "widget_browse_public.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.browse_public") / "widget_browse_public.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

# Signals for public data browser
self.pushButton_public_search.clicked.connect(self.on_public_search)
Expand Down
8 changes: 4 additions & 4 deletions dcoraid/gui/dbview/filter_base.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import copy
import pkg_resources
from importlib import resources

from PyQt5 import QtCore, QtGui, QtWidgets, uic

Expand All @@ -13,9 +13,9 @@ def __init__(self, *args, **kwargs):
"""Filter view widget with title, edit, checkbox, and table
"""
super(FilterBase, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename("dcoraid.gui.dbview",
"filter_base.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui.dbview") / "filter_base.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

#: List of entries in the current list
self.entries = []
Expand Down
8 changes: 4 additions & 4 deletions dcoraid/gui/dbview/filter_chain.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import copy

import pkg_resources
from importlib import resources

from PyQt5 import QtCore, QtWidgets, uic

Expand All @@ -16,9 +16,9 @@ def __init__(self, *args, **kwargs):
"""
super(FilterChain, self).__init__(*args, **kwargs)
QtWidgets.QMainWindow.__init__(self)
path_ui = pkg_resources.resource_filename("dcoraid.gui.dbview",
"filter_chain.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui.dbview") / "filter_chain.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

#: Current database extract
#: (instance of :class:`dcoraid.dbmodel.core.DBExtract`)
Expand Down
4 changes: 2 additions & 2 deletions dcoraid/gui/download/widget_download.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,11 @@ def set_actions_item(self, row, col, job):
if job.state == "error":
actions = [
{"icon": "trash",
"tooltip": f"delete this job",
"tooltip": "delete this job",
"function": partial(self.on_job_delete, job.job_id)
},
{"icon": "redo",
"tooltip": f"retry download",
"tooltip": "retry download",
"function": partial(self.on_job_retry, job.job_id)
},
]
Expand Down
20 changes: 12 additions & 8 deletions dcoraid/gui/main.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
import atexit
from contextlib import ExitStack
import logging
import os
import pathlib
import pkg_resources
from importlib import resources
import signal
import sys
import time
Expand All @@ -25,10 +26,13 @@
from .status_widget import StatusWidget
from .wizard import SetupWizard

file_manager = ExitStack()
atexit.register(file_manager.close)

# set Qt icon theme search path
QtGui.QIcon.setThemeSearchPaths([
os.path.join(pkg_resources.resource_filename("dcoraid", "img"),
"icon-theme")])
ref = resources.files('dcoraid.img') / 'icon-theme'
path = file_manager.enter_context(resources.as_file(ref))
QtGui.QIcon.setThemeSearchPaths([str(path)])
QtGui.QIcon.setThemeName(".")


Expand Down Expand Up @@ -84,9 +88,9 @@ def __init__(self, *args, **kwargs):

#: DCOR-Aid settings
self.settings = QtCore.QSettings()
path_ui = pkg_resources.resource_filename(
"dcoraid.gui", "main.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui") / "main.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

# GUI
# Preferences dialog
Expand Down
10 changes: 6 additions & 4 deletions dcoraid/gui/maintenance/widget_maintenance.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from os import path as os_path
import shutil

import pkg_resources
from importlib import resources

from PyQt5 import uic, QtCore, QtWidgets
from PyQt5.QtCore import QStandardPaths
Expand All @@ -19,9 +19,11 @@ def __init__(self, *args, **kwargs):
"""Maintenance tasks
"""
super(MaintenanceWidget, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.maintenance", "widget_maintenance.ui")
uic.loadUi(path_ui, self)

ref_ui = resources.files(
"dcoraid.gui.maintenance") / "widget_maintenance.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.toolButton_cache.clicked.connect(self.on_clear_cache)
self.toolButton_drafts.clicked.connect(self.on_remove_drafts)
Expand Down
9 changes: 5 additions & 4 deletions dcoraid/gui/preferences/dlg_preferences.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging
import pathlib
import pkg_resources
from importlib import resources
import random
import socket
import string
Expand All @@ -24,9 +24,10 @@ def __init__(self, *args, **kwargs):
"""Create a new window for preferences
"""
super(PreferencesDialog, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.preferences", "dlg_preferences.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.preferences") / "dlg_preferences.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.setWindowTitle("DCOR-Aid Preferences")
# server
Expand Down
9 changes: 5 additions & 4 deletions dcoraid/gui/upload/dlg_upload.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import logging
import pathlib
import pkg_resources
from importlib import resources
import traceback as tb

from PyQt5 import uic, QtCore, QtGui, QtWidgets
Expand Down Expand Up @@ -31,9 +31,10 @@ def __init__(self, *args, **kwargs):
"""
super(UploadDialog, self).__init__(*args, **kwargs)
self.logger = logging.getLogger(__name__)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.upload", "dlg_upload.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.upload") / "dlg_upload.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

# Dialog box buttons
self.pushButton_proceed = self.buttonBox.button(
Expand Down
18 changes: 11 additions & 7 deletions dcoraid/gui/upload/widget_supplement_item.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import pkg_resources
from importlib import resources

from PyQt5 import uic, QtCore, QtWidgets

Expand Down Expand Up @@ -83,9 +83,11 @@ class RSSTagsItem(RSSItemBase):
def __init__(self, *args, **kwargs):
"""Represents an item in the supplementary resource schema"""
super(RSSTagsItem, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.upload", "widget_supplement_tags.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.upload") / "widget_supplement_tags.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.tableWidget.setRowCount(3)
self.on_assert_row_count()

Expand Down Expand Up @@ -157,9 +159,11 @@ class RSSItem(RSSItemBase):
def __init__(self, *args, **kwargs):
"""Represents an item in the supplementary resource schema"""
super(RSSItem, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.upload", "widget_supplement_item.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.upload") / "widget_supplement_item.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.apply_schema()

# signals
Expand Down
10 changes: 6 additions & 4 deletions dcoraid/gui/upload/widget_tablecell_actions.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import pkg_resources
from importlib import resources
import webbrowser

from PyQt5 import uic, QtCore, QtWidgets
Expand All @@ -14,9 +14,11 @@ def __init__(self, job, *args, **kwargs):
Used for the "Running Uploads" table in the "Uploads" tab.
"""
super(TableCellActions, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.upload", "widget_tablecell_actions.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files(
"dcoraid.gui.upload") / "widget_tablecell_actions.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.job = job
# signals and slots
self.tb_abort.clicked.connect(self.on_abort)
Expand Down
8 changes: 4 additions & 4 deletions dcoraid/gui/upload/widget_upload.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from functools import lru_cache
import os.path as os_path
import pathlib
import pkg_resources
from importlib import resources
import time
import traceback as tb

Expand All @@ -30,9 +30,9 @@ def __init__(self, *args, **kwargs):
"""Manage running uploads
"""
super(UploadWidget, self).__init__(*args, **kwargs)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.upload", "widget_upload.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui.upload") / "widget_upload.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

# hide side panel at beginning
self.widget_info.setVisible(False)
Expand Down
15 changes: 8 additions & 7 deletions dcoraid/gui/wizard/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import pkg_resources
from importlib import resources
import sys
import uuid

Expand Down Expand Up @@ -49,9 +49,10 @@ def get_dcor_dev_api_key():
class APITokenRequestDCORDev(QtWidgets.QDialog):
def __init__(self, parent, user, password):
super(APITokenRequestDCORDev, self).__init__(parent)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.wizard", "dcordevapi.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui.wizard") / "dcordevapi.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.label_user.setText(user)
url = f"https://dcor-dev.mpl.mpg.de/user/{user}/api-tokens"
self.label_url.setText(f"<a href='{url}'>{url}</a>")
Expand All @@ -66,9 +67,9 @@ class SetupWizard(QtWidgets.QWizard):

def __init__(self, *args, **kwargs):
super(SetupWizard, self).__init__(None)
path_ui = pkg_resources.resource_filename(
"dcoraid.gui.wizard", "wizard.ui")
uic.loadUi(path_ui, self)
ref_ui = resources.files("dcoraid.gui.wizard") / "wizard.ui"
with resources.as_file(ref_ui) as path_ui:
uic.loadUi(path_ui, self)

self.pushButton_path_access_token.clicked.connect(
self.on_browse_access_token)
Expand Down
2 changes: 1 addition & 1 deletion dcoraid/img/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# This file turns "img" into a Python module such that we can access
# image files in this folder via pkg_resources.
# image files in this folder via importlib.resources.

0 comments on commit 48e0e07

Please sign in to comment.