Exposer une méthode

Pour exposer une méthode Python dans Constellation vous devez tout simplement ajouter le décorateur “Constellation.MessageCallback” sur votre méthode :

Ici nous déclarons le MessageCallback “SimpleMessageCallback” sans paramètre ni documentation.

Vous pouvez ajouter un ou plusieurs arguments à votre MC et utiliser la syntaxe de Python pour commenter vos MC :

Le ou les paramètres peuvent être des types simples (string, int, bool, etc..) ou des types (objets) complexes :

L’ensemble de ces méthodes déclarées “MessageCallbacks” seront alors référencées dans la Constellation. Vous pouvez les découvrir en interrogeant le Package Descriptor de votre package.

Par exemple, lancez la Console Constellation et rendez-vous dans le “MessageCallback Browser”. Vous aurez la liste de vos méthodes avec la possibilité de les invoquer directement depuis l’interface :

MessageCallbacks Explorer

Documenter son MessageCallback

Description des MessageCallbacks

Comme vous l’avez remarqué dans les exemples précédents, nous utilisons la documentation des méthodes de Python :

La documentation de la méthode est utilisée comme description du MessageCallback :

image

La description de la méthode peut être écrite sur plusieurs lignes :

Description des arguments des MessageCallbacks

Note : la description des arguments est disponible depuis l’API Python 1.8.4.x. Pensez à mettre à jour la référence de votre API par Nuget depuis Visual Studio ou en mettant à jour le template depuis la CLI.

Si vous regardez attentivement les arguments des MC dans le MessageCallback Explorer, ils sont reconnus comme « System.Object » étant donné que les arguments d’une fonction en Python ne sont pas typés.

Pour décrire les paramètres utilisez la syntaxe suivante dans la description du MC :

Par exemple :

Description des arguments d'un MC en Python

Ainsi en retournant sur le MC Explorer, chaque argument est correctement typé dans Constellation.

Paramètres optionnels avec valeur par défaut

Vous pouvez également définir que certains paramètres sont optionnels en spécifiant leurs valeurs par défaut avec la syntaxe [default: XXX] :

 

Arguments optionnels avec valeur par défaut

Décrire les arguments de type complexe

Dans le cas où un MC prend en paramètre un (ou plusieurs) type complexe, il faudra d’abord décrie le type dans la méthode « Start ».

Par exemple, enregistrons au démarrage du package (méthode Start), le type “CredentialInfo” :

Une fois tous vos types déclarés, il faut publier le “Package Descriptor” de votre package à Constellation par la ligne :

Nous pouvons maintenant déclarer un MC avec un parametre de type “CredentialInfo”. Par exemple :

Comme vous pourrez le voir dans le MessageCallbacks Explorer, votre méthode Python est correctement décrite ainsi que son paramètre “credential” de type “Credentialnfo”.

Argument de type complexe

Notez également que la description du type CredentialInfo est accessible en cliquant sur le type :

Argument de type complexe

Personnaliser le MessageCallback

Comme pour l’API.NET, par défaut le nom du MessageCallback déclaré dans la Constellation est le nom de votre méthode mais vous pouvez redéfinir le nom exposé dans la Constellation :

Aussi vous pouvez “cacher” ce MessageCallback à la Constellation.

Tous les packages ou consommateurs de votre Constellation pourront envoyer un message “HiddenMessageCallback” à votre package Python et donc invoquer votre méthode mais celle-ci ne sera pas déclarée dans le “Package  Descriptor”.

Récupérer le contexte

Comme avec l’API.NET, vous pouvez récupérer le contexte de réception du message en déclarant comme dernier argument de votre MessageCallback, le paramètre “context”.

Par exemple :

Ou avec des paramètres :

Il faut juste que le dernier argument soit nommé “context”. Notez qu’il ne fait pas partie de la signature de votre MessageCallback.

Ci-dessus, le 1er exemple est un MessageCallback caché et sans paramètre et le 2ème n’a que deux paramètres “a” et “b”.

L’objet “context” correspondant à la classe “Constellation.Package.MessageContext”. Vous retrouvez les propriétés suivantes :

  • IsSaga : indique si le message reçu appartient à une Saga
  • SagaId : identifiant de la Saga (si IsSaga = true)
  • Scope : scope d’envoi du message reçu
    • Type : type du scope (All, Group, Package, Sentinel, Others)
    • Args : arguments du scope (ex : nom du groupe, du package ou de la sentinelle)
  • Sender : représente l’émetteur du message
    • ConnectionId : identifiant de connexion unique de l’émetteur
    • Type : type de l’émetteur (ConsumerHub, ConstellationHub, ConsumerHttp ou ConstellationHttp)
    • FriendlyName : nom de l’émetteur

Répondre aux Sagas

Votre méthode peut également retourner une réponse à l’appelant, c’est ce que l’on appelle une saga. Pour cela vous pouvez spécifier le type de la valeur de retour dans le décorateur de la façon suivante :

Cependant il est recommandé d’utiliser la description du MC pour spécifier le type de retour avec la syntaxe

Par exemple :

Cela marche également en combinant la récupération du contexte :

Par exemple en ouvrant le “Message Callback Explorer” de la Console Constellation vous constaterez que votre MC “DemoAuth” est bien référencé comme retournant un “Booléen” en prenant deux arguments (car l’argument “context” n’est pas pris en compte dans la signature du MC) :

Saga

En invoquant cette méthode depuis la console, vous recevrez alors la réponse du package, ici un booléen :

image

Dans les logs, on retrouve bien la trace de l’invocation de notre Saga avec le “contexte” :

image

(le FriendlyName de la Console Constellation est “Consumer/ControlCenter:<user>”).

MessageCallback : Exposer des méthodes Python
Editer la page sur GitHub
Étiqueté avec :                        

Démarrez la discussion sur le forum Constellation