Login
Introduction
Developer guide
Live task
Version

Python live task

Introduction

Python live task are simple live task that allows you to write python code that takes a Resource as input and return a Resource. It only supports python code and already installed package. It can be useful to manipulate an existing resource.
The python live task only support 1 input and 1 output. If you want to manipulate multiple resources, you can use ResourceSet.
When you write the code of a python live task, there are 2 important variables available in your code context :

  • sources : type List[Resource]
    • variable already initialized with the input Resources (an array containing a Table for example)
  • targets : type List[Resource]
    • variable not initialized, the outputs Resources must be assigned to this variable. This will be the outputs of the task.

The context of this a python live task is the same as a Task run method . This means that you can do the same things as you would in a normal run method of a Task. You can import bricks or libraries and call methods of the Task, like self.log_info_message.
This is the only live task that has the same context as a normal Task.
Here is a simple example of a Live task that takes a Table as input/output and transpose it. It takes just 1 input and 1 output Table.

# Import modules
from gws_core import Table

# access task method to log a messages
self.log_info_message('Transposing table')
# Transpose the input table
table: Table = sources[0].transpose()

# set the new table a output or the live task
targets = [table]

A third variable named working_dir is also available, see detail bellow.
How to develop a live task ?
The live task config integrate a light IDE to develop the live task. If you know what you are doing, this might be enough, but we recommend developing the live task in a real IDE before integrating it to the lab. The live task is just a script with some constraints on input/output, you can easily code it outside the lab and import the code in your lab task. This will save you some time and frustration.
You can develop it in the Codelab, here is how we recommend to do it.
If you are not familiar with the Codelab, please check the following link: https://constellab.community/tech-doc/doc/developer-guide/dev-environment-v2/getting-started
Ready to develop your live task ? Let's go 💪
Let's say we want to develop a live task that takes a Table as input, transpose it and return the transposed Table.
To do this we will develop and test our live task in a Jupyter notebook in Codelab. Open you Codelab, upload your data and create a Jupyter notebook file with the gws environment activated. You can find how to do this here : https://constellab.community/tech-doc/doc/developer-guide/dev-environment-v2/jupyter-notebook
Here is the code to do it.

# Initialize notebook to test live task
import env     
cwd = env.activate()    #activate GWS environment -> cwd will contain the current working dir as abolute path

# The import of any brick after the env.activate
from gws_core import File, TableImporter

# create a File resource
file = File('/lab/user/data/iris.csv')

# Import the File to Table
source = TableImporter.call(file, {"header": 0})

# convert to array
sources = [source]

#Start  Live task code
from gws_core import Table

targets = [sources[0].transpose()]
#End live task code

# print result Dataframe for notebook
print(targets[0].get_data())

Let's break it down
The first part until the #Start live task code comment, is the part that configure the notebook to be close to the configuration of a real live task. First we import and activate the gws environment. By using the File and TableImporter we create a Table resource from a file and assigne this Table to the source variable. We use the source variable to imitate the real live task. With this, the following code will be executed in a similar environment that the live task.
You will need an Importer (here TableImporter) to convert a file to the python Resource object. Any importer can be called using the call method. The first parameter must be a File and the seconds contains t.he parameters to call the importer.
The second part is the live task code : from #Start live task code to #End live task code . This is the code we are testing and once we are happy with it, we will be able to copy it to the live task.
the Third part after the #End live task code is for testing purpose in the notebook. This is useful to check the result. This part does not need to be copied in the live task..
Note: by doing this, we don't have the exact same context as the python live task. As this is executed in a task, you will not be able to use method from the task like the self.log_info_message

Log message

The python live task has the same context as a normal task, you can call the log methods. The logs will be available in the task messages. Theses methods can be useful to debug a live task.
To log a simple methods you can do : self.log_info_message('Hello world')
To log progresss you can do : self.update_progress_value(10, 'Reached 10%')
Here is a more detail information about the log methods : https://constellab.community/bricks/gws_core/latest/doc/developer-guide/task/task#log-messages

Working directory

Beside sources and targets variable, a third variable named working_dir is available. This variable contains the path of an empty temp directory if you need to create file or folder .After the execution of the live task, this directory is deleted. If a resource was referencing this directory (like a File or Folder), don't worry, it will be transferred before the deletion.