Skip to content

Commit f64adb9

Browse files
authoredAug 21, 2016
Merge pull request #3412 from medspx/PyQtQFileDialogFix
[PyQt] Add a lib2to3 custom fix to handle QFileDialog methods in PyQt5
2 parents 1df8474 + ee87b0d commit f64adb9

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
 

‎scripts/qgis_fixes/fix_qfiledialog.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# -*- coding: utf-8 -*-
2+
"""
3+
Migrate QFileDialog methods from PyQt4 to PyQt5
4+
"""
5+
# Author: Médéric Ribreux <mederic.ribreux@medspx.fr>
6+
# Adapted from fix_pyqt
7+
# and http://python3porting.com/fixers.html
8+
9+
# Local imports
10+
from lib2to3.fixer_base import BaseFix
11+
from lib2to3.fixer_util import Name, Call
12+
13+
class FixQfiledialog(BaseFix):
14+
15+
PATTERN = """
16+
power< 'QFileDialog' trailer< '.' filter=('getOpenFileNameAndFilter'|'getOpenFileNamesAndFilter'|'getSaveFileNameAndFilter') > any >
17+
|
18+
expr_stmt< filename=any '=' power< any trailer< '(' power< 'QFileDialog' trailer< '.' method=('getOpenFileName'|'getOpenFileNames'|'getSaveFileName') > any > ')' > > >
19+
|
20+
expr_stmt< filename=any '=' power< 'QFileDialog' trailer< '.' method=('getOpenFileName'|'getOpenFileNames'|'getSaveFileName') > any > >
21+
"""
22+
23+
def transform(self, node, results):
24+
# First case: getOpen/SaveFileName
25+
# We need to add __ variable because in PyQt5
26+
# getOpen/SaveFileName returns a tuple
27+
if 'filename' in results:
28+
node = results['filename']
29+
30+
# count number of leaves (result variables)
31+
nbLeaves = sum(1 for i in node.leaves())
32+
33+
# If we have less than two args,
34+
# we add __ special variable
35+
if nbLeaves < 3:
36+
fileName = node.value
37+
node.value = u'{}, __'.format(fileName)
38+
node.changed()
39+
40+
# Rename *AndFilter methods
41+
if 'filter' in results:
42+
method = results['filter'][0]
43+
method.value = method.value.replace(u'AndFilter', u'')
44+
method.changed()
45+
46+

0 commit comments

Comments
 (0)
Please sign in to comment.