mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
[PyQt] Add a lib2to3 custom fix to handle QFileDialog methods in PyQt5
This commit is contained in:
parent
1df8474795
commit
ee87b0dbc9
46
scripts/qgis_fixes/fix_qfiledialog.py
Normal file
46
scripts/qgis_fixes/fix_qfiledialog.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Migrate QFileDialog methods from PyQt4 to PyQt5
|
||||||
|
"""
|
||||||
|
# Author: Médéric Ribreux <mederic.ribreux@medspx.fr>
|
||||||
|
# Adapted from fix_pyqt
|
||||||
|
# and http://python3porting.com/fixers.html
|
||||||
|
|
||||||
|
# Local imports
|
||||||
|
from lib2to3.fixer_base import BaseFix
|
||||||
|
from lib2to3.fixer_util import Name, Call
|
||||||
|
|
||||||
|
class FixQfiledialog(BaseFix):
|
||||||
|
|
||||||
|
PATTERN = """
|
||||||
|
power< 'QFileDialog' trailer< '.' filter=('getOpenFileNameAndFilter'|'getOpenFileNamesAndFilter'|'getSaveFileNameAndFilter') > any >
|
||||||
|
|
|
||||||
|
expr_stmt< filename=any '=' power< any trailer< '(' power< 'QFileDialog' trailer< '.' method=('getOpenFileName'|'getOpenFileNames'|'getSaveFileName') > any > ')' > > >
|
||||||
|
|
|
||||||
|
expr_stmt< filename=any '=' power< 'QFileDialog' trailer< '.' method=('getOpenFileName'|'getOpenFileNames'|'getSaveFileName') > any > >
|
||||||
|
"""
|
||||||
|
|
||||||
|
def transform(self, node, results):
|
||||||
|
# First case: getOpen/SaveFileName
|
||||||
|
# We need to add __ variable because in PyQt5
|
||||||
|
# getOpen/SaveFileName returns a tuple
|
||||||
|
if 'filename' in results:
|
||||||
|
node = results['filename']
|
||||||
|
|
||||||
|
# count number of leaves (result variables)
|
||||||
|
nbLeaves = sum(1 for i in node.leaves())
|
||||||
|
|
||||||
|
# If we have less than two args,
|
||||||
|
# we add __ special variable
|
||||||
|
if nbLeaves < 3:
|
||||||
|
fileName = node.value
|
||||||
|
node.value = u'{}, __'.format(fileName)
|
||||||
|
node.changed()
|
||||||
|
|
||||||
|
# Rename *AndFilter methods
|
||||||
|
if 'filter' in results:
|
||||||
|
method = results['filter'][0]
|
||||||
|
method.value = method.value.replace(u'AndFilter', u'')
|
||||||
|
method.changed()
|
||||||
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user