# Source code for jira.exceptions

    import os
    import tempfile

    class JIRAError(Exception):
        """General error raised for all problems in operation of the client."""

        log_to_tempfile = True
        if 'TRAVIS' in os.environ:
            log_to_tempfile = False  # Travis is keeping only the console log.

        def __init__(self, status_code=None, text=None, url=None, request=None, response=None, **kwargs):
            self.status_code = status_code
            self.text = text
            self.url = url
            self.request = request
            self.response = response
            self.headers = kwargs.get('headers', None)
            self.log_to_tempfile = False
            self.travis = False
            if 'PYJIRA_LOG_TO_TEMPFILE' in os.environ:
                self.log_to_tempfile = True
            if 'TRAVIS' in os.environ:
                self.travis = True

        def __str__(self):
            """Return a string representation of the error."""
            t = "JiraError HTTP %s" % self.status_code
            if self.url:
                t += " url: %s" % self.url

            details = ""
            if self.request is not None and hasattr(self.request, 'headers'):
                details += "\n\trequest headers = %s" % self.request.headers

            if self.request is not None and hasattr(self.request, 'text'):
                details += "\n\trequest text = %s" % self.request.text

            if self.response is not None and hasattr(self.response, 'headers'):
                details += "\n\tresponse headers = %s" % self.response.headers

            if self.response is not None and hasattr(self.response, 'text'):
                details += "\n\tresponse text = %s" % self.response.text

            # separate logging for Travis makes sense.
            if self.travis:
                if self.text:
                    t += "\n\ttext: %s" % self.text
                t += details
            # Only log to tempfile if the option is set.
            elif self.log_to_tempfile:
                fd, file_name = tempfile.mkstemp(suffix='.tmp', prefix='jiraerror-')
                with open(file_name, "w") as f:
                    t += " details: %s" % file_name
                    f.write(details)
            # Otherwise, just return the error as usual
            else:
                if self.text:
                    t += "\n\ttext: %s" % self.text
                t += "\n\t" + details

            return t