code: def lru_cache_freezeargs(func):
      """
      Decorator transforms mutable dictionary and list arguments into immutable types
      Needed so lru_cache can cache method calls what has dict or list arguments.
      """
  
      @functools.wraps(func)
      def wrapped(*args, **kwargs):
          args = tuple(
              [
                  frozendict(arg) if isinstance(arg, dict) else arg
                  for arg in args
              ]
          )
          kwargs = {
              k: frozendict(v) if isinstance(v, dict) else v
              for k, v in kwargs.items()
          }
          args = tuple(
              [
                  tuple(arg) if isinstance(arg, list) else arg
                  for arg in args
              ]
          )
          kwargs = {
              k: tuple(v) if isinstance(v, list) else v
              for k, v in kwargs.items()
          }
          return func(*args, **kwargs)
  
      # copy over the lru_cache extra methods to this wrapper to be able to access them
      # after this decorator has been applied
      wrapped.cache_info = func.cache_info
      wrapped.cache_clear = func.cache_clear
      return wrapped
  
imports: import functools
  from functools import lru_cache
  import requests
  from bs4 import BeautifulSoup
  import datetime
  from frozendict import frozendict
  from .None import utils, cache
  import threading
label_desc: Use image node_id 1 for calling a global function with example usage: lru_cache_freezeargs(func) and returns: wrapped, func