python task framework, depends on py-essential