mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-25 00:58:06 -05:00
154 lines
5.3 KiB
Python
154 lines
5.3 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'
|
|
|
|
# This will get replaced with a git SHA1 when you do a git archive
|
|
|
|
__revision__ = '$Format:%H$'
|
|
|
|
import shutil
|
|
from processing.tools.system import isWindows, isMac, userFolder, mkdir
|
|
from processing.core.parameters import getParameterFromString
|
|
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):
|
|
""" Remove the r.li user dir config file """
|
|
configPath = alg.getParameterValue('config')
|
|
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, outputTxt=False):
|
|
""" Verify if we have the right parameters """
|
|
configTxt = alg.getParameterValue('config_txt')
|
|
config = alg.getParameterValue('config')
|
|
if configTxt and config:
|
|
return 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 alg.tr('Your configuration needs to be a "moving window" configuration!')
|
|
|
|
if movingWindow and outputTxt:
|
|
return alg.tr('Your configuration needs to be a non "moving window" configuration!')
|
|
|
|
return None
|
|
|
|
|
|
def configFile(alg, outputTxt=False):
|
|
""" Handle inline configuration """
|
|
# 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'))
|
|
origConfigFile = alg.getParameterValue('config')
|
|
|
|
# Handle inline configuration
|
|
configTxt = alg.getParameterFromName('config_txt')
|
|
if configTxt.value:
|
|
# Creates a temporary txt file in user r.li directory
|
|
tempConfig = alg.getTempFilename()
|
|
configFilePath = os.path.join(userGrass7Path, tempConfig)
|
|
# Inject rules into temporary txt file
|
|
with open(configFilePath, "w") as f:
|
|
f.write(configTxt.value)
|
|
|
|
# Use temporary file as rules file
|
|
alg.setParameterValue('config', os.path.basename(configFilePath))
|
|
alg.parameters.remove(configTxt)
|
|
|
|
# If we have a configuration file, we need to copy it into user dir
|
|
if origConfigFile:
|
|
configFilePath = os.path.join(userGrass7Path, os.path.basename(origConfigFile))
|
|
# Copy the file
|
|
shutil.copy(origConfigFile, configFilePath)
|
|
|
|
# Change the parameter value
|
|
alg.setParameterValue('config', os.path.basename(configFilePath))
|
|
|
|
origOutput = alg.getOutputFromName('output')
|
|
if outputTxt:
|
|
param = getParameterFromString("ParameterString|output|txt output|None|False|True")
|
|
param.value = os.path.basename(origOutput.value)
|
|
alg.addParameter(param)
|
|
alg.removeOutputFromName('output')
|
|
|
|
alg.processCommand()
|
|
|
|
# Remove Config file:
|
|
removeConfigFile(alg)
|
|
|
|
# re-add configTxt
|
|
alg.addParameter(configTxt)
|
|
alg.setParameterValue('config', origConfigFile)
|
|
if outputTxt:
|
|
for param in [f for f in alg.parameters if f.name == 'output']:
|
|
alg.parameters.remove(param)
|
|
alg.addOutput(origOutput)
|
|
|
|
|
|
def moveOutputTxtFile(alg):
|
|
# Find output file name:
|
|
origOutput = alg.getOutputValue('output')
|
|
userGrass7Path = rliPath()
|
|
|
|
outputDir = os.path.join(userGrass7Path, 'output')
|
|
output = os.path.join(outputDir, os.path.basename(origOutput))
|
|
|
|
# move the file
|
|
if isWindows():
|
|
command = "MOVE /Y {} {}".format(output, origOutput)
|
|
else:
|
|
command = "mv -f {} {}".format(output, origOutput)
|
|
alg.commands.append(command)
|