From d164e3a41f69d9b4d24854a5cbd967baa4a6f951 Mon Sep 17 00:00:00 2001 From: Jelmer Draaijer Date: Tue, 19 Dec 2023 17:23:59 +0100 Subject: [PATCH] Update to pyqt6 --- .github/workflows/tests.yml | 2 +- decide/qt/inputwindow/gui.py | 43 ++++++----- decide/qt/inputwindow/models.py | 9 ++- decide/qt/inputwindow/tests/test_comment.py | 4 +- decide/qt/inputwindow/widgets.py | 10 +-- decide/qt/mainwindow/errordialog.py | 10 +-- decide/qt/mainwindow/errorgrid.py | 4 +- decide/qt/mainwindow/gui.py | 22 +++--- decide/qt/mainwindow/helpers.py | 2 +- decide/qt/mainwindow/settings.py | 4 +- decide/qt/mainwindow/widgets.py | 55 +++++++------- decide/qt/utils.py | 5 +- poetry.lock | 82 ++++++++++++--------- pyproject.toml | 2 +- setup.cfg | 2 +- 15 files changed, 139 insertions(+), 117 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2a55dbc..59455df 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: - { os: macos-latest, python-version: '3.11' } env: DISPLAY: ':99.0' - PYTEST_QT_API: 'pyqt5' + PYTEST_QT_API: 'PyQt6' steps: - uses: actions/checkout@v4 - name: Install Poetry diff --git a/decide/qt/inputwindow/gui.py b/decide/qt/inputwindow/gui.py index c742c05..0796275 100644 --- a/decide/qt/inputwindow/gui.py +++ b/decide/qt/inputwindow/gui.py @@ -3,7 +3,10 @@ import sys import requests -from PyQt5 import QtWidgets, QtGui +from PyQt6 import QtWidgets, QtGui +from PyQt6.QtGui import QAction +from PyQt6.QtWidgets import QMainWindow, QHBoxLayout, QVBoxLayout, QTabWidget, QWidget, QMenuBar, QFileDialog, \ + QErrorMessage, QMessageBox, QApplication from decide import log_filename, input_folder from decide.data.reader import InputDataFile @@ -21,7 +24,7 @@ from decide.qt.utils import show_user_error -class InputWindow(QtWidgets.QMainWindow): +class InputWindow(QMainWindow): def __init__(self, main_window: DecideMainWindow = None, *args, **kwargs): super(InputWindow, self).__init__(*args, **kwargs) @@ -31,10 +34,10 @@ def __init__(self, main_window: DecideMainWindow = None, *args, **kwargs): # refresh the main windows after editing self.main_window = main_window - self.main = QtWidgets.QHBoxLayout() - self.left = QtWidgets.QVBoxLayout() + self.main = QHBoxLayout() + self.left = QVBoxLayout() - self.tabs = QtWidgets.QTabWidget() + self.tabs = QTabWidget() self.actor_widget = ActorWidget() self.issue_widget = IssueWidget() @@ -53,10 +56,10 @@ def __init__(self, main_window: DecideMainWindow = None, *args, **kwargs): self.main.addLayout(self.left) self.main.addWidget(self.tabs) - q = QtWidgets.QWidget() + q = QWidget() q.setLayout(self.main) - self.menubar = QtWidgets.QMenuBar(self) + self.menubar = QMenuBar(self) self.init_menu() self.setCentralWidget(q) @@ -77,16 +80,16 @@ def init_menu(self): file_menu = self.menubar.addMenu("File") example_menu = self.menubar.addMenu("Examples") - load_kopenhagen = QtWidgets.QAction("&load Kopenhagen", self.menubar) + load_kopenhagen = QAction("&load Kopenhagen", self.menubar) load_kopenhagen.triggered.connect(self.load_copenhagen) - load_cop = QtWidgets.QAction("&load Parijs", self.menubar) + load_cop = QAction("&load Parijs", self.menubar) load_cop.triggered.connect(self.load_cop21) - open_action = QtWidgets.QAction("Open", self.menubar) + open_action = QAction("Open", self.menubar) open_action.triggered.connect(self.open_dialog) - save_action = QtWidgets.QAction("Save", self.menubar) + save_action = QAction("Save", self.menubar) save_action.triggered.connect(self.save_location) example_menu.addAction(load_kopenhagen) @@ -131,13 +134,13 @@ def load_input_file(self, file_path): def open_dialog(self): - file_name, _ = QtWidgets.QFileDialog.getOpenFileName(self, "Select input data") + file_name, _ = QFileDialog.getOpenFileName(self, "Select input data") if file_name: try: self.load(file_name) except Exception as ex: - error_dialog = QtWidgets.QErrorMessage(self) + error_dialog = QErrorMessage(self) error_dialog.showMessage(str(ex)) raise ex @@ -146,22 +149,22 @@ def save_location(self): if self.input_filename: - button_reply = QtWidgets.QMessageBox.question( + button_reply = QMessageBox.question( self, "Save", "Overwrite existing file {}".format( self.input_filename ), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.No, + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, + QMessageBox.StandardButton.No, ) else: - button_reply = QtWidgets.QMessageBox.No + button_reply = QMessageBox.StandardButton.No - if button_reply == QtWidgets.QMessageBox.Yes: + if button_reply == QMessageBox.StandardButton.Yes: file_name = self.input_filename else: - file_name, _ = QtWidgets.QFileDialog.getSaveFileName(self, "Select input data") + file_name, _ = QFileDialog.getSaveFileName(self, "Select input data") if file_name: self.save(file_name) @@ -352,7 +355,7 @@ def register_app(ex): # sys.excepthook = exception_hook - app = QtWidgets.QApplication(sys.argv) + app = QApplication(sys.argv) app.setQuitOnLastWindowClosed(True) input_window = InputWindow() diff --git a/decide/qt/inputwindow/models.py b/decide/qt/inputwindow/models.py index 98b2387..d60143e 100644 --- a/decide/qt/inputwindow/models.py +++ b/decide/qt/inputwindow/models.py @@ -1,7 +1,8 @@ import uuid from decimal import Decimal -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets +from PyQt6.QtWidgets import QLabel from typesystem.base import ValidationResult from decide.data import types @@ -199,10 +200,10 @@ def __init__(self, actor: ActorInputModel, issue: IssueInputModel): self.actor = actor self.issue = issue - self.actor_input = QtWidgets.QLabel(actor.name) - self.issue_input = QtWidgets.QLabel(issue.name) + self.actor_input = QLabel(actor.name) + self.issue_input = QLabel(issue.name) - self.power_input = QtWidgets.QLabel(str(actor.power)) + self.power_input = QLabel(str(actor.power)) self.position_input = DoubleInput() self.position_input.valueChanged.connect(self.set_position) diff --git a/decide/qt/inputwindow/tests/test_comment.py b/decide/qt/inputwindow/tests/test_comment.py index 286d7b5..a221359 100644 --- a/decide/qt/inputwindow/tests/test_comment.py +++ b/decide/qt/inputwindow/tests/test_comment.py @@ -1,4 +1,4 @@ -from PyQt5 import QtCore +from PyQt6 import QtCore from decide.qt.inputwindow.gui import InputWindow, register_app @@ -10,6 +10,6 @@ def test_actor_widget_add_button(qtbot): assert x.actor_widget._row_pointer == 1, 'Only the heading is shown' assert x.actor_widget.grid_layout.rowCount() == 1 - qtbot.mouseClick(x.actor_widget.add_button, QtCore.Qt.LeftButton) + qtbot.mouseClick(x.actor_widget.add_button, QtCore.Qt.MouseButton.LeftButton) assert x.actor_widget.grid_layout.rowCount() == 2, 'The heading and an empty row is shown' diff --git a/decide/qt/inputwindow/widgets.py b/decide/qt/inputwindow/widgets.py index cb55701..b2c8f0c 100644 --- a/decide/qt/inputwindow/widgets.py +++ b/decide/qt/inputwindow/widgets.py @@ -1,8 +1,8 @@ from collections import defaultdict from decimal import Decimal -from PyQt5 import QtWidgets, QtCore -from PyQt5.QtWidgets import QListWidgetItem +from PyQt6 import QtWidgets, QtCore +from PyQt6.QtWidgets import QListWidgetItem from decide.data.types import ActorIssue from decide.qt.inputwindow import signals @@ -25,7 +25,7 @@ def __init__(self, title, btn=True): self.scroll_area.setWidget(self.scroll_area_widget) self.grid_layout = QtWidgets.QGridLayout(self.scroll_area_widget) - self.grid_layout.setAlignment(QtCore.Qt.AlignTop) + self.grid_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.layout_container = QtWidgets.QVBoxLayout() self.layout_container.addWidget(self.scroll_area) @@ -367,7 +367,7 @@ def __init__(self, actor_issue_box: ActorIssueWidget, *args, **kwargs): self.choices_list_widget = QtWidgets.QListWidget(self) self.choices_list_widget.setMaximumHeight(100) - self.choices_list_widget.setSelectionMode(QtWidgets.QListWidget.MultiSelection) + self.choices_list_widget.setSelectionMode(QtWidgets.QListWidget.SelectionMode.MultiSelection) self.choices_list_widget.itemSelectionChanged.connect(self.redraw) self.choices_list_widget_items = {} @@ -382,7 +382,7 @@ def __init__(self, actor_issue_box: ActorIssueWidget, *args, **kwargs): self.scroll_area.setWidget(self.scroll_area_widget) self.grid_layout = QtWidgets.QGridLayout(self.scroll_area_widget) - self.grid_layout.setAlignment(QtCore.Qt.AlignTop) + self.grid_layout.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) self.container.addWidget(self.scroll_area) diff --git a/decide/qt/mainwindow/errordialog.py b/decide/qt/mainwindow/errordialog.py index a50995d..cdcd28b 100644 --- a/decide/qt/mainwindow/errordialog.py +++ b/decide/qt/mainwindow/errordialog.py @@ -2,8 +2,8 @@ import sys import requests -from PyQt5 import QtWidgets -from PyQt5.QtWidgets import QMessageBox, QDialog +from PyQt6 import QtWidgets +from PyQt6.QtWidgets import QMessageBox, QDialog from decide import log_filename from decide.qt.mainwindow.settings import ProgramSettings @@ -89,14 +89,14 @@ def send_error_report(self): self, "Confirm sending", "Are you sure you want to send the message with the attachments?", - QMessageBox.Yes | QMessageBox.No, - QMessageBox.No, + QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No, + QMessageBox.StandardButton.No, ) settings = None input_data = None - if confirm == QMessageBox.Yes: + if confirm == QMessageBox.StandardButton.Yes: files = {} diff --git a/decide/qt/mainwindow/errorgrid.py b/decide/qt/mainwindow/errorgrid.py index a6bdd41..33dd4aa 100644 --- a/decide/qt/mainwindow/errorgrid.py +++ b/decide/qt/mainwindow/errorgrid.py @@ -3,8 +3,8 @@ import sys from typing import List -from PyQt5 import QtWidgets -from PyQt5.QtWidgets import QDialog +from PyQt6 import QtWidgets +from PyQt6.QtWidgets import QDialog from decide import log_filename, input_folder from decide.data.reader import InputDataFile from decide.qt.utils import exception_hook diff --git a/decide/qt/mainwindow/gui.py b/decide/qt/mainwindow/gui.py index bfb292c..61dde7e 100644 --- a/decide/qt/mainwindow/gui.py +++ b/decide/qt/mainwindow/gui.py @@ -6,8 +6,8 @@ import xml.etree.cElementTree as ET from shutil import copyfile -from PyQt5 import QtCore -from PyQt5 import QtWidgets +from PyQt6 import QtCore +from PyQt6 import QtWidgets from decide import log_filename from decide.cli import init_output_directory from decide.data.modelfactory import ModelFactory @@ -237,13 +237,13 @@ def init_ui(self): overview_box = QtWidgets.QGroupBox("Overview") overview_box.setLayout(self.overview_widget) - self.overview_widget.setAlignment(QtCore.Qt.AlignTop) + self.overview_widget.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) right = QtWidgets.QVBoxLayout() right.addWidget(settings_box, 1) right.addWidget(overview_box, 1) right.addWidget(self.start, 1) - right.setAlignment(QtCore.Qt.AlignTop) + right.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) main.addLayout(left, 1) main.addLayout(right, 1) @@ -418,11 +418,11 @@ def finished(self, output_directory): self, "Done", "Done running the calculations. Open the result directory?", - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.No, + QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No, + QtWidgets.QMessageBox.StandardButton.No, ) - if button_reply == QtWidgets.QMessageBox.Yes: + if button_reply == QtWidgets.QMessageBox.StandardButton.Yes: utils.open_file_natively(output_directory) def _clean_progress_dialog(self): @@ -443,11 +443,11 @@ def run(self): self, "Output directory already exists", "The given directory {} already exists. Proceed?".format(output_dir), - QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, - QtWidgets.QMessageBox.No, + QtWidgets.QMessageBox.StandardButton.Yes | QtWidgets.QMessageBox.StandardButton.No, + QtWidgets.QMessageBox.StandardButton.No, ) - if button_reply == QtWidgets.QMessageBox.No: + if button_reply == QtWidgets.QMessageBox.StandardButton.No: return self.setWindowTitle("Decide Exchange Model") @@ -516,7 +516,7 @@ def main(): sys.excepthook = utils.exception_hook - qtapp.exec_() + qtapp.exec() if __name__ == "__main__": diff --git a/decide/qt/mainwindow/helpers.py b/decide/qt/mainwindow/helpers.py index 15e6d81..4b016e3 100644 --- a/decide/qt/mainwindow/helpers.py +++ b/decide/qt/mainwindow/helpers.py @@ -1,6 +1,6 @@ from decimal import Decimal -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets def clear_layout(layout): diff --git a/decide/qt/mainwindow/settings.py b/decide/qt/mainwindow/settings.py index 5b229e3..74fd852 100644 --- a/decide/qt/mainwindow/settings.py +++ b/decide/qt/mainwindow/settings.py @@ -1,8 +1,8 @@ import os import xml.etree.cElementTree as ET -from PyQt5 import QtCore -from PyQt5 import QtWidgets +from PyQt6 import QtCore +from PyQt6 import QtWidgets from decide import decide_base_path from decide.cli import float_range diff --git a/decide/qt/mainwindow/widgets.py b/decide/qt/mainwindow/widgets.py index 35d19b2..a63ab98 100644 --- a/decide/qt/mainwindow/widgets.py +++ b/decide/qt/mainwindow/widgets.py @@ -1,6 +1,9 @@ from typing import List -from PyQt5 import QtWidgets, QtCore +from PyQt6 import QtWidgets, QtCore +from PyQt6.QtGui import QAction +from PyQt6.QtWidgets import QMenu + from decide.data import types from decide.qt import utils @@ -18,7 +21,7 @@ def __init__(self, main_window, *args, **kwargs): self.objects = [] self.row_pointer = 0 - self.setAlignment(QtCore.Qt.AlignTop) + self.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop) def clear(self): """ @@ -72,8 +75,8 @@ def set_issues(self, issues: List[types.PartialIssue]): checkbox.stateChanged.connect(self.state_changed) if ( - issue in self.main_window.settings.selected_issues - or len(self.main_window.settings.selected_issues) == 0 + issue in self.main_window.settings.selected_issues + or len(self.main_window.settings.selected_issues) == 0 ): checkbox.setChecked(True) @@ -101,8 +104,8 @@ def set_actors(self, actors: List[types.PartialActor]): checkbox.setObjectName(actor.id) if ( - actor in self.main_window.settings.selected_actors - or len(self.main_window.settings.selected_actors) == 0 + actor in self.main_window.settings.selected_actors + or len(self.main_window.settings.selected_actors) == 0 ): checkbox.setChecked(True) @@ -141,7 +144,7 @@ def set_actor_issues(self, actor_issues=List[types.ActorIssue]): class SummaryWidget(DynamicFormLayout): def __init__( - self, main_window, settings, data, actor_widget, issue_widget, *args, **kwargs + self, main_window, settings, data, actor_widget, issue_widget, *args, **kwargs ): """ :type settings: decide.qt.mainwindow.settings.ProgramSettings @@ -169,8 +172,8 @@ def update_widget(self): self.add_text_row("Input", self.settings.input_filename, self.test_callback) if ( - self.settings.output_directory is None - or self.settings.output_directory == "None" + self.settings.output_directory is None + or self.settings.output_directory == "None" ): self.add_text_row( "Output directory", @@ -249,49 +252,49 @@ def __init__(self, main_window, *args, **kwargs): file_menu = self.addMenu("&File") # output_menu = self.addMenu("&Output") - self.output_sqlite = QtWidgets.QAction("&sqlite", self) + self.output_sqlite = QAction("&sqlite", self) self.output_sqlite.setCheckable(True) self.output_sqlite.setChecked(True) - self.issue_development_csv = QtWidgets.QAction("Issue development (.csv)", self) + self.issue_development_csv = QAction("Issue development (.csv)", self) self.issue_development_csv.setCheckable(True) self.issue_development_csv.setChecked(True) - self.externalities_csv = QtWidgets.QAction("Externalities (.csv)", self) + self.externalities_csv = QAction("Externalities (.csv)", self) self.externalities_csv.setCheckable(True) self.externalities_csv.setChecked(True) - self.exchanges_csv = QtWidgets.QAction("Exchanges (.csv)", self) + self.exchanges_csv = QAction("Exchanges (.csv)", self) self.exchanges_csv.setCheckable(True) self.exchanges_csv.setChecked(True) - self.voting_positions = QtWidgets.QAction("Show voting positions", self) + self.voting_positions = QAction("Show voting positions", self) self.voting_positions.setCheckable(True) self.voting_positions.setChecked(True) - self.summary_only = QtWidgets.QAction("Summary only (.csv)", self) + self.summary_only = QAction("Summary only (.csv)", self) self.summary_only.setCheckable(True) self.summary_only.setChecked(True) - self.open_data_view = QtWidgets.QAction("New data file", self) + self.open_data_view = QAction("New data file", self) self.open_data_view.triggered.connect(self.main_window.open_data_view) - open_action = QtWidgets.QAction("&Open data file", self) + open_action = QAction("&Open data file", self) open_action.triggered.connect(self.main_window.open_input_data) - edit_action = QtWidgets.QAction("&Edit data file", self) + edit_action = QAction("&Edit data file", self) edit_action.triggered.connect( self.main_window.open_current_input_window_with_current_data ) - save_settings = QtWidgets.QAction("&Save settings", self) + save_settings = QAction("&Save settings", self) save_settings.triggered.connect(self.main_window.save_settings) - output_dir_action = QtWidgets.QAction("&Set output directory", self) + output_dir_action = QAction("&Set output directory", self) output_dir_action.triggered.connect(self.main_window.select_output_dir) # debug = self.addMenu("Debug") - log_action = QtWidgets.QAction("Show log window", self) + log_action = QAction("Show log window", self) log_action.triggered.connect(self.main_window.show_debug_dialog) file_menu.addAction(open_action) @@ -314,17 +317,17 @@ def __init__(self, main_window, *args, **kwargs): # error_report_2.triggered.connect(self.trigger_error) # debug.addAction(error_report_2) - def recently_opened_menu(self, menu: QtWidgets.QMenu): - sub_menu = QtWidgets.QMenu("Recently opened", menu) + def recently_opened_menu(self, menu: QMenu): + sub_menu = QMenu("Recently opened", menu) menu.addMenu(sub_menu) for item in self.settings.recently_opened: - action = QtWidgets.QAction(item, self) + action = QAction(item, self) action.triggered.connect(self.open_input_data) sub_menu.addAction(action) def open_input_data(self): - sender = self.sender() # type: QtWidgets.QAction + sender = self.sender() # type: QAction self.main_window.init_ui_data(sender.text()) @@ -357,7 +360,7 @@ def save(self): if hasattr(self.settings, key): attr = getattr(self, key) - if isinstance(attr, QtWidgets.QAction): + if isinstance(attr, QAction): setattr(self.settings, key, value.isChecked()) else: setattr(self.settings, key, value.value()) diff --git a/decide/qt/utils.py b/decide/qt/utils.py index d8e6f8a..963f524 100644 --- a/decide/qt/utils.py +++ b/decide/qt/utils.py @@ -4,7 +4,8 @@ import sys import traceback -from PyQt5 import QtWidgets +from PyQt6 import QtWidgets +from PyQt6.QtWidgets import QMessageBox from decide.qt import app @@ -39,4 +40,4 @@ def exception_to_string(ex): def show_user_error(self, message: str): - QtWidgets.QMessageBox.about(self, "Input data invalid", str(message)) + QMessageBox.about(self, "Input data invalid", str(message)) diff --git a/poetry.lock b/poetry.lock index f8d7953..34a8aa4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -687,49 +687,63 @@ files = [ diagrams = ["jinja2", "railroad-diagrams"] [[package]] -name = "pyqt5" -version = "5.12.3" -description = "Python bindings for the Qt cross platform UI and application toolkit" +name = "pyqt6" +version = "6.6.1" +description = "Python bindings for the Qt cross platform application toolkit" optional = false -python-versions = "*" +python-versions = ">=3.6.1" files = [ - {file = "PyQt5-5.12.3-5.12.10-cp35.cp36.cp37.cp38.cp39-abi3-macosx_10_6_intel.whl", hash = "sha256:eb2e872a6f240459bc4a508aa53eb7df53e6406af95c2115f37abbe07d6b470b"}, - {file = "PyQt5-5.12.3-5.12.10-cp35.cp36.cp37.cp38.cp39-abi3-manylinux1_x86_64.whl", hash = "sha256:54b02a18d95f4c6116aafc13f9d61da5ccbe912c5e08a8afde5a81468b9ff546"}, - {file = "PyQt5-5.12.3-5.12.10-cp35.cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:d93887bf9dc9a234467508f4f1294381e74043700529badb73a712f3ecbea063"}, - {file = "PyQt5-5.12.3-5.12.10-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:24b2c60644caae136f92dfe21c6a071badb121a6410f3f73760e70c9f3459dcf"}, + {file = "PyQt6-6.6.1-cp38-abi3-macosx_10_14_universal2.whl", hash = "sha256:6b43878d0bbbcf8b7de165d305ec0cb87113c8930c92de748a11c473a6db5085"}, + {file = "PyQt6-6.6.1-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5aa0e833cb5a79b93813f8181d9f145517dd5a46f4374544bcd1e93a8beec537"}, + {file = "PyQt6-6.6.1-cp38-abi3-win_amd64.whl", hash = "sha256:03a656d5dc5ac31b6a9ad200f7f4f7ef49fa00ad7ce7a991b9bb691617141d12"}, + {file = "PyQt6-6.6.1.tar.gz", hash = "sha256:9f158aa29d205142c56f0f35d07784b8df0be28378d20a97bcda8bd64ffd0379"}, ] [package.dependencies] -PyQt5_sip = ">=4.19.14,<13" +PyQt6-Qt6 = ">=6.6.0" +PyQt6-sip = ">=13.6,<14" + +[[package]] +name = "pyqt6-qt6" +version = "6.6.1" +description = "The subset of a Qt installation needed by PyQt6." +optional = false +python-versions = "*" +files = [ + {file = "PyQt6_Qt6-6.6.1-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:0409aa09b8dae90d5f00ba2d9761e671dfbc54ab169cff8f4cdfecd7f664fd0f"}, + {file = "PyQt6_Qt6-6.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:8dcac0bd9df13d63deafb6a61969b832c34467da4a28d2b7abf78066bfce22e6"}, + {file = "PyQt6_Qt6-6.6.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:e7df8851c93886412d890d0ecc62b39f42521861ee7a80982136d65903e1f2c5"}, + {file = "PyQt6_Qt6-6.6.1-py3-none-win_amd64.whl", hash = "sha256:41f1ed3eadc00540c205a0e897ae0e0fffc21b896e575214f7c5b9c86d2037d1"}, +] [[package]] -name = "pyqt5-sip" -version = "12.13.0" -description = "The sip module support for PyQt5" +name = "pyqt6-sip" +version = "13.6.0" +description = "The sip module support for PyQt6" optional = false python-versions = ">=3.7" files = [ - {file = "PyQt5_sip-12.13.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a7e3623b2c743753625c4650ec7696362a37fb36433b61824cf257f6d3d43cca"}, - {file = "PyQt5_sip-12.13.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e4ac714252370ca037c7d609da92388057165edd4f94e63354f6d65c3ed9d53"}, - {file = "PyQt5_sip-12.13.0-cp310-cp310-win32.whl", hash = "sha256:d5032da3fff62da055104926ffe76fd6044c1221f8ad35bb60804bcb422fe866"}, - {file = "PyQt5_sip-12.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:9a8cdd6cb66adcbe5c941723ed1544eba05cf19b6c961851b58ccdae1c894afb"}, - {file = "PyQt5_sip-12.13.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0f85fb633a522f04e48008de49dce1ff1d947011b48885b8428838973fbca412"}, - {file = "PyQt5_sip-12.13.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec60162e034c42fb99859206d62b83b74f987d58937b3a82bdc07b5c3d190dec"}, - {file = "PyQt5_sip-12.13.0-cp311-cp311-win32.whl", hash = "sha256:205cd449d08a2b024a468fb6100cd7ed03e946b4f49706f508944006f955ae1a"}, - {file = "PyQt5_sip-12.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:1c8371682f77852256f1f2d38c41e2e684029f43330f0635870895ab01c02f6c"}, - {file = "PyQt5_sip-12.13.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:7fe3375b508c5bc657d73b9896bba8a768791f1f426c68053311b046bcebdddf"}, - {file = "PyQt5_sip-12.13.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:773731b1b5ab1a7cf5621249f2379c95e3d2905e9bd96ff3611b119586daa876"}, - {file = "PyQt5_sip-12.13.0-cp312-cp312-win32.whl", hash = "sha256:fb4a5271fa3f6bc2feb303269a837a95a6d8dd16be553aa40e530de7fb81bfdf"}, - {file = "PyQt5_sip-12.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4498f3b1b15f43f5d12963accdce0fd652b0bcaae6baf8008663365827444c"}, - {file = "PyQt5_sip-12.13.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b984c2620a7a7eaf049221b09ae50a345317add2624c706c7d2e9e6632a9587"}, - {file = "PyQt5_sip-12.13.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3188a06956aef86f604fb0d14421a110fad70d2a9e943dbacbfc3303f651dade"}, - {file = "PyQt5_sip-12.13.0-cp38-cp38-win32.whl", hash = "sha256:108a15f603e1886988c4b0d9d41cb74c9f9815bf05cefc843d559e8c298a10ce"}, - {file = "PyQt5_sip-12.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:db228cd737f5cbfc66a3c3e50042140cb80b30b52edc5756dbbaa2346ec73137"}, - {file = "PyQt5_sip-12.13.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5338773bbaedaa4f16a73c142fb23cc18c327be6c338813af70260b756c7bc92"}, - {file = "PyQt5_sip-12.13.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:29fa9cc964517c9fc3f94f072b9a2aeef4e7a2eda1879cb835d9e06971161cdf"}, - {file = "PyQt5_sip-12.13.0-cp39-cp39-win32.whl", hash = "sha256:96414c93f3d33963887cf562d50d88b955121fbfd73f937c8eca46643e77bf61"}, - {file = "PyQt5_sip-12.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:bbc7cd498bf19e0862097be1ad2243e824dea56726f00c11cff1b547c2d31d01"}, - {file = "PyQt5_sip-12.13.0.tar.gz", hash = "sha256:7f321daf84b9c9dbca61b80e1ef37bdaffc0e93312edae2cd7da25b953971d91"}, + {file = "PyQt6_sip-13.6.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d6b5f699aaed0ac1fcd23e8fbca70d8a77965831b7c1ce474b81b1678817a49d"}, + {file = "PyQt6_sip-13.6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8c282062125eea5baf830c6998587d98c50be7c3a817a057fb95fef647184012"}, + {file = "PyQt6_sip-13.6.0-cp310-cp310-win32.whl", hash = "sha256:fa759b6339ff7e25f9afe2a6b651b775f0a36bcb3f5fa85e81a90d3b033c83f4"}, + {file = "PyQt6_sip-13.6.0-cp310-cp310-win_amd64.whl", hash = "sha256:8f9df9f7ccd8a9f0f1d36948c686f03ce1a1281543a3e636b7b7d5e086e1a436"}, + {file = "PyQt6_sip-13.6.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5b9c6b6f9cfccb48cbb78a59603145a698fb4ffd176764d7083e5bf47631d8df"}, + {file = "PyQt6_sip-13.6.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:86a7b67c64436e32bffa9c28c9f21bf14a9faa54991520b12c3f6f435f24df7f"}, + {file = "PyQt6_sip-13.6.0-cp311-cp311-win32.whl", hash = "sha256:58f68a48400e0b3d1ccb18090090299bad26e3aed7ccb7057c65887b79b8aeea"}, + {file = "PyQt6_sip-13.6.0-cp311-cp311-win_amd64.whl", hash = "sha256:0dfd22cfedd87e96f9d51e0778ca2ba3dc0be83e424e9e0f98f6994d8d9c90f0"}, + {file = "PyQt6_sip-13.6.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3bf03e130fbfd75c9c06e687b86ba375410c7a9e835e4e03285889e61dd4b0c4"}, + {file = "PyQt6_sip-13.6.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:43fb8551796030aae3d66d6e35e277494071ec6172cd182c9569ab7db268a2f5"}, + {file = "PyQt6_sip-13.6.0-cp312-cp312-win32.whl", hash = "sha256:13885361ca2cb2f5085d50359ba61b3fabd41b139fb58f37332acbe631ef2357"}, + {file = "PyQt6_sip-13.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:24441032a29791e82beb7dfd76878339058def0e97fdb7c1cea517f3a0e6e96b"}, + {file = "PyQt6_sip-13.6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3075d8b325382750829e6cde6971c943352309d35768a4d4da0587459606d562"}, + {file = "PyQt6_sip-13.6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a6ce80bc24618d8a41be8ca51ad9f10e8bc4296dd90ab2809573df30a23ae0e5"}, + {file = "PyQt6_sip-13.6.0-cp38-cp38-win32.whl", hash = "sha256:fa7b10af7488efc5e53b41dd42c0f421bde6c2865a107af7ae259aff9d841da9"}, + {file = "PyQt6_sip-13.6.0-cp38-cp38-win_amd64.whl", hash = "sha256:9adf672f9114687533a74d5c2d4c03a9a929ad5ad9c3e88098a7da1a440ab916"}, + {file = "PyQt6_sip-13.6.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:98bf954103b087162fa63b3a78f30b0b63da22fd6450b610ec1b851dbb798228"}, + {file = "PyQt6_sip-13.6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:39854dba35f8e5a4288da26ecb5f40b4c5ec1932efffb3f49d5ea435a7f37fb3"}, + {file = "PyQt6_sip-13.6.0-cp39-cp39-win32.whl", hash = "sha256:747f6ca44af81777a2c696bd501bc4815a53ec6fc94d4e25830e10bc1391f8ab"}, + {file = "PyQt6_sip-13.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:33ea771fe777eb0d1a2c3ef35bcc3f7a286eb3ff09cd5b2fdd3d87d1f392d7e8"}, + {file = "PyQt6_sip-13.6.0.tar.gz", hash = "sha256:2486e1588071943d4f6657ba09096dc9fffd2322ad2c30041e78ea3f037b5778"}, ] [[package]] @@ -896,4 +910,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "77e8025af4468e867c96188f45a49acb0f4dfa88e4a9baabd254315cd46f746a" +content-hash = "1201e026ce4fbed1e8c3936a3d3821be0b70cfaac1d331147a340f183a6cc56b" diff --git a/pyproject.toml b/pyproject.toml index 3ca4470..e71377e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,8 +14,8 @@ pandas = "1.5.0" numpy = "1.23.4" typesystem = "0.2.5" peewee = ">=3.14.4" -PyQt5 = "5.12.3" requests = "*" +pyqt6 = "^6.6.1" [tool.poetry.group.dev.dependencies] pytest = "^7.4.3" diff --git a/setup.cfg b/setup.cfg index 4e59cbf..3a3451b 100644 --- a/setup.cfg +++ b/setup.cfg @@ -4,7 +4,7 @@ commit = True tag = True [tool:pytest] -qt_api = pyqt5 +qt_api = pyqt6 [bumpversion:file:decide/__init__.py]