265 Commits

Author SHA1 Message Date
Nyall Dawson
dc27d12046 Fix documentation test 2018-03-15 17:55:25 +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
Nyall Dawson
654a4a4af6 [processing] Fix algorithm progress bar resets to 0 when an algorithm
reports a non-fatal error

Fixes the "flashy" progress bar when an algorithm encounters a lot
of errors.
2018-03-15 13:43:01 +11:00
Nyall Dawson
227f706287 [processing] Add operators for parameter type flags, push warning
to message log for duplicate parameter registration
2018-03-07 09:45:09 +10:00
Matthias Kuhn
5d526794ab Remove leftover file 2018-03-07 09:00:33 +11:00
Matthias Kuhn
c3a843619f Use flags for parameter type extra info 2018-03-07 09:00:33 +11:00
Matthias Kuhn
e3dabac78a Only add parameter when it is new 2018-03-07 09:00:33 +11:00
Matthias Kuhn
f22acb93b7 License headers 2018-03-07 09:00:33 +11:00
Matthias Kuhn
0d00491436 s/Modeller/Modeler/ 2018-03-07 09:00:33 +11:00
Matthias Kuhn
569b39b257 Code and doc improvements 2018-03-07 09:00:33 +11:00
Matthias Kuhn
b5672d7a23 API documentation 2018-03-07 09:00:33 +11:00
Matthias Kuhn
9688bc2734 Remove crap API 2018-03-07 09:00:33 +11:00
Matthias Kuhn
2145865a42 Metadata and modeller exposure support 2018-03-07 09:00:33 +11:00
Matthias Kuhn
ff7b831b9d Remove private implementations from python bindings 2018-03-07 09:00:33 +11:00
Matthias Kuhn
1fd74234b4 Add processing parameter type definitions 2018-03-07 09:00:33 +11:00
Matthias Kuhn
ecae50f1d3 Allow processing plugins to load their own parameters 2018-03-01 08:12:41 -05:00
Nyall Dawson
43cd62b62f [processing] Tweak api for QgsProcessingFeatureBasedAlgorithm
Instead of returning a single QgsFeature from processFeature, we now
return a list of features.

This allows feature based algorithms which return multiple features
per input feature, e.g. "explode" type algorithms which split a
single input feature into multiple output features.
2018-02-21 09:16:43 +11:00
Nyall Dawson
1f3ee0501a [processing] Always report errors if features cannot be written
to a destination

Before we silently ignored these - now algorithms will automatically
push errors to the log if a feature cannot be written to a sink (no
changes to algorithms or special handling required)
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
4bcc9df5b4 [processing] Add explicit output type for multiple layers
This was a missing capability in the processing API - while algorithms
could declare multiple layer input parameters, there was no corresponding
multi-layer output. This meant that algorithms (such as Package Layers,
Vector Split) which create a set of layers which cannot be determined
in advance had no way to pass these generated layers on for further model
processing steps.

It's also useful for algorithms which operate on a specified folder,
processing all layers found there, and allowing these generated
outputs to be utilised in other model steps (e.g. packaging
all of them, merging them, etc)
2018-02-11 10:57:44 +10:00
Nyall Dawson
2d1e9188f1 [processing] Allow providers to return a different helpId() vs
their unique id()

This is used when generating the QgsHelp url for algorithms
attached to the providers.

Implement helpId overrides for the native and 3d providers so
that they return 'qgis' helpIds, meaning that all QGIS processing
algorithm documentation can be kept within the same url path
regardless of which QGIS provider library it sits within.

This also allows us to freely move algorithms from the Python
'qgis' provider to c++ 'native' provider in future releases
without breaking the help URLs.

Fixes #17231
2018-02-09 11:26:03 +10:00
Nyall Dawson
2682a74a1b Fix clazy pass big type by ref, small by value warnings 2018-02-02 19:52:01 +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
a05d941e4e [processing] Default to allowing background execution of algorithms
Since the underlying issues with the Python bindings are now fixed,
in most cases we can safely default to allowing an algorithm to
run in a background thread!!

So now we make this the default, and require individual algorithms
which are NOT thread safe to declare this. This includes algorithms
which directly manipulate the current project or layers (such as
setting layer styles), alter the selections in layers, or which
rely on 3rd party libraries (for now, SAGA and GRASS algorithms
are marked as not thread safe... TODO - someone more familiar with
these libraries can investigate and remove the flag if appropriate).

