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):
...