How to send a parameter from AngularJS to my do.py file?

gchris
gchris Registered Posts: 2

I have the following plugin implementation:

A dataset is fed to the plugin --> the do.py file extracts the column names --> Using AngularJS, callPythonDo() and the proper HTML, the custom form shows the names of the columns to the user --> the user selects a column-name. So far so good. How do I "send" the selected parameter ($scope.column_name) back to the do.py file so that I perform a filtering process (get the elements of that column) in the back-end and I send my result again back to my custom form?


Operating system used: Windows

Tagged:

Answers

  • Vitaliy
    Vitaliy Dataiker, Dataiku DSS Core Designer, Dataiku DSS Adv Designer Posts: 102 Dataiker
    edited July 17

    Hi, we do have a good example of how to fetch data for custom forms using the "callPythonDo" function in our documentation here.

    In addition to that, you can pass some data directly with the call of the "callPythonDo({mydata})", which then will be available in the payload of the "do" function.

    $scope.callPythonDo({mydata}).then(function(data) {

    Hope this helps.

    Best,

    Vitaliy

  • gchris
    gchris Registered Posts: 2
    edited July 17

    No that didn't work. My code looks like this:

    // AngularJS:
    
    // Step1: Loading a dictionary from PythonDo
    // Initial screen where the user can select values from a dropdown menu
    $scope.init = function () {
                $scope.callPythonDo({}).then(function (data) {
                    $scope.choices = data['choices'];
                    });
                 }
    
    // Step2: The user clicks on "Proceed to step 2" button and wants the selected values to be sent back to PythonDo
            $scope.proceedToStep2 = function() {
                $scope.callPythonDo({$scope.selectedValue}).then(function (data) {
                    console.log("This is the return of PythonDo: ", data)
                });
    # PythonDo
    def do(payload, config, plugin_config, inputs):
        if payload:
            # This should take the selected value (as payload) when the user clicks on "Step2" and return this message.
            return "This is the selected value returned from pythonDo"
        else:
            # Function that creates all available user options for Step 1
            user_options = create_user_options()
            return {'choices': user_options}

    I think that code should console log: "This is the return of PythonDo: This is the selected value returned from pythonDo" but it does not.

  • Vitaliy
    Vitaliy Dataiker, Dataiku DSS Core Designer, Dataiku DSS Adv Designer Posts: 102 Dataiker
    edited July 17

    Hi, your code doesn't look right. Please refer to the quick test from my lab below:

    Controller:

    var app = angular.module('customModel.recipe', []);
    
    app.controller('MyCustomFormController', function($scope) {
        var updateChoices = function() {
            var filterColumnConfig = $scope.config
            console.log("----scope.config.filterColumn-----")
            console.log($scope.config)
            
            var filterColumnConfig = $scope.config
    
            $scope.callPythonDo({filterColumnConfig}).then(function(data) {
                // success
                $scope.choices = data.choices;
            }, function(data) {
                // failure
                $scope.choices = [];
            });
        };
        $scope.$watch('config.filterColumn', updateChoices);
    });

    Python do function:

    # inputs is the list of input roles (in case of a recipe)
    def do(payload, config, plugin_config, inputs):
        print("------------payload----------------")
        print(payload)
        print("----------------------------")
        return {}

    Console output:

    ----scope.config.filterColumn-----
    {filterColumn: 'asdf'}

    Backend logs:

    [2023/06/28-16:19:24.573] [KNL-python-single-command-kernel-out-1170] [INFO] [dku.utils]  - ------------payload----------------
    [2023/06/28-16:19:24.573] [KNL-python-single-command-kernel-out-1170] [INFO] [dku.utils]  - {'filterColumnConfig': {'filterColumn': 'asdf'}}
    [2023/06/28-16:19:24.573] [KNL-python-single-command-kernel-out-1170] [INFO] [dku.utils]  - ----------------------------

    I hope the above will be helpful.

    Best,

    Vitaliy

Setup Info
    Tags
      Help me…