def parse_file_output( outdef: QgsProcessingOutputDefinition, kwargs, alg: QgsProcessingAlgorithm=None ) -> ComplexOutput: """ Parse file output definition QgsProcessingOutputDefinition metadata will be checked to get wps parameter settings: - 'wps:as_reference': boolean, True if the file will be sent as reference. If false, the file will included in the body of the response. Default is True. """ as_reference = confservice.getboolean('server','outputfile_as_reference') if isinstance(outdef, QgsProcessingOutputHtml): mime = mimetypes.types_map.get('.html') return ComplexOutput(supported_formats=[Format(mime)],**kwargs) elif isinstance(outdef, QgsProcessingOutputFile): # Try to get a corresponding inputFileDefinition # See https://qgis.org/pyqgis/master/core/QgsProcessingParameterFileDestination.html mime = None if alg: inputdef = alg.parameterDefinition(outdef.name()) if isinstance(inputdef, QgsProcessingParameterFileDestination): mime = mimetypes.types_map.get("."+inputdef.defaultFileExtension()) as_reference = inputdef.metadata().get('wps:as_reference',as_reference) if mime is None: LOGGER.warning("Cannot set file type for output %s", outdef.name()) mime = "application/octet-stream" return ComplexOutput(supported_formats=[Format(mime)], as_reference=as_reference, **kwargs)
def parse_file_output(outdef: QgsProcessingOutputDefinition, kwargs, alg: QgsProcessingAlgorithm = None) -> ComplexOutput: """ Parse file output definition """ if isinstance(outdef, QgsProcessingOutputHtml): mime = mimetypes.types_map.get('.html') return ComplexOutput(supported_formats=[Format(mime)], **kwargs) elif isinstance(outdef, QgsProcessingOutputFile): # Try to get a corresponding inputFileDefinition mime = None if alg: inputdef = alg.parameterDefinition(outdef.name()) if isinstance(inputdef, QgsProcessingParameterFileDestination): mime = mimetypes.types_map.get("." + inputdef.defaultFileExtension()) if mime is None: LOGGER.warning("Cannot set file type for output %s", outdef.name()) mime = "application/octet-stream" return ComplexOutput(supported_formats=[Format(mime)], **kwargs)
def input_to_processing(identifier: str, inp: WPSInput, alg: QgsProcessingAlgorithm, context: ProcessingContext) -> Tuple[str, Any]: """ Convert wps input to processing param see https://qgis.org/api/classQgsProcessingOutputLayerDefinition.html see https://qgis.org/api/qgsprocessingparameters_8cpp_source.html#L272 see ./python/plugins/processing/tools/general.py:111 see ./python/plugins/processing/gui/Postprocessing.py:50 see ./python/plugins/processing/core/Processing.py:126 """ param = alg.parameterDefinition(identifier) value = layersio.get_processing_value(param, inp, context) or \ filesio.get_processing_value(param, inp, context) or \ datetimeio.get_processing_value(param, inp, context) or \ geometryio.get_processing_value(param, inp, context) or \ get_processing_value(param, inp, context) return param.name(), value
def input_to_processing(identifier: str, inp: WPSInput, alg: QgsProcessingAlgorithm, context: ProcessingContext) -> Tuple[str, Any]: """ Convert wps input to processing param see https://qgis.org/api/classQgsProcessingOutputLayerDefinition.html see https://qgis.org/api/qgsprocessingparameters_8cpp_source.html#L272 see ./python/plugins/processing/tools/general.py:111 see ./python/plugins/processing/gui/Postprocessing.py:50 see ./python/plugins/processing/core/Processing.py:126 """ param = alg.parameterDefinition(identifier) typ = param.type() if isinstance(param, DESTINATION_LAYER_TYPES): # Do not supports memory: layer since we are storing destination project to file param.setSupportsNonFileBasedOutput(False) # Enforce pushing created layers to layersToLoadOnCompletion list sink = "./%s.%s" % (param.name(), param.defaultFileExtension()) value = QgsProcessingOutputLayerDefinition(sink, context.destination_project) value.destinationName = inp[0].data elif isinstance(param, QgsProcessingParameterFeatureSource): # Support feature selection value, has_selection = parse_layer_spec(inp[0].data, context, allow_selection=True) value = QgsProcessingFeatureSourceDefinition( value, selectedFeaturesOnly=has_selection) elif isinstance(param, INPUT_LAYER_TYPES): if len(inp) > 1: value = [parse_layer_spec(i.data, context)[0] for i in inp] else: value, _ = parse_layer_spec(inp[0].data, context) elif typ == 'enum': # XXX Processing wants the index of the value in option list if param.allowMultiple() and len(inp) > 1: opts = param.options() value = [opts.index(d.data) for d in inp] else: value = param.options().index(inp[0].data) elif typ == 'extent': value = input_to_extent(inp) elif typ == 'crs': # XXX CRS may be expressed as EPSG (or QgsProperty ?) value = inp[0].data elif typ in ('fileDestination', 'folderDestination'): # Normalize path value = basename(normpath(inp[0].data)) if value != inp[0].data: LOGGER.warning( "Value for file or folder destination '%s' has been truncated from '%s' to '%s'", identifier, inp[0].data, value) elif len(inp): # Return raw value value = inp[0].data else: # Return undefined value if not _is_optional(param): LOGGER.warning("Required input %s has no value", identifier) value = None return param.name(), value