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.

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 traitement est moins visible et peut donc être plus difficile à maintenir que la logique construite à l'aide des Transformers intégrés de FME Workbench. Il est recommandé d'utiliser d'autres Transformers lorsque cela est possible plutôt que des scripts Python.

Interface Classe

Le PythonCaller peut s'interfacer avec une classe définie dans un script Python. La séquence d'appel des méthodes définies dans une classe dépend du mode dans lequel se trouve le PythonCaller. Il existe 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 dans le traitement pour de futurs traitements doivent être explicitement écrits en utilisant la méthode 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().

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

À l'aide d'un ensemble d'options de menu, les paramètres du Transformer peuvent être attribués en faisant référence à d'autres éléments de traitement. Des fonctions plus avancées, telles qu'un éditeur avancé et un éditeur arithmétique, sont également disponibles dans certains Transformers. Pour accéder à un menu de ces options, cliquez sur à côté du paramètre applicable. Pour plus d'informations, voir Options de menus et paramètres de Transformer.

Définir les valeurs

Il existe plusieurs façons de définir une valeur à utiliser dans un Transformer. La plus simple est de simplement taper une valeur ou une chaîne de caractères, qui peut inclure des fonctions de différents types comme des références d'attributs, des fonctions mathématiques et de chaînes de caractères, et des paramètres de traitement. Il existe un certain nombre d'outils et de raccourcis qui peuvent aider à construire des valeurs, généralement disponibles dans le menu contextuel déroulant adjacent au champ de valeur.

Options - Tables

Les Transformers avec des paramètres de style table possèdent des outils additionnels pour remplir et manipuler des valeurs.

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 est l'endroit où trouver des démos, des tutoriaux, des articles, des FAQ et bien plus encore. Obtenez des réponses à vos questions, apprenez des autres utilisateurs et suggérez, votez et commentez de nouvelles entités.

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

 

Les exemples peuvent contenir des informations sous licence Open Government - Vancouver et/ou Open Government - Canada.