class_docstr: GCSTaskHandler is a python log handler that handles and reads task instance logs.
  
  It extends airflow FileTaskHandler and uploads to and reads from GCS remote
  storage. Upon log reading failure, it reads from host machine's local disk.
  
  :param base_log_folder: Base log folder to place logs.
  :param gcs_log_folder: Path to a remote location where logs will be saved. It must have the prefix
      ``gs://``. For example: ``gs://bucket/remote/log/location``
  :param filename_template: template filename string
  :param gcp_key_path: Path to Google Cloud Service Account file (JSON). Mutually exclusive with
      gcp_keyfile_dict.
      If omitted, authorization based on `the Application Default Credentials
      <https://cloud.google.com/docs/authentication/production#finding_credentials_automatically>`__ will
      be used.
  :param gcp_keyfile_dict: Dictionary of keyfile parameters. Mutually exclusive with gcp_key_path.
  :param gcp_scopes: Comma-separated string containing OAuth2 scopes
  :param project_id: Project ID to read the secrets from. If not passed, the project ID from credentials
      will be used.
  :param delete_local_copy: Whether local log files should be deleted after they are downloaded when using
      remote logging
class_docstr_tok: ["GCSTaskHandler","is","a","python","log","handler","that","handles","and","reads","task","instance","logs",".","It","extends","airflow","FileTaskHandler","and","uploads","to","and","reads","from","GCS","remote","storage",".","Upon","log","reading","failure",",","it","reads","from","host","machine","'s","local","disk",".",":","param","base_log_folder",":","Base","log","folder","to","place","logs",".",":","param","gcs_log_folder",":","Path","to","a","remote","location","where","logs","will","be","saved",".","It","must","have","the","prefix","``","gs",":","\/\/","``",".","For","example",":","``","gs",":","\/\/bucket\/remote\/log\/location","``",":","param","filename_template",":","template","filename","string",":","param","gcp_key_path",":","Path","to","Google","Cloud","Service","Account","file","(","JSON",")",".","Mutually","exclusive","with","gcp_keyfile_dict",".","If","omitted",",","authorization","based","on","`","the","Application","Default","Credentials","<","https",":","\/\/cloud.google.com\/docs\/authentication\/production","#","finding_credentials_automatically",">","`","__","will","be","used",".",":","param","gcp_keyfile_dict",":","Dictionary","of","keyfile","parameters",".","Mutually","exclusive","with","gcp_key_path",".",":","param","gcp_scopes",":","Comma-separated","string","containing","OAuth2","scopes",":","param","project_id",":","Project","ID","to","read","the","secrets","from",".","If","not","passed",",","the","project","ID","from","credentials","will","be","used",".",":","param","delete_local_copy",":","Whether","local","log","files","should","be","deleted","after","they","are","downloaded","when","using","remote","logging"]
docstr: Given exception, determine whether it is result of log not found.
  
  :meta private:
docstr_tok: ["Given","exception",",","determine","whether","it","is","result","of","log","not","found",".",":","meta","private",":"]
code: def no_log_found(exc):
      """
      Given exception, determine whether it is result of log not found.
  
      :meta private:
      """
      if (
          exc.args
          and isinstance(exc.args[0], str)
          and "No such object" in exc.args[0]
      ) or getattr(exc, "resp", {}).get("status") == "404":
          return True
      return False
  
imports: from __future__ import annotations
  import logging
  import os
  import shutil
  from functools import cached_property
  from pathlib import Path
  from typing import TYPE_CHECKING, Collection
  from google.cloud import storage
  from airflow.configuration import conf
  from airflow.exceptions import AirflowNotFoundException
  from airflow.providers.google.cloud.hooks.gcs import GCSHook, _parse_gcs_url
  from airflow.providers.google.cloud.utils.credentials_provider import get_credentials_and_project_id
  from airflow.providers.google.common.consts import CLIENT_INFO
  from airflow.utils.log.file_task_handler import FileTaskHandler
  from airflow.utils.log.logging_mixin import LoggingMixin
label_desc: Use image node_id 9 for calling the GCSTaskHandler obj's underlying member method code with example usage: obj.no_log_found(exc) and returns: False, True