code: def build_cache_key(self, fn, args, cache_args_to_ignore):
      fn_source = inspect.getsource(fn)
  
      if not isinstance(cache_args_to_ignore, (list, tuple)):
          cache_args_to_ignore = [cache_args_to_ignore]
  
      if cache_args_to_ignore:
          if isinstance(args, dict):
              args = {
                  k: v
                  for k, v in args.items()
                  if k not in cache_args_to_ignore
              }
          else:
              args = [
                  arg
                  for i, arg in enumerate(args)
                  if i not in cache_args_to_ignore
              ]
  
      hash_dict = dict(args=args, fn_source=fn_source)
  
      if self.cache_by is not None:
          # Caching enabled
          for i, cache_item in enumerate(self.cache_by):
              # Call cache function
              hash_dict[f"cache_key_{i}"] = cache_item()
  
      return hashlib.sha1(str(hash_dict).encode("utf-8")).hexdigest()
  
file_path: dash/dash/long_callback/managers/__init__.py
imports: from abc import ABC
  import inspect
  import hashlib
label_desc: Use image node_id 10 for calling the BaseLongCallbackManager obj's underlying member method code with example usage: obj.build_cache_key(fn, args, cache_args_to_ignore) and returns: hashlib