class_docstr: Hook for connection with Dataprep API.
  
  To get connection Dataprep with Airflow you need Dataprep token.
  
  https://clouddataprep.com/documentation/api#section/Authentication
  
  It should be added to the Connection in Airflow in JSON format.
class_docstr_tok: ["Hook","for","connection","with","Dataprep","API",".","To","get","connection","Dataprep","with","Airflow","you","need","Dataprep","token",".","https",":","\/\/clouddataprep.com\/documentation\/api","#","section\/Authentication","It","should","be","added","to","the","Connection","in","Airflow","in","JSON","format","."]
docstr: Create a copy of the provided flow id, as well as all contained recipes.
  
  :param flow_id: ID of the flow to be copied
  :param name: Name for the copy of the flow
  :param description: Description of the copy of the flow
  :param copy_datasources: Bool value to define should copies of data inputs be made or not.
docstr_tok: ["Create","a","copy","of","the","provided","flow","id",",","as","well","as","all","contained","recipes",".",":","param","flow_id",":","ID","of","the","flow","to","be","copied",":","param","name",":","Name","for","the","copy","of","the","flow",":","param","description",":","Description","of","the","copy","of","the","flow",":","param","copy_datasources",":","Bool","value","to","define","should","copies","of","data","inputs","be","made","or","not","."]
code: def copy_flow(
      self,
      *,
      flow_id: int,
      name: str = "",
      description: str = "",
      copy_datasources: bool = False,
  ) -> dict:
      """
      Create a copy of the provided flow id, as well as all contained recipes.
  
      :param flow_id: ID of the flow to be copied
      :param name: Name for the copy of the flow
      :param description: Description of the copy of the flow
      :param copy_datasources: Bool value to define should copies of data inputs be made or not.
      """
      endpoint_path = f"{self.api_version}/flows/{flow_id}/copy"
      url: str = urljoin(self._base_url, endpoint_path)
      body_request = {
          "name": name,
          "description": description,
          "copyDatasources": copy_datasources,
      }
      response = requests.post(
          url, headers=self._headers, data=json.dumps(body_request)
      )
      self._raise_for_status(response)
      return response.json()
  
imports: from __future__ import annotations
  import json
  from enum import Enum
  from typing import Any
  from urllib.parse import urljoin
  import requests
  from requests import HTTPError
  from tenacity import retry, stop_after_attempt, wait_exponential
  from airflow.hooks.base import BaseHook
label_desc: Use image node_id 7 for calling the GoogleDataprepHook obj's underlying member method code with example usage: obj.copy_flow() and returns: response