class_docstr: Helper methods for Airflow Handler.
class_docstr_tok: ["Helper","methods","for","Airflow","Handler","."]
docstr: Creates/updates pipeline folder in the handler directory.
  
  Args:
    pipeline_args: Pipeline details obtained from DSL.
docstr_tok: ["Creates\/updates","pipeline","folder","in","the","handler","directory",".","Args",":","pipeline_args",":","Pipeline","details","obtained","from","DSL","."]
code: def _save_pipeline(self, pipeline_args: Dict[str, Any]) -> None:
      """Creates/updates pipeline folder in the handler directory.
  
      Args:
        pipeline_args: Pipeline details obtained from DSL.
      """
      pipeline_name = pipeline_args[labels.PIPELINE_NAME]
      handler_pipeline_path = self._get_pipeline_info_path(
          pipeline_name
      )
  
      # If updating pipeline, first delete pipeline directory.
      if fileio.exists(handler_pipeline_path):
          io_utils.delete_dir(handler_pipeline_path)
  
      # Dump pipeline_args to handler pipeline folder as json.
      fileio.makedirs(handler_pipeline_path)
      with open(
          os.path.join(handler_pipeline_path, "pipeline_args.json"), "w"
      ) as f:
          json.dump(pipeline_args, f)
  
      # Copy dsl to pipeline folder
      pipeline_dsl_path = self.flags_dict[labels.PIPELINE_DSL_PATH]
      io_utils.copy_file(
          pipeline_dsl_path,
          os.path.join(
              handler_pipeline_path, os.path.basename(pipeline_dsl_path)
          ),
      )
  
imports: import json
  import os
  import subprocess
  from typing import Any, Dict, List
  import click
  from tfx.dsl.io import fileio
  from tfx.tools.cli import labels
  from tfx.tools.cli.handler import airflow_dag_runner_patcher
  from tfx.tools.cli.handler import base_handler
  from tfx.utils import io_utils
label_desc: Use image node_id 16 for calling the AirflowHandler obj's underlying member method code with example usage: obj._save_pipeline(pipeline_args) without return types