mirror of
				https://github.com/qgis/QGIS.git
				synced 2025-10-31 00:06:02 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| """
 | |
| ***************************************************************************
 | |
|     r_li.py
 | |
|     -------
 | |
|     Date                 : February 2016
 | |
|     Copyright            : (C) 2016 by Médéric Ribreux
 | |
|     Email                : medspx at medspx dot fr
 | |
| ***************************************************************************
 | |
| *                                                                         *
 | |
| *   This program is free software; you can redistribute it and/or modify  *
 | |
| *   it under the terms of the GNU General Public License as published by  *
 | |
| *   the Free Software Foundation; either version 2 of the License, or     *
 | |
| *   (at your option) any later version.                                   *
 | |
| *                                                                         *
 | |
| ***************************************************************************
 | |
| """
 | |
| 
 | |
| __author__ = 'Médéric Ribreux'
 | |
| __date__ = 'February 2016'
 | |
| __copyright__ = '(C) 2016, Médéric Ribreux'
 | |
| 
 | |
| import shutil
 | |
| from qgis.core import QgsProcessingParameterString
 | |
| from processing.tools.system import (isWindows, mkdir,
 | |
|                                      getTempFilename)
 | |
| import os
 | |
| 
 | |
| # for MS-Windows users who have MBCS chars in their name:
 | |
| if os.name == 'nt':
 | |
|     import win32api
 | |
| 
 | |
| 
 | |
| def rliPath():
 | |
|     """Return r.li GRASS7 user dir"""
 | |
|     if isWindows():
 | |
|         homeDir = win32api.GetShortPathName(os.path.expanduser('~'))
 | |
|         return os.path.join(homeDir, 'AppData', 'Roaming', 'GRASS7', 'r.li')
 | |
|     else:
 | |
|         return os.path.join(os.path.expanduser("~"), '.grass7', 'r.li')
 | |
| 
 | |
| 
 | |
| def removeConfigFile(alg, parameters, context):
 | |
|     """ Remove the r.li user dir config file """
 | |
|     configPath = alg.parameterAsString(parameters, 'config', context)
 | |
|     if isWindows():
 | |
|         command = "DEL {}".format(os.path.join(rliPath(), configPath))
 | |
|     else:
 | |
|         command = "rm {}".format(os.path.join(rliPath(), configPath))
 | |
|     alg.commands.append(command)
 | |
| 
 | |
| 
 | |
| def checkMovingWindow(alg, parameters, context, outputTxt=False):
 | |
|     """ Verify if we have the right parameters """
 | |
|     configTxt = alg.parameterAsString(parameters, 'config_txt', context)
 | |
|     config = alg.parameterAsString(parameters, 'config', context)
 | |
|     if configTxt and config:
 | |
|         return False, alg.tr("You need to set either inline configuration or a configuration file!")
 | |
| 
 | |
|     # Verify that configuration is in moving window
 | |
|     movingWindow = False
 | |
|     if configTxt:
 | |
|         if 'MOVINGWINDOW' in configTxt:
 | |
|             movingWindow = True
 | |
| 
 | |
|     # Read config file:
 | |
|     if config:
 | |
|         with open(config) as f:
 | |
|             for line in f:
 | |
|                 if 'MOVINGWINDOW' in line:
 | |
|                     movingWindow = True
 | |
| 
 | |
|     if not movingWindow and not outputTxt:
 | |
|         return False, alg.tr('Your configuration needs to be a "moving window" configuration!')
 | |
| 
 | |
|     if movingWindow and outputTxt:
 | |
|         return False, alg.tr('Your configuration needs to be a non "moving window" configuration!')
 | |
| 
 | |
|     return True, None
 | |
| 
 | |
| 
 | |
| def configFile(alg, parameters, context, feedback, outputTxt=False):
 | |
|     """Handle inline configuration
 | |
|     :param parameters:
 | |
|     """
 | |
|     # Where is the GRASS7 user directory ?
 | |
|     userGrass7Path = rliPath()
 | |
|     if not os.path.isdir(userGrass7Path):
 | |
|         mkdir(userGrass7Path)
 | |
|     if not os.path.isdir(os.path.join(userGrass7Path, 'output')):
 | |
|         mkdir(os.path.join(userGrass7Path, 'output'))
 | |
| 
 | |
|     # If we have a configuration file, we need to copy it into user dir
 | |
|     if parameters['config']:
 | |
|         fileName = alg.parameterAsString(parameters, 'config', context)
 | |
|         configFilePath = os.path.join(userGrass7Path, os.path.basename(fileName))
 | |
|         # Copy the file
 | |
|         shutil.copy(parameters['config'], configFilePath)
 | |
|         # Change the parameter value
 | |
|         parameters['config'] = os.path.basename(configFilePath)
 | |
|     # Handle inline configuration
 | |
|     elif parameters['config_txt']:
 | |
|         # Creates a temporary txt file in user r.li directory
 | |
|         tempConfig = os.path.basename(getTempFilename())
 | |
|         configFilePath = os.path.join(userGrass7Path, tempConfig)
 | |
|         # Inject rules into temporary txt file
 | |
|         with open(configFilePath, "w") as f:
 | |
|             f.write(alg.parameterAsString(parameters, 'config_txt', context))
 | |
|             f.write("\n")
 | |
| 
 | |
|         # Use temporary file as rules file
 | |
|         parameters['config'] = os.path.basename(configFilePath)
 | |
|         alg.removeParameter('config_txt')
 | |
| 
 | |
|     # For ascii output, we need a virtual output
 | |
|     if outputTxt:
 | |
|         param = QgsProcessingParameterString(
 | |
|             'output', 'virtual output',
 | |
|             'a' + os.path.basename(getTempFilename()),
 | |
|             False, False)
 | |
|         alg.addParameter(param)
 | |
| 
 | |
|     alg.processCommand(parameters, context, feedback, outputTxt)
 | |
| 
 | |
|     # Remove Config file:
 | |
|     removeConfigFile(alg, parameters, context)
 | |
| 
 | |
| 
 | |
| def moveOutputTxtFile(alg, parameters, context):
 | |
|     # Find output file name:
 | |
|     txtPath = alg.parameterAsString(parameters, 'output_txt', context)
 | |
|     userGrass7Path = rliPath()
 | |
| 
 | |
|     output = os.path.join(userGrass7Path, 'output',
 | |
|                           alg.parameterAsString(parameters, 'output', context))
 | |
|     # move the file
 | |
|     if isWindows():
 | |
|         command = "MOVE /Y {} {}".format(output, txtPath)
 | |
|     else:
 | |
|         command = "mv -f {} {}".format(output, txtPath)
 | |
|     alg.commands.append(command)
 |