[Qgis-developer] How to provide a Processing model in a plugin ?

Etienne Trimaille etienne.trimaille at gmail.com
Mon Jun 22 08:28:01 PDT 2015


Hi Victor,

Thanks for the answer. I maybe the first one, but I need to launch a model
in the InaSAFE plugin and I don't want to write by hand the equivalent in
python :)
I tried your code above :

model = ModelerAlgorithm.fromFile("Path/to/your/model/file")
model.provider = Processing.modeler
Processing.modeler.algs.append(model)

But I can't launch it with runalg, I got 'Algorithm not found', so I add
this :
Processing.algs['model'][model.commandLineName()] = model

I can see it with processing.alglist now.

But I can't launch it with processing.runalg :

Traceback (most recent call last):
  File
"/home/etienne/.qgis2/python/plugins/inasafe/safe/routing/gui/routing_dialog.py",
line 210, in accept
    None)
  File "/home/etienne/.qgis2/python/plugins/processing/tools/general.py",
line 71, in runalg
    alg = Processing.runAlgorithm(algOrName, None, *args)
  File "/home/etienne/.qgis2/python/plugins/processing/core/Processing.py",
line 277, in runAlgorithm
    alg = alg.getCopy()
  File
"/home/etienne/.qgis2/python/plugins/processing/modeler/ModelerAlgorithm.py",
line 169, in getCopy
    newone.defineCharacteristics()
  File
"/home/etienne/.qgis2/python/plugins/processing/modeler/ModelerAlgorithm.py",
line 208, in defineCharacteristics
    modelOutput = copy.deepcopy(alg.algorithm.getOutputFromName(out))
  File
"/home/etienne/.qgis2/python/plugins/processing/modeler/ModelerAlgorithm.py",
line 110, in algorithm
    self._algInstance =
ModelerUtils.getAlgorithm(self.consoleName).getCopy()
AttributeError: 'NoneType' object has no attribute 'getCopy'

Do you have an idea ?

Regards,
Etienne




2015-06-08 16:28 GMT+02:00 Victor Olaya <volayaf at gmail.com>:

> You can use the instance of ModelerAlgorithmProvider that is stored in
> the Processing object.
>
> Like this:
>
> model = ModelerAlgorithm.fromFile("Path/to/your/model/file")
> model.provider = Processing.modeler
> Processing.modeler.algs.append(model)
>
> That will add your model to the list of available ones
>
> I guess you are the first one asking for this...and this is the best
> solution i can think of so far :-)
>
> Let me know if that works...
>
> I hope it helps
>
>
>
> 2015-06-08 15:35 GMT+02:00 Etienne Trimaille <etienne.trimaille at gmail.com
> >:
> > Hi,
> >
> > I'm working on a plugin and I need to use my own model inside.
> > I know how to add a new algorithm in processing but I didn't find
> something
> > on how to add a model to processing.
> >
> > Is there a way to ship my model with the plugin ?
> > Or do I need to copy manually my model into the processing models folder
> > with Python ?
> >
> > I saw the ModelerAlgorithmProvider (like the AlgorithmProvider) but I not
> > sure if I can do what I want with it.
> >
> >
> > Thanks,
> > Etienne
> >
> > _______________________________________________
> > Qgis-developer mailing list
> > Qgis-developer at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/qgis-developer
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20150622/a0562832/attachment.html>


More information about the Qgis-developer mailing list