code: def calc_cache_key(custom_models):
      ''' Generate a key to cache a custom extension implementation with.
  
      There is no metadata other than the Model classes, so this is the only
      base to generate a cache key.
  
      We build the model keys from the list of ``model.full_name``. This is
      not ideal but possibly a better solution can be found found later.
  
      '''
      model_names = {model.full_name for model in custom_models.values()}
      encoded_names = ",".join(sorted(model_names)).encode('utf-8')
      return hashlib.sha256(encoded_names).hexdigest(f calc_cache_key(custom_models):
      ''' Generate a key to cache a custom extension implementation with.
  
      There is no metadata other than the Model classes, so this is the only
      base to generate a cache key.
  
      We build the model keys from the list of ``model.full_name``. This is
      not ideal but possibly a better solution can be found found later.
  
      '''
      model_names = {model.full_name for model in custom_models.values()}
      encoded_names = ",".join(sorted(model_names)).encode('utf-8')
      return hashlib.sha256(encoded_names).hexdigest()
docs: Generate a key to cache a custom extension implementation with.
  
      There is no metadata other than the Model classes, so this is the only
      base to generate a cache key.
  
      We build the model keys from the list of ``model.full_name``. This is
      not ideal but possibly a better solution can be found found later.