def unmap(self, unmap_kwargs: Optional[Dict[str, Any]] = None) -> "BaseOperator": """ Get the "normal" Operator after applying the current mapping. If ``operator_class`` is not a class (i.e. this DAG has been deserialized) then this will return a SerializedBaseOperator that aims to "look like" the real operator. :param unmap_kwargs: Override the args to pass to the Operator constructor. Only used when ``operator_class`` is still an actual class. :meta private: """ if isinstance(self.operator_class, type): # We can't simply specify task_id here because BaseOperator further # mangles the task_id based on the task hierarchy (namely, group_id # is prepended, and '__N' appended to deduplicate). Instead of # recreating the whole logic here, we just overwrite task_id later. if unmap_kwargs is None: unmap_kwargs = self._get_unmap_kwargs() op = self.operator_class(**unmap_kwargs, _airflow_from_mapped=True) op.task_id = self.task_id return op # After a mapped operator is serialized, there's no real way to actually # unmap it since we've lost access to the underlying operator class. # This tries its best to simply "forward" all the attributes on this # mapped operator to a new SerializedBaseOperator instance. from airflow.serialization.serialized_objects import SerializedBaseOperator op = SerializedBaseOperator(task_id=self.task_id, _airflow_from_mapped=True) SerializedBaseOperator.populate_operator(op, self.operator_class) return op
def unmap(self) -> "BaseOperator": """Get the "normal" Operator after applying the current mapping.""" if isinstance(self.operator_class, type): return self.operator_class(**self._get_unmap_kwargs(), _airflow_from_mapped=True) # After a mapped operator is serialized, there's no real way to actually # unmap it since we've lost access to the underlying operator class. # This tries its best to simply "forward" all the attributes on this # mapped operator to a new SerializedBaseOperator instance. from airflow.serialization.serialized_objects import SerializedBaseOperator op = SerializedBaseOperator(task_id=self.task_id, _airflow_from_mapped=True) SerializedBaseOperator.populate_operator(op, self.operator_class) return op
def unmap( self, resolve: Union[None, Mapping[str, Any], Tuple[Context, Session]] ) -> "BaseOperator": """Get the "normal" Operator after applying the current mapping. If ``operator_class`` is not a class (i.e. this DAG has been deserialized), this returns a SerializedBaseOperator that aims to "look like" the actual unmapping result. :param resolve: Only used if ``operator_class`` is a real class. If this is a two-tuple (context, session), the information is used to resolve the mapped arguments into init arguments. If this is a mapping, no resolving happens, the mapping directly provides those init arguments resolved from mapped kwargs. :meta private: """ if isinstance(self.operator_class, type): if isinstance(resolve, collections.abc.Mapping): kwargs = resolve else: kwargs = self._expand_mapped_kwargs(resolve) kwargs = self._get_unmap_kwargs( kwargs, strict=self._disallow_kwargs_override) op = self.operator_class(**kwargs, _airflow_from_mapped=True) # We need to overwrite task_id here because BaseOperator further # mangles the task_id based on the task hierarchy (namely, group_id # is prepended, and '__N' appended to deduplicate). This is hacky, # but better than duplicating the whole mangling logic. op.task_id = self.task_id return op # After a mapped operator is serialized, there's no real way to actually # unmap it since we've lost access to the underlying operator class. # This tries its best to simply "forward" all the attributes on this # mapped operator to a new SerializedBaseOperator instance. from airflow.serialization.serialized_objects import SerializedBaseOperator op = SerializedBaseOperator(task_id=self.task_id, _airflow_from_mapped=True) SerializedBaseOperator.populate_operator(op, self.operator_class) return op
def unmap(self) -> "BaseOperator": """Get the "normal" Operator after applying the current mapping.""" if isinstance(self.operator_class, type): # We can't simply specify task_id here because BaseOperator further # mangles the task_id based on the task hierarchy (namely, group_id # is prepended, and '__N' appended to deduplicate). Instead of # recreating the whole logic here, we just overwrite task_id later. op = self.operator_class(**self._get_unmap_kwargs(), _airflow_from_mapped=True) op.task_id = self.task_id return op # After a mapped operator is serialized, there's no real way to actually # unmap it since we've lost access to the underlying operator class. # This tries its best to simply "forward" all the attributes on this # mapped operator to a new SerializedBaseOperator instance. from airflow.serialization.serialized_objects import SerializedBaseOperator op = SerializedBaseOperator(task_id=self.task_id, _airflow_from_mapped=True) SerializedBaseOperator.populate_operator(op, self.operator_class) return op