mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-11-04 00:04:25 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""
 | 
						|
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
 | 
						|
 | 
						|
 | 
						|
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 = f'{fileName}, __'
 | 
						|
                node.changed()
 | 
						|
 | 
						|
        # Rename *AndFilter methods
 | 
						|
        if 'filter' in results:
 | 
						|
            method = results['filter'][0]
 | 
						|
            method.value = method.value.replace('AndFilter', '')
 | 
						|
            method.changed()
 |