git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@263 830e0280-6d2a-0410-9c65-932aecc39d9d
Michal Ludvig authored on 2008/11/24 18:43:43... | ... |
@@ -3,6 +3,7 @@ |
3 | 3 |
## http://www.logix.cz/michal |
4 | 4 |
## License: GPL Version 2 |
5 | 5 |
|
6 |
+from Utils import getRootTagName |
|
6 | 7 |
from logging import debug, info, warning, error |
7 | 8 |
|
8 | 9 |
try: |
... | ... |
@@ -27,7 +28,7 @@ class S3Error (S3Exception): |
27 | 27 |
if response.has_key("headers"): |
28 | 28 |
for header in response["headers"]: |
29 | 29 |
debug("HttpHeader: %s: %s" % (header, response["headers"][header])) |
30 |
- if response.has_key("data"): |
|
30 |
+ if response.has_key("data") and getRootTagName(response["data"]) == "Error": |
|
31 | 31 |
tree = ET.fromstring(response["data"]) |
32 | 32 |
for child in tree.getchildren(): |
33 | 33 |
if child.text != "": |
... | ... |
@@ -57,19 +57,26 @@ def getNameSpace(element): |
57 | 57 |
return "" |
58 | 58 |
return re.compile("^(\{[^}]+\})").match(element.tag).groups()[0] |
59 | 59 |
|
60 |
-def getListFromXml(xml, node): |
|
60 |
+def getTreeFromXml(xml): |
|
61 | 61 |
tree = ET.fromstring(xml) |
62 |
- xmlns = getNameSpace(tree) |
|
63 |
- nodes = tree.findall('.//%s%s' % (xmlns, node)) |
|
64 |
- return parseNodes(nodes, xmlns) |
|
62 |
+ tree.xmlns = getNameSpace(tree) |
|
63 |
+ return tree |
|
64 |
+ |
|
65 |
+def getListFromXml(xml, node): |
|
66 |
+ tree = getTreeFromXml(xml) |
|
67 |
+ nodes = tree.findall('.//%s%s' % (tree.xmlns, node)) |
|
68 |
+ return parseNodes(nodes, tree.xmlns) |
|
65 | 69 |
|
66 | 70 |
def getTextFromXml(xml, xpath): |
67 |
- tree = ET.fromstring(xml) |
|
68 |
- xmlns = getNameSpace(tree) |
|
71 |
+ tree = getTreeFromXml(xml) |
|
69 | 72 |
if tree.tag.endswith(xpath): |
70 | 73 |
return tree.text |
71 | 74 |
else: |
72 |
- return tree.findtext(fixupXPath(xmlns, xpath)) |
|
75 |
+ return tree.findtext(fixupXPath(tree.xmlns, xpath)) |
|
76 |
+ |
|
77 |
+def getRootTagName(xml): |
|
78 |
+ tree = getTreeFromXml(xml) |
|
79 |
+ return stripTagXmlns(tree.xmlns, tree.tag) |
|
73 | 80 |
|
74 | 81 |
def dateS3toPython(date): |
75 | 82 |
date = re.compile("\.\d\d\dZ").sub(".000Z", date) |
... | ... |
@@ -1108,6 +1108,8 @@ def main(): |
1108 | 1108 |
cmd_func(args) |
1109 | 1109 |
except S3Error, e: |
1110 | 1110 |
error("S3 error: %s" % e) |
1111 |
+ if e.info.has_key("Message"): |
|
1112 |
+ error(e.info['Message']) |
|
1111 | 1113 |
sys.exit(1) |
1112 | 1114 |
except ParameterError, e: |
1113 | 1115 |
error("Parameter problem: %s" % e) |