Transformers FME: 2025.0

Categories
Exécution
Related Transformers
PythonCreator
RCaller

PythonCaller

Exécute un script Python fourni par l'utilisateur pour manipuler les entités.

Aller à la configuration

Cas d'utilisation courants

  • Tâches ou un Transformer n'est pas disponible.
  • Utilisation de modules externes pour le traitement.
  • Réalisation de manipulations complexes sur des attributs de liste.

Comment fonctionne-t-il ?

PythonCaller exécute un script Python pour manipuler les entités.

Lorsqu'une tâche spécialisée est nécessaire telle qu'une analyse statistique personnalisée d'un attribut et que FME Workbench ne fournit pas de Transformer adapté, un script Python peut permettre de mener à bien de type d'opérations complexes sur les attributs, les géométries et les systèmes de coordonnées.

Accès fourni via l'API Python FME Objects.

Note  Python est un langage de programmation externe à FME. Pour obtenir de la documentation sur la création de scripts Python, visitez The Python Foundation.

L'utilisation de Python pour effectuer des opérations arbitraires sur des entités est un aspect puissant de FME Workbench. Cependant, la logique introduite dans un FME Workbench est moins visible et peut donc être plus difficile à maintenir que la logique construite à l'aide des Transformers intégrés de traitement. Il est recommandé d'utiliser d'autres Transformers lorsque cela est possible plutôt que des scripts Python.

Interface Classe

PythonCaller peut s'interfacer avec une classe définie dans un script Python.

Le script fourni contient une classe appelée FeatureCreator , qui hérite de fme.BaseTransformer . Il s'agit d'une classe de base qui représente l'interface attendue par l'infrastructure FME. Voir la documentation du module Python de FME pour plus d'informations.

L'appel de séquence d'une méthode définie dans une classe dépend du mode de PythonCaller. Il y a deux modes Standard et Regrouper par.

Mode standard

Il s'agit du mode de fonctionnement lorsqu'aucun attribut n'est défini dans le paramètre Regrouper par. Dans ce mode, qui est le plus courant, le PythonCaller aura la séquence d'appel suivante sur une classe :

  • __init__() - appelée une fois, que les entités soient traitées ou non.
  • input() - appelée pour chaque FMEFeature qui vient dans le port d'entrée.
  • close() -- Appelée une fois, après le traitement de toutes les entités (lorsqu'il ne reste plus de FMEFeatures). Si aucune entité n'est traitée, la méthode close() sera quand même appelée.

Les entités qui doivent continuer à travers le traitement pour un traitement ultérieur doivent être explicitement écrites en utilisant la méthode pyoutput(). Lors de l'utilisation de la méthode pyoutput(), il est recommandé de mettre l'argument output_tag à PYOUTPUT .

Lorsque l'interface de classe traite les FMEFeatures entrants un par un, la méthode pyoutput() doit être appelée une fois par FMEFeature entrant dans la méthode input(). À l'inverse, lorsque l'interface de classe opère sur un groupe de FMEFeatures, les FMEFeatures entrants peuvent être stockés dans une liste, puis traités et écrits par la méthode pyoutput() dans la méthode close().

Les entités qui provoquent l'échec des opérations peuvent être envoyées vers le port <Rejected> en utilisant la méthode reject_feature() définie dans la classe FeatureProcessor.

L'exemple ci dessous totalise la superficie des géométries de toutes les entités traitées puis génère toutes les entités avec un nouvel attribut contenant la superficie totale :

Traitement des regroupements

Il s'agit du mode de fonctionnement lorsqu'un ou plusieurs attributs sont définis dans le paramètre Regrouper par. Dans ce mode, le PythonCaller aura la séquence d'appel suivante sur une classe :

  • __init__() - appelée une fois, que les entités soient traitées ou non.
  • input() - appelée pour chaque entité dans un groupe.
  • process_group() - Appelé après que toutes les FMEFeatures d'un groupe ont été envoyées à input(). Après l'appel et l'exécution de cette fonction, PythonCaller enverra le prochain groupe de FMEFeatures à input() et appellera ensuite à nouveau process_group(). Ceci est répété jusqu'à ce que tous les groupes aient été épuisés.
  • close() - Appelée une fois, après que tous les tours de input() et de process_group() aient été appelés pour traiter toutes les entités entrantes (lorsqu'il ne reste plus de FMEFeatures). Si aucune entité n'est traitée, la méthode close() sera quand même appelée.

Dans ce mode, l'interface de la classe travaille sur des groupes de FMEFeatures. Les FMEFeatures entrants doivent être stockés dans une variable membre de la classe liste, puis traités et écrits à travers pyoutput() dans la méthode process_group(). Une fois le traitement terminé dans process_group(), toutes les variables membres de la classe doivent être effacées pour le prochain cycle de traitement des groupes. Au tour suivant, les caractéristiques FMEF du groupe suivant sont passées par des appels input() suivis à nouveau par process_group(). Ceci est répété jusqu'à ce que tous les groupes soient épuisés.

L'exemple ci dessous calcule la superficie totale des géométries de toutes les entités regroupée selon l'attribut _shape puis ressort toutes les entités avec un nouvel attribut contenant le total de surface de chaque groupe.

Edition de Script

PythonCaller peut appeler tous les scripts stockés dans le Transformer lui même ou les scripts stockés dans l'ensemble du traitement :

  • Pour stocker un script Python avec un Transformer PythonCaller spécifique, utiliser le paramètre Script Python.
  • Pour stocker un script Python de manière globale, cliquez sur le paramètre Traitement > Scriptage dans le navigateur, puis double-cliquez sur Script Python de lancement . Le stockage global des scripts présente l'avantage de centraliser la logique Python, ce qui facilite l'édition et la maintenance. Cela est utile lorsque plusieurs Transformers PythonCaller du traitement utilisent le même script. Pour plus d'informations, consultez la rubrique Lancement et arrêt de scripts Python dans l'aide de FME Workbench.

FME peut accéder aux modules .py qui sont stockés dans le système de fichiers, y compris les modules des bibliothèques Python externes. Utilisez la commande Python "import" pour charger ces modules. FME effectuera une recherche dans les emplacements standard des modules Python et dans l'emplacement dans le traitement pour trouver le module à importer.

Configuration

Ports en entrée

Ports de sortie

Paramètres

Éditer les paramètres des Transformers

Les paramètres du Transformer peuvent être définis en saisissant directement des valeurs, en utilisant des expressions ou en faisant référence à d'autres éléments de l'espace de travail tels que des valeurs d'attributs ou des paramètres utilisateur. Divers éditeurs et menus contextuels sont disponibles pour vous aider. Pour voir ce qui est disponible, cliquez sur à côté du paramètre concerné.

Pour plus d'information, consulter la section Options des Transformers.

Références

Comportement

Basé sur les entités ou Basé sur les groupes, conditionnel sur le script Python.

Stockage des entités

Conditionnel sur le script Python.

Dépendances
Alias  
Historique  

FME Community

FME Community dispose d'une mine de connaissances sur FME, avec plus de 20 000 membres actifs dans le monde entier. Obtenez de l'aide sur FME, partagez vos connaissances et entrez en contact avec des utilisateurs du monde entier.

Voir tous les résultats à propos de ce Transformer sur FME Community.

 

Examples may contain information licensed under the Open Government Licence – Vancouver, Open Government Licence - British Columbia, and/or Open Government Licence – Canada.