Browse code

* S3/Utils.py: Common XML parser. * s3cmd, S3/Exeptions.py: Print info message on Error.

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
Showing 4 changed files
... ...
@@ -1,3 +1,8 @@
1
+2008-11-24  Michal Ludvig  <michal@logix.cz>
2
+
3
+	* S3/Utils.py: Common XML parser.
4
+	* s3cmd, S3/Exeptions.py: Print info message on Error.
5
+
1 6
 2008-11-21  Michal Ludvig  <michal@logix.cz>
2 7
 
3 8
 	* s3cmd: Support for 'cp' command.
... ...
@@ -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)