class CannotOverwriteExistingCassetteException(Exception):
    def __init__(self, *args, **kwargs):
        message = self._get_message(kwargs["cassette"], kwargs["failed_request"])
        super(CannotOverwriteExistingCassetteException, self).__init__(message)

    def _get_message(self, cassette, failed_request):
        """Get the final message related to the exception"""
        # Get the similar requests in the cassette that
        # have match the most with the request.
        best_matches = cassette.find_requests_with_most_matches(failed_request)
        # Build a comprehensible message to put in the exception.
        best_matches_msg = ""
        for best_match in best_matches:
            request, _, failed_matchers_assertion_msgs = best_match
            best_matches_msg += "Similar request found : (%r).\n" % request
            for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                best_matches_msg += "Matcher failed : %s\n" "%s\n" % (
                    failed_matcher,
                    assertion_msg,
                )
        return (
            "Can't overwrite existing cassette (%r) in "
            "your current record mode (%r).\n"
            "No match for the request (%r) was found.\n"
            "%s"
            % (cassette._path, cassette.record_mode, failed_request, best_matches_msg)
        )


class UnhandledHTTPRequestError(KeyError):
    """Raised when a cassette does not contain the request we want."""
    pass

class CannotOverwriteExistingCassetteException(Exception):
    def __init__(self, *args, **kwargs):
        self.cassette = kwargs["cassette"]
        self.failed_request = kwargs["failed_request"]
        message = self._get_message(kwargs["cassette"], kwargs["failed_request"])
        super(CannotOverwriteExistingCassetteException, self).__init__(message)

    def _get_message(self, cassette, failed_request):
        """Get the final message related to the exception"""
        # Get the similar requests in the cassette that
        # have match the most with the request.
        best_matches = cassette.find_requests_with_most_matches(failed_request)
        # Build a comprehensible message to put in the exception.
        best_matches_msg = ""
        for best_match in best_matches:
            request, _, failed_matchers_assertion_msgs = best_match
            best_matches_msg += "Similar request found : (%r).\n" % request
            for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                best_matches_msg += "Matcher failed : %s\n" "%s\n" % (
                    failed_matcher,
                    assertion_msg,
                )
        return (
            "Can't overwrite existing cassette (%r) in "
            "your current record mode (%r).\n"
            "No match for the request (%r) was found.\n"
            "%s"
            % (cassette._path, cassette.record_mode, failed_request, best_matches_msg)
        )


class UnhandledHTTPRequestError(KeyError):
    """Raised when a cassette does not contain the request we want."""
    pass

Add cassette and failed request as properties of thrown CannotOverwriteCassetteException
Add cassette and failed request as properties of thrown CannotOverwriteCassetteException

  class CannotOverwriteExistingCassetteException(Exception):
      def __init__(self, *args, **kwargs):
+         self.cassette = kwargs["cassette"]
+         self.failed_request = kwargs["failed_request"]
          message = self._get_message(kwargs["cassette"], kwargs["failed_request"])
          super(CannotOverwriteExistingCassetteException, self).__init__(message)
  
      def _get_message(self, cassette, failed_request):
          """Get the final message related to the exception"""
          # Get the similar requests in the cassette that
          # have match the most with the request.
          best_matches = cassette.find_requests_with_most_matches(failed_request)
          # Build a comprehensible message to put in the exception.
          best_matches_msg = ""
          for best_match in best_matches:
              request, _, failed_matchers_assertion_msgs = best_match
              best_matches_msg += "Similar request found : (%r).\n" % request
              for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                  best_matches_msg += "Matcher failed : %s\n" "%s\n" % (
                      failed_matcher,
                      assertion_msg,
                  )
          return (
              "Can't overwrite existing cassette (%r) in "
              "your current record mode (%r).\n"
              "No match for the request (%r) was found.\n"
              "%s"
              % (cassette._path, cassette.record_mode, failed_request, best_matches_msg)
          )
  
  
  class UnhandledHTTPRequestError(KeyError):
      """Raised when a cassette does not contain the request we want."""
      pass
  
Add cassette and failed request as properties of thrown CannotOverwriteCassetteException
## Code Before:
class CannotOverwriteExistingCassetteException(Exception):
    def __init__(self, *args, **kwargs):
        message = self._get_message(kwargs["cassette"], kwargs["failed_request"])
        super(CannotOverwriteExistingCassetteException, self).__init__(message)

    def _get_message(self, cassette, failed_request):
        """Get the final message related to the exception"""
        # Get the similar requests in the cassette that
        # have match the most with the request.
        best_matches = cassette.find_requests_with_most_matches(failed_request)
        # Build a comprehensible message to put in the exception.
        best_matches_msg = ""
        for best_match in best_matches:
            request, _, failed_matchers_assertion_msgs = best_match
            best_matches_msg += "Similar request found : (%r).\n" % request
            for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                best_matches_msg += "Matcher failed : %s\n" "%s\n" % (
                    failed_matcher,
                    assertion_msg,
                )
        return (
            "Can't overwrite existing cassette (%r) in "
            "your current record mode (%r).\n"
            "No match for the request (%r) was found.\n"
            "%s"
            % (cassette._path, cassette.record_mode, failed_request, best_matches_msg)
        )


class UnhandledHTTPRequestError(KeyError):
    """Raised when a cassette does not contain the request we want."""
    pass

## Instruction:
Add cassette and failed request as properties of thrown CannotOverwriteCassetteException
## Code After:
class CannotOverwriteExistingCassetteException(Exception):
    def __init__(self, *args, **kwargs):
        self.cassette = kwargs["cassette"]
        self.failed_request = kwargs["failed_request"]
        message = self._get_message(kwargs["cassette"], kwargs["failed_request"])
        super(CannotOverwriteExistingCassetteException, self).__init__(message)

    def _get_message(self, cassette, failed_request):
        """Get the final message related to the exception"""
        # Get the similar requests in the cassette that
        # have match the most with the request.
        best_matches = cassette.find_requests_with_most_matches(failed_request)
        # Build a comprehensible message to put in the exception.
        best_matches_msg = ""
        for best_match in best_matches:
            request, _, failed_matchers_assertion_msgs = best_match
            best_matches_msg += "Similar request found : (%r).\n" % request
            for failed_matcher, assertion_msg in failed_matchers_assertion_msgs:
                best_matches_msg += "Matcher failed : %s\n" "%s\n" % (
                    failed_matcher,
                    assertion_msg,
                )
        return (
            "Can't overwrite existing cassette (%r) in "
            "your current record mode (%r).\n"
            "No match for the request (%r) was found.\n"
            "%s"
            % (cassette._path, cassette.record_mode, failed_request, best_matches_msg)
        )


class UnhandledHTTPRequestError(KeyError):
    """Raised when a cassette does not contain the request we want."""
    pass
