External data

External data#

External data such as files and directories can be introduced as

import taskblaster as tb

@tb.workflow
class Workflow:
    folder = tb.var()

    @tb.external_data
    def molecules_folder(self):
        return self.folder

    @tb.task
    def use_folder(self):
        return tb.node('run', folder=self.molecules_folder)

def workflow(runner):
    runner.run_workflow(Workflow(folder='/home/user/molecules'))

Make sure you use absolute paths as strings when you supply the folder or a file. The external folder will be symlinked to the task folder as external, and whenever user depends on this external_data, this symlink will be returned as a pathlib.Path object, and user can access the files from this folder for example like: ase.io.read(folder / 'A.xyz'). If the external data is a file, then it will actually be copied.

The external file can be used as follows

class Workflow:
    ...

    @tb.task
    def totree(self):
        return tb.node('tasks.totree', database=self.database)

...
def totree(database):
    from ase.db import connect
    with connect(database.path):
        ...