code: def put(self, result, decorated_function, *args, **kwargs):
  		
  		self.__check(decorated_function, *args, **kwargs)
  
  		ref = weakref.ref(args[0])
  		if decorated_function not in self._storage:
  			cache_entry = self._cache_record_cls.create(result, decorated_function, *args, **kwargs)
  			self._storage[decorated_function] = [{'instance': ref, 'result': cache_entry}]
  		else:
  			instance_found = False
  			for i in self._storage[decorated_function]:
  				if i['instance']() == args[0]:
  					cache_entry = i['result']
  					cache_entry.update(result, *args, **kwargs)
  					instance_found = True
  					break
  			if instance_found is False:
  				cache_entry = self._cache_record_cls.create(result, decorated_function, *args, **kwargs)
  				self._storage[decorated_function].append({'instance': ref, 'result': cache_entry})
  
  		def finalize_ref():
  			if decorated_function in self._storage:
  				fn_list = self._storage[decorated_function]
  				if len(fn_list) == 1 and fn_list[0]['instance'] == ref:
  					del self._storage[decorated_function]
  
  				for i in range(len(fn_list)):
  					if fn_list[i]['instance'] == ref:
  						fn_list.pop(i)
  						return
  
  		weakref.finalize(args[0], finalize_ref)
docs: :meth:`WCacheStorage.put` method implementation