Also models are marked as non-thread safe. TODO: only flag an
individual model as thread-unsafe if any of its child algorithms
report this flag.
2018-01-29 17:37:05 +11:00
Nyall Dawson
0f963dfadf [processing] Default to supporting non-file based outputs for providers
And make this support opt-out, since the vast majority of providers
are based on QGIS API and don't have external dependencies which would
restrict use of memory layers/etc.

Plus, I'd rather see non-compliant providers expose this support when
they can't use non-file-based-outputs (and make this the bug which
needs fixing) then have to rely on plugin providers to discover and
explicitly expose this support.
2018-01-29 13:14:06 +10: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
Denis Rouzaud
7722010ca8 rename *.sip to *.sip.in for the auto generated sip files 2018-01-17 10:16:37 -04:00
Nyall Dawson
ecd113de24 Fix modeler dialog doesn't respect hide from modeler flag 2018-01-16 21:21:38 +10:00
Denis Rouzaud
6d94ac9c6c run sipify 2018-01-12 21:10:16 -04:00
Denis Rouzaud
d87c60512c [sipify] fix bad handling of \see within sentences
and other docstrings improvements
2018-01-09 21:40:10 -04:00
Nyall Dawson
40e47e0fe7 [processing] Add flag to indicate whether an algorithm is safe
to run in a background thread
2018-01-10 05:33:02 +10:00
Denis Rouzaud
5babec5e07 run sipify 2018-01-09 11:40:39 -04:00
Nyall Dawson
b24a1bf10d Add transform context to processing context 2017-12-20 12:21:14 +10:00
Denis Rouzaud
90e5196996 run sipify 2017-12-19 14:55:46 -04:00
Denis Rouzaud
c604d2dda6 run sipify 2017-12-15 22:13:44 -04: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
Denis Rouzaud
f2b3ed0a9b run sipify 2017-12-15 11:12:19 -04:00
Alexander Bruy
1d482cf953 [processing] add groupId() method to algorithms to get unique ID of the
algorithm group.

Adapt native algorithms
2017-12-14 14:12:00 +02:00
Nyall Dawson
53ebe050bd
Merge pull request #5825 from nyalldawson/gdal
[processing] Some GDAL algorithm fixes
2017-12-09 17:26:41 +11:00
Nyall Dawson
3a5caaf94c Add missing proxy calls for QgsProcessingFeatureSource, causing
inefficient base class methods to be used instead.
2017-12-08 15:05:56 +10:00
Denis Rouzaud
b72c569cf3 [doxygen] replace @see by \see 2017-12-06 08:31:12 -04:00
Denis Rouzaud
e48cf98edb run sipify 2017-12-06 07:19:50 -04:00
Nyall Dawson
86958937ad Tweak processing API to better handle dynamic properties 2017-12-02 11:17:19 +10:00
Nyall Dawson
ecbc4718d4 [processing] Some more framework for dynamic (data defined) parameters 2017-12-02 11:16:26 +10:00
Nyall Dawson
297e8561a0 Bump lowest possible min for numeric parameters to -DBL_MAX + 1
We need to reserve -DBL_MAX as a special value, to allow it to
work correctly in QDoubleSpinBoxes (limitation of QDoubleSpinBox)
2017-12-01 20:42:38 +11:00
Nyall Dawson
6b56565f89 Show nicer tooltips for numeric processing parameters
With min/max and default values (when set)
2017-12-01 20:42:38 +11:00
Nyall Dawson
4b9986eb8c [processing] Add a generic map layer output type
For occasions when an algorithm creates a map layer, but the type
is not known in advance (i.e. could be raster OR vector)
2017-11-27 06:38:21 +11:00
Matthias Kuhn
916c9c4cdb Open heart surgery on expression context for processing sources 2017-11-24 16:09:05 +01:00
Matthias Kuhn
abe1a9b661 Expression context creation for processing improvements
Hiding away the implementation directly in QgsProcessingFeatureSource

See discussion ec97102bc6 (r152903378)
2017-11-24 16:09:05 +01:00
Matthias Kuhn
851adb0a3d Allow adding sources to processing expression context 2017-11-23 15:24:40 +01:00