S3/Exceptions.py
6bb385f2
 ## Amazon S3 manager - Exceptions library
 ## Author: Michal Ludvig <michal@logix.cz>
 ##         http://www.logix.cz/michal
 ## License: GPL Version 2
 
b3488bab
 from Utils import getTreeFromXml, unicodise, deunicodise
6bb385f2
 from logging import debug, info, warning, error
 
 try:
d439efb4
     import xml.etree.ElementTree as ET
6bb385f2
 except ImportError:
d439efb4
     import elementtree.ElementTree as ET
6bb385f2
 
d90a7929
 class S3Exception(Exception):
d439efb4
     def __init__(self, message = ""):
         self.message = unicodise(message)
65b813e3
 
d439efb4
     def __str__(self):
         ## Call unicode(self) instead of self.message because
         ## __unicode__() method could be overriden in subclasses!
         return deunicodise(unicode(self))
d90a7929
 
d439efb4
     def __unicode__(self):
         return self.message
d90a7929
 
d439efb4
     ## (Base)Exception.message has been deprecated in Python 2.6
     def _get_message(self):
         return self._message
     def _set_message(self, message):
         self._message = message
     message = property(_get_message, _set_message)
d5ff1038
 
 
d90a7929
 class S3Error (S3Exception):
d439efb4
     def __init__(self, response):
         self.status = response["status"]
         self.reason = response["reason"]
         self.info = {
             "Code" : "",
             "Message" : "",
             "Resource" : ""
         }
         debug("S3Error: %s (%s)" % (self.status, self.reason))
         if response.has_key("headers"):
             for header in response["headers"]:
                 debug("HttpHeader: %s: %s" % (header, response["headers"][header]))
a845140f
         if response.has_key("data") and response["data"]:
d439efb4
             tree = getTreeFromXml(response["data"])
             error_node = tree
             if not error_node.tag == "Error":
                 error_node = tree.find(".//Error")
             for child in error_node.getchildren():
                 if child.text != "":
                     debug("ErrorXML: " + child.tag + ": " + repr(child.text))
                     self.info[child.tag] = child.text
         self.code = self.info["Code"]
         self.message = self.info["Message"]
         self.resource = self.info["Resource"]
 
     def __unicode__(self):
         retval = u"%d " % (self.status)
         retval += (u"(%s)" % (self.info.has_key("Code") and self.info["Code"] or self.reason))
         if self.info.has_key("Message"):
             retval += (u": %s" % self.info["Message"])
         return retval
6bb385f2
 
b3488bab
 class CloudFrontError(S3Error):
d439efb4
     pass
 
d90a7929
 class S3UploadError(S3Exception):
d439efb4
     pass
6bb385f2
 
d90a7929
 class S3DownloadError(S3Exception):
d439efb4
     pass
ed27a45e
 
00f5f67e
 class S3RequestError(S3Exception):
d439efb4
     pass
00f5f67e
 
cde72d48
 class S3ResponseError(S3Exception):
d439efb4
     pass
cde72d48
 
451a19a2
 class InvalidFileError(S3Exception):
d439efb4
     pass
451a19a2
 
d90a7929
 class ParameterError(S3Exception):
d439efb4
     pass
 
 # vim:et:ts=4:sts=4:ai