From 0c75a53e5749b99d7a990f9ccd8e0f9cebca0a60 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 29 Jan 2023 02:13:32 +0100 Subject: [PATCH 1/3] Fix wrong inport of PyQt5 version (#1324) --- novelwriter/__init__.py | 4 ++-- novelwriter/config.py | 25 ++++++------------------- novelwriter/gui/doceditor.py | 2 +- novelwriter/guimain.py | 6 +++--- tests/test_base/test_base_init.py | 4 ++-- 5 files changed, 14 insertions(+), 27 deletions(-) diff --git a/novelwriter/__init__.py b/novelwriter/__init__.py index 48345eea1..5f06bf180 100644 --- a/novelwriter/__init__.py +++ b/novelwriter/__init__.py @@ -179,12 +179,12 @@ def main(sysArgs=None): "At least Python 3.7 is required, found %s" % CONFIG.verPyString ) errorCode |= 0x04 - if CONFIG.verQtValue < 51000: + if CONFIG.verQtValue < 0x050a00: errorData.append( "At least Qt5 version 5.10 is required, found %s" % CONFIG.verQtString ) errorCode |= 0x08 - if CONFIG.verPyQtValue < 51000: + if CONFIG.verPyQtValue < 0x050a00: errorData.append( "At least PyQt5 version 5.10 is required, found %s" % CONFIG.verPyQtString ) diff --git a/novelwriter/config.py b/novelwriter/config.py index 1f45b58de..eb84443b7 100644 --- a/novelwriter/config.py +++ b/novelwriter/config.py @@ -30,14 +30,13 @@ from time import time from pathlib import Path -from PyQt5.Qt import PYQT_VERSION_STR from PyQt5.QtCore import ( - QT_VERSION_STR, QStandardPaths, QSysInfo, QLocale, QLibraryInfo, - QTranslator + QT_VERSION, QT_VERSION_STR, PYQT_VERSION, PYQT_VERSION_STR, QStandardPaths, + QSysInfo, QLocale, QLibraryInfo, QTranslator ) from novelwriter.error import logException, formatException -from novelwriter.common import checkPath, splitVersionNumber, formatTimeStamp, NWConfigParser +from novelwriter.common import checkPath, formatTimeStamp, NWConfigParser from novelwriter.constants import nwFiles, nwUnicode logger = logging.getLogger(__name__) @@ -190,25 +189,13 @@ def __init__(self): # ========================== # Check Qt5 Versions - verQt = splitVersionNumber(QT_VERSION_STR) - self.verQtString = QT_VERSION_STR - self.verQtMajor = verQt[0] - self.verQtMinor = verQt[1] - self.verQtPatch = verQt[2] - self.verQtValue = verQt[3] - - verQt = splitVersionNumber(PYQT_VERSION_STR) + self.verQtString = QT_VERSION_STR + self.verQtValue = QT_VERSION self.verPyQtString = PYQT_VERSION_STR - self.verPyQtMajor = verQt[0] - self.verPyQtMinor = verQt[1] - self.verPyQtPatch = verQt[2] - self.verPyQtValue = verQt[3] + self.verPyQtValue = PYQT_VERSION # Check Python Version self.verPyString = sys.version.split()[0] - self.verPyMajor = sys.version_info[0] - self.verPyMinor = sys.version_info[1] - self.verPyPatch = sys.version_info[2] self.verPyHexVal = sys.hexversion # Check OS Type diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 1430d1742..99104c00e 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -2512,7 +2512,7 @@ def getSearchObject(self): # Using the Unicode-capable QRegularExpression class was # only added in Qt 5.13. Otherwise, 5.3 and up supports # only the QRegExp class. - if self.mainConf.verQtValue >= 51300: + if self.mainConf.verQtValue >= 0x050d00: rxOpt = QRegularExpression.UseUnicodePropertiesOption if not self.isCaseSense: rxOpt |= QRegularExpression.CaseInsensitiveOption diff --git a/novelwriter/guimain.py b/novelwriter/guimain.py index aa26b95d3..a7f03cb76 100644 --- a/novelwriter/guimain.py +++ b/novelwriter/guimain.py @@ -87,9 +87,9 @@ def __init__(self): logger.info("OS: %s", self.mainConf.osType) logger.info("Kernel: %s", self.mainConf.kernelVer) logger.info("Host: %s", self.mainConf.hostName) - logger.info("Qt5: %s (%d)", self.mainConf.verQtString, self.mainConf.verQtValue) - logger.info("PyQt5: %s (%d)", self.mainConf.verPyQtString, self.mainConf.verPyQtValue) - logger.info("Python: %s (0x%x)", self.mainConf.verPyString, self.mainConf.verPyHexVal) + logger.info("Qt5: %s (0x%06x)", self.mainConf.verQtString, self.mainConf.verQtValue) + logger.info("PyQt5: %s (0x%06x)", self.mainConf.verPyQtString, self.mainConf.verPyQtValue) + logger.info("Python: %s (0x%08x)", self.mainConf.verPyString, self.mainConf.verPyHexVal) logger.info("GUI Language: %s", self.mainConf.guiLocale) # Core Classes diff --git a/tests/test_base/test_base_init.py b/tests/test_base/test_base_init.py index 1d41c8dea..3c5b67803 100644 --- a/tests/test_base/test_base_init.py +++ b/tests/test_base/test_base_init.py @@ -155,8 +155,8 @@ def testBaseInit_Imports(caplog, monkeypatch, tmpPath): monkeypatch.setattr("PyQt5.QtWidgets.QErrorMessage.showMessage", lambda *a: None) monkeypatch.setitem(sys.modules, "lxml", None) monkeypatch.setattr("sys.hexversion", 0x0) - monkeypatch.setattr("novelwriter.CONFIG.verQtValue", 50000) - monkeypatch.setattr("novelwriter.CONFIG.verPyQtValue", 50000) + monkeypatch.setattr("novelwriter.CONFIG.verQtValue", 0x050000) + monkeypatch.setattr("novelwriter.CONFIG.verPyQtValue", 0x050000) with pytest.raises(SystemExit) as ex: _ = novelwriter.main( From 1437659a4e6334432840660e5ee4b996f15e7d24 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 29 Jan 2023 02:14:21 +0100 Subject: [PATCH 2/3] Drop the splitVersionNumber function --- novelwriter/common.py | 27 --------------------------- tests/test_base/test_base_common.py | 25 +++---------------------- 2 files changed, 3 insertions(+), 49 deletions(-) diff --git a/novelwriter/common.py b/novelwriter/common.py index ea38d841f..91058fd0f 100644 --- a/novelwriter/common.py +++ b/novelwriter/common.py @@ -277,33 +277,6 @@ def yesNo(value): return "yes" if value else "no" -def splitVersionNumber(value): - """Split a version string on the form aa.bb.cc into major, minor - and patch, and computes an integer value aabbcc. - """ - if not isinstance(value, str): - return 0, 0, 0, 0 - - vMajor = 0 - vMinor = 0 - vPatch = 0 - vInt = 0 - - vBits = value.split(".") - nBits = len(vBits) - - if nBits > 0: - vMajor = checkInt(vBits[0], 0) - if nBits > 1: - vMinor = checkInt(vBits[1], 0) - if nBits > 2: - vPatch = checkInt(vBits[2], 0) - - vInt = vMajor*10000 + vMinor*100 + vPatch - - return vMajor, vMinor, vPatch, vInt - - def transferCase(source, target): """Transfers the case of the source word to the target word. This will consider all upper or lower, and first char capitalisation. diff --git a/tests/test_base/test_base_common.py b/tests/test_base/test_base_common.py index 0aec498a2..5559439e4 100644 --- a/tests/test_base/test_base_common.py +++ b/tests/test_base/test_base_common.py @@ -33,9 +33,9 @@ checkStringNone, checkString, checkInt, checkFloat, checkBool, checkHandle, checkUuid, checkPath, isHandle, isTitleTag, isItemClass, isItemType, isItemLayout, hexToInt, minmax, checkIntTuple, formatInt, formatTimeStamp, - formatTime, simplified, yesNo, splitVersionNumber, transferCase, fuzzyTime, - numberToRoman, jsonEncode, readTextFile, makeFileNameSafe, sha256sum, - getGuiItem, NWConfigParser + formatTime, simplified, yesNo, transferCase, fuzzyTime, numberToRoman, + jsonEncode, readTextFile, makeFileNameSafe, sha256sum, getGuiItem, + NWConfigParser ) @@ -398,25 +398,6 @@ def testBaseCommon_YesNo(): # END Test testBaseCommon_YesNo -@pytest.mark.base -def testBaseCommon_SplitVersionNumber(): - """Test the splitVersionNumber function. - """ - # OK Values - assert splitVersionNumber("1") == (1, 0, 0, 10000) - assert splitVersionNumber("1.2") == (1, 2, 0, 10200) - assert splitVersionNumber("1.2.3") == (1, 2, 3, 10203) - assert splitVersionNumber("1.2.3.4") == (1, 2, 3, 10203) - assert splitVersionNumber("99.99.99") == (99, 99, 99, 999999) - - # Failed Values - assert splitVersionNumber(None) == (0, 0, 0, 0) - assert splitVersionNumber(1234) == (0, 0, 0, 0) - assert splitVersionNumber("1.2abc") == (1, 0, 0, 10000) - -# END Test testBaseCommon_SplitVersionNumber - - @pytest.mark.base def testBaseCommon_FormatInt(): """Test the formatInt function. From c9fe0cad0526f7ef3f0b3d2dd15535731c5c13b4 Mon Sep 17 00:00:00 2001 From: Veronica Berglyd Olsen <1619840+vkbo@users.noreply.github.com> Date: Sun, 29 Jan 2023 02:22:14 +0100 Subject: [PATCH 3/3] Also fix import in the error handler --- novelwriter/error.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/novelwriter/error.py b/novelwriter/error.py index bb8037115..50e7ddc0b 100644 --- a/novelwriter/error.py +++ b/novelwriter/error.py @@ -112,8 +112,7 @@ def setMessage(self, exType, exValue, exTrace): """ from traceback import format_tb from novelwriter import __issuesurl__, __version__ - from PyQt5.Qt import PYQT_VERSION_STR - from PyQt5.QtCore import QT_VERSION_STR, QSysInfo + from PyQt5.QtCore import QT_VERSION_STR, PYQT_VERSION_STR, QSysInfo self.msgHead.setText(( "

An unhandled error has been encountered.

"