From 8c3ac3f3a38a8460aa7079b9a60a8ae2dbffdbf3 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 30 Jan 2024 15:22:55 +1000 Subject: [PATCH] pyqt5to6: Catch QVariant.Type.XX and replace with QVariant.XX QVariant.Type doesn't exist, the values should be referenced directly --- scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py | 14 +++++++++++++- tests/src/python/test_qgsfieldformatters.py | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py b/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py index ec2ed2343fc..f8249686477 100755 --- a/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py +++ b/scripts/pyqt5_to_pyqt6/pyqt5_to_pyqt6.py @@ -238,10 +238,22 @@ def fix_file(filename: str, qgis3_compat: bool) -> int: token_renames[Offset(_node.value.lineno, _node.value.col_offset)] = 'QApplication.instance()' extra_imports['qgis.PyQt.QtWidgets'].update({'QApplication'}) removed_imports['qgis.PyQt.QtWidgets'].update({'qApp'}) + if _node.value.id == 'QVariant' and _node.attr == 'Type': + def _replace_qvariant_type(start_index: int, tokens): + # QVariant.Type.XXX doesn't exist, it should be QVariant.XXX + assert tokens[start_index].src == 'QVariant' + assert tokens[start_index + 1].src == '.' + assert tokens[start_index + 2].src == 'Type' + assert tokens[start_index + 3].src == '.' + + tokens[start_index + 2] = tokens[start_index + 2]._replace(src='') + tokens[start_index + 3] = tokens[start_index + 3]._replace( + src='') + + custom_updates[Offset(node.lineno, node.col_offset)] = _replace_qvariant_type tree = ast.parse(contents, filename=filename) for parent in ast.walk(tree): - for node in ast.iter_child_nodes(parent): if isinstance(node, ast.ImportFrom): import_offsets[Offset(node.lineno, node.col_offset)] = (node.module, set(name.name for name in node.names), node.end_lineno, node.end_col_offset) diff --git a/tests/src/python/test_qgsfieldformatters.py b/tests/src/python/test_qgsfieldformatters.py index 8db5fe748fd..cd79696b092 100644 --- a/tests/src/python/test_qgsfieldformatters.py +++ b/tests/src/python/test_qgsfieldformatters.py @@ -469,7 +469,7 @@ class TestQgsCheckBoxFieldFormatter(QgisTestCase): config['TextDisplayMethod'] = QgsCheckBoxFieldFormatter.TextDisplayMethod.ShowTrueFalse self.assertEqual(field_formatter.representValue(layer, 2, config, None, True), 'true') self.assertEqual(field_formatter.representValue(layer, 2, config, None, False), 'false') - self.assertEqual(field_formatter.representValue(layer, 2, config, None, QVariant(QVariant.Type.Bool)), 'NULL') + self.assertEqual(field_formatter.representValue(layer, 2, config, None, QVariant(QVariant.Bool)), 'NULL') class TestQgsFallbackFieldFormatter(QgisTestCase):