Skip to main content
Version: 3.0.0-LTS

Run Python Code

In ToolJet, custom Run Python Code can be used to interact with components and queries, making it possible to customize actions and data handling.

Run Python code

Using Python Code to Trigger Component Specific Actions

  1. Drag a Text component onto the canvas. We will set the text on the Text component using the Python query.
  2. Create a query and select Run Python code from the available data sources
  3. Paste the below code in the code editor and save the query:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age

def myfunc(self):
return "Hello my name is " + self.name

p1 = Person(tj_globals.currentUser.firstName, 36)

components.text1.setText(p1.myfunc())
  1. The above code has a function myfunc which returns a string and we are using a Component Specific Action to set the Text Component's value from the Python query.
tip

Trigger Queries Using Run Python Code

To trigger queries in Python, you can use the below functions:

actions.runQuery('getSalesData')
#replace getSalesData with your query name

Or

queries.getSalesData.run()
#replace getSalesData with your query name

Get Query Data

To immediately access the data returned by a query in Run Python code, you can use the below functions:

Trigger a Query and Retrieve its Data

await queries.getSalesData.run()
#replace getSalesData with your query name

value = queries.getSalesData.getData()
#replace getSalesData with your query name

value

Trigger a Query and Retrieve its Raw Data

await queries.getCustomerData.run()
#replace getCustomerData with your query name

value = queries.getCustomerData.getRawData()
#replace getCustomerData with your query name

value

Trigger a Query and Retrieve its Loading State

await queries.getTodos.run()
#replace getTodos with your query name

value = queries.getTodos.getLoadingState()
#replace getTodos with your query name

value

Get Variables

To set and access variables or page variables in Run Python code, you can use the below functions:

Set a Variable

actions.setVariable('color','blue')
#replace color with your desired variable name

Immediately Retrieve a Variable After Setting it

actions.setVariable('mode','dark')
#replace mode with your desired variable name

actions.getVariable('mode')
#replace mode with your desired variable name

Set a Page-Specific Variable

actions.setPageVariable('version', 1)
#replace version with your desired variable name

Immediately Retrieve a Page-Specific Variable After Setting it

actions.setPageVariable('number',1)
#replace number with your desired variable name

actions.getPageVariable('number')
#replace number with your desired variable name

Using Transformations With Python

Run Python code can be used to transform the data that is fetched in the queries. To test transformations using Python, create a new REST API query, leave the method as GET and enter the below url under the URL property.

https://dummyjson.com/products

Click on the Run button and check the preview of the returned data, below is the data structure of the response:

products_data = {
"products": [
{"title": "iPhone 9", ...},
{"title": "iPhone X", ...},
# Additional products...
]
}

Filter the Titles From the Response

To extract a list of product titles from the given data structure, we iterate through the products list and collect each product's title using the below code. Enable Transformations in the Query Editor and use the below code:

return [product["title"] for product in data["products"]]

Filter Products by Category

To filter products by a specific category, such as smartphones, and extract their titles. Enable Transformations in the Query Editor and use the below code:

return [product["title"] for product in data["products"] if product["category"] == "smartphones"]

Calculate Average Price of a Category

To calculate the average price of products within the laptops category. Enable Transformations in the Query Editor and use the below code:

return sum(product["price"] for product in data["products"] if product["category"] == "laptops") / len([product for product in data["products"] if product["category"] == "laptops"]) if len([product for product in data["products"] if product["category"] == "laptops"]) > 0 else 0

Refer Python Query Data in Components

Just like other dynamic values, you can refer the data returned by Run Python code queries using double curly braces{{}}.

For instance, if you have a Run Python code query named updatedProductInfo, you can pass {{queries.updatedProductInfo.data}} under the Data property of a Table component to populate it with the data returned by the updatedProductInfo query.

info

Issues with writing custom Python code? Ask in our Slack community.