def __new__(cls, *args, _delayed=True, **kwargs): # If _delayed=True, we return a task instance wrapped in dask.delayed. if cls is Task: raise NotImplementedError # Create instance self = super().__new__(cls) # Initialize instance attributes. Dependencies are overridden as they are # non-data descriptors. self.__bound = cls.__signature__.bind_partial(*args, **kwargs) for name, value in self.__bound.arguments.items(): setattr(self, name, value) if _delayed: # Return the task instance as a dask.delayed function, # called with the task.run parameters. func = cls._delayed_run args, kwargs = self._run_arguments return func(literal(self), args, kwargs, dask_key_name=self.dask_key) else: # Return instance. Needed for Task serialization. return self
def test_tokenize_literal(): assert tokenize(literal(["x", 1])) == tokenize(literal(["x", 1]))
def test_literal_serializable(): l = literal((add, 1, 2)) assert pickle.loads(pickle.dumps(l)).data == (add, 1, 2)