6bb385f2 |
## Amazon S3 manager - Exceptions library
## Author: Michal Ludvig <michal@logix.cz>
## http://www.logix.cz/michal
## License: GPL Version 2
|
67a8d099 |
from Utils import getRootTagName |
6bb385f2 |
from logging import debug, info, warning, error
try:
import xml.etree.ElementTree as ET
except ImportError:
import elementtree.ElementTree as ET
|
d90a7929 |
class S3Exception(Exception): |
65b813e3 |
def __init__(self, message = ""): |
82d9eafa |
self.message = unicodise(message) |
65b813e3 |
|
d90a7929 |
def __str__(self): |
82d9eafa |
return deunicodise(self.message) |
d90a7929 |
def __unicode__(self):
return self.message
class S3Error (S3Exception): |
6bb385f2 |
def __init__(self, response):
self.status = response["status"]
self.reason = response["reason"]
self.info = {}
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])) |
67a8d099 |
if response.has_key("data") and getRootTagName(response["data"]) == "Error": |
6bb385f2 |
tree = ET.fromstring(response["data"])
for child in tree.getchildren():
if child.text != "":
debug("ErrorXML: " + child.tag + ": " + repr(child.text))
self.info[child.tag] = child.text
|
d90a7929 |
def __unicode__(self): |
6bb385f2 |
retval = "%d (%s)" % (self.status, self.reason)
try:
retval += (": %s" % self.info["Code"])
except (AttributeError, KeyError):
pass
return retval
|
d90a7929 |
class S3UploadError(S3Exception): |
6bb385f2 |
pass
|
d90a7929 |
class S3DownloadError(S3Exception): |
ed27a45e |
pass
|
00f5f67e |
class S3RequestError(S3Exception):
pass
|
451a19a2 |
class InvalidFileError(S3Exception):
pass
|
d90a7929 |
class ParameterError(S3Exception): |
6bb385f2 |
pass |