Transformers FME: 2025.0
Transformers FME: 2025.0
PythonCaller
Exécute un script Python fourni par l'utilisateur pour manipuler les entités.
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.
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 : le mode standard et le mode traitement des regroupements.
Mode standard
Il s'agit du mode de fonctionnement lorsqu'aucun attribut n'est défini dans le paramètre Regrouper par. La plupart des utilisations de PythonCaller se feront en mode standard. 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 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 .
Depuis FME 2023.1, le mode par lots (bulk) est activé par défaut pour PythonCaller. Cela permet des gains de performance significatifs lors du traitement d'un grand nombre d'entités. En mode bulk, FME transmettra à la méthode `input()` des entités provenant d'un objet feature table. Les conditions suivantes doivent être remplies :
- les entités transmises dans la méthode input() ne peuvent pas être copiées ou mises en cache pour une utilisation ultérieure
- les entités ne peuvent pas être lues ou modifiées après avoir été passées à la méthode pyoutput()
- Seules les entités passées dans le Transformer peuvent être sorties du Transformer. Les objets FMEFeature() nouvellement instanciés ne doivent pas être sortis du Transformer. Toutes les entités passées dans le Transformer n'ont pas besoin d'être sorties du Transformer.
- Le traitement des regroupements ne doit pas être activé
Toute violation entraînera un comportement indéfini. Si l'utilisation de PythonCaller ne répond pas à ces exigences, le mode bulk doit être désactivé en modifiant la méthode has_support_for() pour qu'elle renvoie False lorsque l'argument support_type est égal à fmeobjects.FME_SUPPORT_FEATURE_TABLE_SHIM.
Lorsque l'implémentation de PythonCaller traite les caractéristiques FMEFeature entrantes une par une, la méthode pyoutput() doit être appelée une fois par caractéristique FMEFeature entrante dans la méthode input().
Lorsque l'implémentation de PythonCaller nécessite la connaissance de plusieurs FMEFeatures pour traiter les entités, les FMEFeatures entrantes peuvent être stockées dans une liste, puis traitées et écrites via pyoutput() dans la méthode close().
L'exemple ci-dessous calcule la surface totale de toutes les entités traitées, puis affiche toutes les entités avec un nouvel attribut contenant la surface totale. Notez que les entités étant mises en cache pour une utilisation ultérieure, le mode « bulk » ne doit pas être activé.
Mode Traitement des regroupements
Il s'agit du mode de traitement des entités utilisé lorsqu'un ou plusieurs attributs sont définis dans le paramètre Regrouper par. Lorsque ce mode est utilisé, le mode bulk doit être désactivé en modifiant la méthode has_support_for() pour qu'elle renvoie False lorsque l'argument support_type est égal à fmeobjects.FME_SUPPORT_FEATURE_TABLE_SHIM.
Dans ce mode, PythonCaller a l'appel de séquence dans 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.
Rejet d'entité
Quel que soit le mode de traitement, si des entités en entrée font échouer les opérations, elles peuvent être envoyées vers le port <Rejected> à l'aide de la méthode reject_feature() définie dans la classe FeatureProcessor.
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.