53 Commits

Author SHA1 Message Date
Nyall Dawson
e91aed6617 [processing] Force model outputs to respect constraints set by
their underlying algorithm's provider

E.g. for model outputs generated by a saga algorithm, only
sdat and shp files are valid outputs. So only give users choices
of these instead of all formats.

Also fixes temporary file names generated as part of model
execution may use formats which are not compatible with the
algorithm's provider.

Fixes #18908
2018-06-05 10:05:32 +10:00
Nyall Dawson
84806b9161 [processing] Fix cannot use feature source as input for model crs or extent parameters 2018-06-04 21:30:12 +10:00
Nyall Dawson
a1d46de0de [processing] Fix evaluation of vector layer references to compatible feature sources
Refs #18545
2018-06-04 13:57:06 +10:00
Nyall Dawson
f6416a1990 [processing] Fix missing vector inputs when run in batch mode
Fix incorrect definition of compatibleVectorLayers, which was
using layer WKB type values instead of processing source types.
2018-06-01 15:55:11 +10:00
Nyall Dawson
870d20740c [processing] Tweaks and checks for checkParameterValues 2018-05-28 16:02:38 +10:00
Alexander Bruy
cce49567ca [processing] add test for temporary output without extension 2018-05-20 18:17:15 +10:00
arnaud.morvan@camptocamp.com
81dabd185c [processing] Finish default values in model for destination parameters 2018-05-14 22:12:32 +10:00
Nyall Dawson
c738bcf7af [processing] Don't skip null parameter values when converting
parameters to pythong strings

We need to include these, in order to differentiate unspecified
parameters from parameters set to null values
2018-05-10 15:48:20 +10:00
Nyall Dawson
d05f95f7d5 [processing] Ensure unset parameters are translated to Python
None values when representing parameters as pythong strings
2018-05-10 15:48:20 +10:00
Martin Dobias
819ae6f31a Fix test that checked an exception from QgsSpatialIndex constructor 2018-05-08 20:28:27 -04:00
Nyall Dawson
3791bac432 [processing][modeler] Fix some child algorithm vector results
are not shown as input choices for other child algorithms
2018-05-07 18:50:19 +10:00
Nyall Dawson
787dd3413e [processing] More helpful errors when raster inputs are not valid 2018-05-06 19:19:45 +10:00
Nyall Dawson
386495bc76 [processing] Also warn on non-matching point and extent CRS
if algorithm cannot handle automatic reprojection
2018-05-02 04:55:01 +10:00
Nyall Dawson
c314639e00 [processing] More stringent testing of parameter validity
- Check static QgsProperty parameter values
- Properly check QgsProcessingFeatureSourceDefinition and
QgsProcessingOutputLayerDefinition values
2018-04-28 05:50:47 +10:00
Nyall Dawson
249dca7830 [processing] Consist helpful error messages when sinks cannot be created
And throw exceptions always when sinks are not created to avoid
generic errors
2018-04-28 05:50:47 +10:00
Nyall Dawson
5339d62715 [processing] More helpful errors when sources cannot be loaded
Include descriptive text with the specified parameter value
in error, and always check that sources were loaded to avoid
raw Python exceptions when they are not
2018-04-28 05:50:47 +10:00
Martin Dobias
5e7719c38f Tests for fieldNamesToIndices() and indicesToFields() 2018-04-26 10:51:34 +02:00
Nyall Dawson
6a2625664e [processing] Add dedicated "distance" parameter
This is a subclass of QgsProcessingParameterNumber, but specifically
for numeric parameters which represent distances. It is linked
to a parent parameter, from which the distance unit will
be determined, and is shown using a dedicated distance widget
within the processing parameters panel. This widget shows
the distance unit.

This avoids the confusion when running algorithms which
use distances where the unit depends on a layer or CRS parameter -
e.g. the distance parameter in the buffer algorithm gives
the distance in layer units... so now we can show those units
directly within the dialog. Hopefully this leads to less
user confusion and accidental "1000 degree buffers"!

