pyqt5to6: Catch QVariant.Type.XX and replace with QVariant.XX

QVariant.Type doesn't exist, the values should be referenced
directly
This commit is contained in:
Nyall Dawson 2024-01-30 15:22:55 +10:00
parent 27824078ad
commit 8c3ac3f3a3
2 changed files with 14 additions and 2 deletions

View File

@ -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)

View File

@ -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):