code: def _recursively_apply_get_cassette_subclass(self, replacement_dict_or_obj):
          
          if isinstance(replacement_dict_or_obj, dict):
              for key, replacement_obj in replacement_dict_or_obj.items():
                  replacement_obj = self._recursively_apply_get_cassette_subclass(
                      replacement_obj)
                  replacement_dict_or_obj[key] = replacement_obj
              return replacement_dict_or_obj
          if hasattr(replacement_dict_or_obj, 'cassette'):
              replacement_dict_or_obj = self._get_cassette_subclass(
                  replacement_dict_or_obj)
          return replacement_dict_or_obj
docs: One of the subtleties of this class is that it does not directly
          replace HTTPSConnection with `VCRRequestsHTTPSConnection`, but a
          subclass of the aforementioned class that has the `cassette`
          class attribute assigned to `self._cassette`. This behavior is
          necessary to properly support nested cassette contexts.
  
          This function exists to ensure that we use the same class
          object (reference) to patch everything that replaces
          VCRRequestHTTP[S]Connection, but that we can talk about
          patching them with the raw references instead, and without
          worrying about exactly where the subclass with the relevant
          value for `cassette` is first created.
  
          The function is recursive because it looks in to dictionaries
          and replaces class values at any depth with the subclass
          described in the previous paragraph.