Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix PyQt5 version check #1325

Merged
merged 3 commits into from
Jan 29, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions novelwriter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
)
Expand Down
27 changes: 0 additions & 27 deletions novelwriter/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
25 changes: 6 additions & 19 deletions novelwriter/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)
Expand Down Expand Up @@ -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
Expand Down
3 changes: 1 addition & 2 deletions novelwriter/error.py
Original file line number Diff line number Diff line change
Expand Up @@ -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((
"<p>An unhandled error has been encountered.</p>"
Expand Down
2 changes: 1 addition & 1 deletion novelwriter/gui/doceditor.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 3 additions & 3 deletions novelwriter/guimain.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
25 changes: 3 additions & 22 deletions tests/test_base/test_base_common.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
)


Expand Down Expand Up @@ -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.
Expand Down
4 changes: 2 additions & 2 deletions tests/test_base/test_base_init.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down