Additionally - if the unit is in degrees, a small warning
icon is shown next to the parameter. The tooltip for this
icon advises users to reproject data into a suitable
projected local coordinate system.

Initially implemented for the native buffer and single
sided buffer algorithm only - but more will be added.

Fixes #16290
2018-04-20 18:27:00 +10:00
Nyall Dawson
bf0c4f9413 [processing] Accept strings of form "(1,2") for point parameters too
Since the help text above a point parameter indicates the acceptable
format is "(x, y)", it can be confusing for users to know whether
the brackets should be entered here. So be forgiving and accept
strings with or without brackets.

Refs https://gis.stackexchange.com/questions/278765/how-do-i-enter-start-point-in-shortest-path-algorithm-in-qgis-3-0-1
2018-04-11 04:56:12 +10:00
Nyall Dawson
09241ea195 Fix coverity warnings in unit tests 2018-04-03 16:35:32 +10:00
Nyall Dawson
9ab4d96362 [processing] Don't try to load algorithms for disabled providers
Fixes #18488
2018-03-21 08:45:38 +11:00
Nyall Dawson
bd1d87ed86 [processing] Allow algorithms to set layer post-processors for
execution on generated layers after the algorithm (or parent
model) completes

This commit adds an interface for layer post-processing handlers
for execution following a processing algorithm operation.

Post-processing of a layer will ONLY occur if that layer is set
to be loaded into a QGIS project on algorithm completion.

Algorithms that wish to set post-processing steps for generated
layers should implement this interface in a separate class
(NOT the algorithm class itself!) and implement a method
to handle the layer post-processing.

This method always runs in the main thread and can be used to
setup renderers, editor widgets, metadata, etc for the given layer.

Fixes #17961
2018-03-15 17:55:25 +11:00
Matthias Kuhn
e3dabac78a Only add parameter when it is new 2018-03-07 09:00:33 +11:00
Matthias Kuhn
542910e9da Add QgsProcessingParameterType tests 2018-03-07 09:00:33 +11:00
Nyall Dawson
84cdd609ab [processing] Fix invalid filenames are used for temporary files
during models

Fixes #18263
2018-03-05 12:06:50 +11:00
Alexander Bruy
a2179046e8 [processing] add tests for creating outputs from FileDestination
parameter
2018-03-02 10:35:56 +02:00
Nyall Dawson
f8c3f39670 [processing] Fix dependency calculation for model child algs 2018-02-21 20:34:40 +11:00
Nyall Dawson
7e4cdc024b Update test 2018-02-17 19:10:46 +11:00
Nyall Dawson
14787ffb32 [processing] Add easy method to retrieve layers from context
Allows python algorithms to call

layer = context.getMapLayer(other_alg_results['OUTPUT'] )
2018-02-16 19:49:30 +11:00
Nyall Dawson
5c40975fe7 [processing] Don't replace " with ' when handling layer paths
Since netcdf, and possibly other gdal drivers, use layer uris
of the format NETCDF:"/tmp/test.nc":var1 we can't safely
remove or reformat these quotations.
2018-02-15 16:43:21 +10:00
Nyall Dawson
247ea02ae7 Update tests 2018-02-01 13:02:59 +11:00
Nyall Dawson
6c5276cea5 Fix test 2018-02-01 13:02:59 +11:00
Nyall Dawson
70fc32b784 Spelling 2018-02-01 07:53:54 +11:00
Nyall Dawson
fc68bb25d7 [processing] Allow case-different duplicate parameter names
But always prefer case-exact matches for parameter names. Turns
out the grass provider requires use of parameters with the same
name but different case, so we need to be able to handle this.
2018-02-01 07:53:54 +11:00
Nyall Dawson
bf19eb6f35 [processing] Non-filed based outputs (e.g. postgis, geopackage)
options should be available for certain model outputs and script
algorithm outputs

We do this by swapping the test for non-file based output support
from checking only the algorithm's provider to instead checking
on a parameter-by-parameter basis.

