class_docstr: Hook for Google Dataflow.
  
  All the methods in the hook where project_id is used must be called with
  keyword arguments rather than positional.
class_docstr_tok: ["Hook","for","Google","Dataflow",".","All","the","methods","in","the","hook","where","project_id","is","used","must","be","called","with","keyword","arguments","rather","than","positional","."]
docstr: Check that Dataflow job is started(for streaming job) or finished(for batch job).
  
  :param location: location the job is running
  :param project_id: Google Cloud project ID in which to start a job
  :param job_id: Dataflow job ID
code: def is_job_done(
      self, location: str, project_id: str, job_id: str
  ) -> bool:
      """
      Check that Dataflow job is started(for streaming job) or finished(for batch job).
  
      :param location: location the job is running
      :param project_id: Google Cloud project ID in which to start a job
      :param job_id: Dataflow job ID
      """
      job_controller = _DataflowJobsController(
          dataflow=self.get_conn(),
          project_number=project_id,
          location=location,
      )
      job = job_controller.fetch_job_by_id(job_id)
  
      return job_controller._check_dataflow_job_state(job)
  
imports: from __future__ import annotations
  import functools
  import json
  import re
  import shlex
  import subprocess
  import time
  import uuid
  import warnings
  from copy import deepcopy
  from typing import TYPE_CHECKING, Any, Callable, Generator, Sequence, TypeVar, cast
  from google.cloud.dataflow_v1beta3 import GetJobRequest, Job, JobState, JobsV1Beta3AsyncClient, JobView
  from google.cloud.dataflow_v1beta3.types.jobs import ListJobsRequest
  from googleapiclient.discovery import build
  from airflow.exceptions import AirflowException, AirflowProviderDeprecationWarning
  from airflow.providers.apache.beam.hooks.beam import BeamHook, BeamRunnerType, beam_options_to_args
  from airflow.providers.google.common.hooks.base_google import PROVIDE_PROJECT_ID, GoogleBaseAsyncHook, GoogleBaseHook
  from airflow.utils.log.logging_mixin import LoggingMixin
  from airflow.utils.timeout import timeout
label_desc: Use image node_id 17 for calling the DataflowHook obj's underlying member method code with example usage: obj.is_job_done(location, project_id, job_id) and returns: job_controller