Anki/qt
Aristotelis 2d1c058106
Maintain compatibility with PyQt5 add-ons in PyQt6 builds (#1440)
* Alias PyQt5 to PyQt6 on PyQt6 builds

Restores basic compatibility with PyQt5 add-ons

* Register QtCore early to work around sip error

* Monkey-patch unscoped enums that are in use by add-ons back in

Enums whose namespace moved with PyQt6 were determined using the tooling in https://github.com/qutebrowser/qutebrowser/issues/5904

Relevant enums for the Anki add-on ecosystem were found by grepping through all AnkiWeb add-ons and a selection of GitHub-released add-ons.

* Add full Qt.Key namespace

Maintains compatibility with add-ons that allow specifying key bindings via Qt.Key enums

* Reintroduce PyQt6.Qt as an alias for QtCore.Qt

* Alias classes shifted from QtWidgets to QtGui

* Add missing enums

Adds ≈200 enums that were missed during the initial grep

* Map exec_ calls to exec

* Tweak section headers

* Fix QtWebEngineWidgets imports failing due to delayed import

Addesses: "QtWebEngineWidgets must be imported before a QCoreApplication instance is created"

* Register additional aliases for top-level Qt modules

Given how we have had to deal with side-effects when not registering other aliased imports ahead of time, it seems safer to also register the remaining few with sys.modules.

* Handle calls to deprecated PyQt resource API graciously

* Create QtWebEngineWidgets aliases for classes moved to QtWebEngineCore

* Alias QShortcut

* Restore QWebEnginePage.view()

* Alias sip to PyQt6.sip

* Alias QtCore.QRegExp to QtCore.QRegularExpression

* Restructure aqt.qt into package

Pre-requirement for aliasing the PyQt5.Qt namespace correctly.

Should hopefully also make it easier to keep an overview as Qt-compat-related modules were proliferating.

* Properly alias PyQt5.Qt

PyQt5.Qt used to serve as a common namespace for all Qt classes, not just QtCore.Qt.*

While this changes does not make all classes accessible via PyQt5.Qt, it does so for the most important Qt submodules, which should cover most add-on breakages.

* Simplify Qt resource system legacy handling

* Also alias PyQt6.Qt

Covers imports of the form `from PyQt5 import import Qt` (due to previous aliasing of PyQt5 to PyQt6)

* Add missing enums

Better approach to grepping through add-ons yielded additional hits

* Run formatters

* Satisfy pylint
2021-10-28 19:57:42 +10:00
..
aqt Maintain compatibility with PyQt5 add-ons in PyQt6 builds (#1440) 2021-10-28 19:57:42 +10:00
icons move remaining Filter button items into sidebar 2021-02-05 18:58:22 +10:00
linux Quote $PREFIX properly for paths with spaces 2021-09-23 01:24:52 +00:00
mac exclude Mac dylib from '...' 2021-02-04 20:41:08 +10:00
package make console optional on Windows 2021-10-28 18:57:21 +10:00
tests updated package scripts 2021-10-28 18:46:45 +10:00
tools add new hook: add_cards_did_change_deck (#1420) 2021-10-12 17:55:21 +10:00
.isort.cfg initial Bazel conversion 2020-11-01 14:26:58 +10:00
.pylintrc switch to new-style PyQt scoped enums and Qt6 2021-10-15 12:57:19 +10:00
bazelfixes.py updated package scripts 2021-10-28 18:46:45 +10:00
BUILD.bazel improve PyQt install 2021-10-23 10:56:17 +10:00
dmypy.py switch to new-style PyQt scoped enums and Qt6 2021-10-15 12:57:19 +10:00
mypy.ini switch to new-style PyQt scoped enums and Qt6 2021-10-15 12:57:19 +10:00
README.md minor doc updates 2020-12-11 22:37:12 +10:00
runanki.py get PyQt working directly with ./run on macOS 2021-10-16 18:07:29 +10:00

Python's Qt GUI is in aqt/