This is done in order to support models. For models, depending
on what child algorithm a model output is based off, an individual
model may or may not have support for non-file based outputs. E.g
a model may generate outputs from a native qgis alg (supporting
these outputs) AND an output from a GDAL alg (with no support
for these outputs). In this case we need to enable or disable
the ui controls for non-file based outputs on an individual
output basis.

For scripts (for now) we blindly just say all outputs support
non-file based formats. This is going to be the case most of
the time, since scripts will usually be written using PyQGIS
API. For the exceptions (e.g. scripts which call other algs
like GDAL algs) we probably should add some way for the script
to indicate whether an individual output supports this, but
for now we just say they all do.

Fixes #17949
2018-01-25 15:47:42 +11:00
Nyall Dawson
d415ad84c9 [processing] Fix extent and CRS parameters do not evaluate in
models when linked to a layer parameter/output value

References discussion on dev mailing list
2018-01-23 12:35:29 +11:00
Nyall Dawson
4da1ce8404 Drop redundant virtual keywords on overrides
Run clang-tidy modernize-use-override to remove all the redundant
virtual keywords from overridden methods, and add some missing
overrides.

Another benefit is that this has also added the overrides
on destructors, which will cause a build failure if a base
class is missing a virtual destructor.
2017-12-16 08:49:36 +10:00
Nyall Dawson
ecbc4718d4 [processing] Some more framework for dynamic (data defined) parameters 2017-12-02 11:16:26 +10:00
Nyall Dawson
3d307b4109 Improve name of memory layers output from processing 2017-11-27 06:38:21 +11:00
Nyall Dawson
c04b91f4f3 Fix some memory leaks 2017-11-24 09:31:50 +10:00
Nyall Dawson
117842802a Fix running processing tests multiple times 2017-11-24 09:31:50 +10:00
Nyall Dawson
59d55fc44c [processing] Ensure correct sublayer is loaded when saving output
to destination with multiple sublayers
2017-11-24 09:31:50 +10:00
Nyall Dawson
f7a317be78 [processing] Fix saving outputs to non-file formats 2017-11-24 09:31:50 +10:00
Nyall Dawson
75885d70d5 Rename various WKT/WKB/GeoJSON/GML methods for consistency
and consistent capitalisation
2017-11-15 20:51:05 +10:00
Nyall Dawson
bcd90715b0 Run clang-tidy code readability fixits 2017-11-11 12:19:59 +10:00
Nyall Dawson
bf75747f18 [processing] Use user-set default file formats if supported by
provider, otherwise fall back to a format which IS supported
by that provider
2017-11-07 12:25:55 +10:00
Nyall Dawson
4ae9241e71 [processing] Allow providers to determine default vector/raster file
to use for their algorithm's parameters

Because some providers do not have support for all output types,
we need to give providers a way to restrict the default format
choices to those which are supported by the provider.
2017-11-06 12:44:38 +10:00
Nyall Dawson
2a280d69aa Allow access to parent algorithm for processing parameters 2017-11-06 12:00:16 +10:00
Nyall Dawson
acbd9d18f5 Merge pull request #5432 from Gustry/allow_pipe_filepath
allow pipe character in filepath in processing
2017-10-26 19:09:03 +11:00
Nyall Dawson
70361063d8 Rename QgsGeometry::geometry as QgsGeometry::get()
Because feature.geometry().geometry() is confusing, and impossible
to search for in python code (e.g. is input.geometry() a QgsGeometry
or a QgsAbstractGeometry?)

But more importantantly: also add a const version
QgsGeometry::constGet(). The non-const
version is slow, since it now forces a detach to avoid corrupting
geometries (since QgsGeometry is shared, it's not safe to directly
access its primitive QgsAbstractGeometry and start messing with
it without first detaching). This is a big risk in the 2.x API
which could potentially corrupt feature geometries with unexpected
outcomes.

Update all uses to constGet where possible.
2017-10-26 07:06:34 +10:00