Browse code

* s3cmd, S3/S3.py: New command 'ib' to get information about bucket (only 'LocationConstraint' supported for now).

git-svn-id: https://s3tools.svn.sourceforge.net/svnroot/s3tools/s3cmd/trunk@154 830e0280-6d2a-0410-9c65-932aecc39d9d

Michal Ludvig authored on 2007/11/12 09:33:14
Showing 3 changed files
... ...
@@ -2,6 +2,8 @@
2 2
 
3 3
 	* s3cmd: Support for storing file attributes (like ownership, 
4 4
 	  mode, etc) in sync operation.
5
+	* s3cmd, S3/S3.py: New command 'ib' to get information about 
6
+	  bucket (only 'LocationConstraint' supported for now).
5 7
 
6 8
 2007-10-01  Michal Ludvig  <michal@logix.cz>
7 9
 
... ...
@@ -139,6 +139,12 @@ class S3(object):
139 139
 		response = self.send_request(request)
140 140
 		return response
141 141
 
142
+	def bucket_info(self, bucket):
143
+		request = self.create_request("BUCKET_LIST", bucket = bucket + "?location")
144
+		response = self.send_request(request)
145
+		response['bucket-location'] = getTextFromXml(response['data'], ".//LocationConstraint") or "any"
146
+		return response
147
+
142 148
 	def object_put(self, filename, bucket, object, extra_headers = None):
143 149
 		if not os.path.isfile(filename):
144 150
 			raise ParameterError("%s is not a regular file" % filename)
... ...
@@ -256,6 +262,8 @@ class S3(object):
256 256
 		for param in params:
257 257
 			if params[param] not in (None, ""):
258 258
 				param_str += "&%s=%s" % (param, params[param])
259
+			else:
260
+				param_str += "&%s" % param
259 261
 		if param_str != "":
260 262
 			resource += "?" + param_str[1:]
261 263
 		debug("CreateRequest: resource=" + resource)
... ...
@@ -160,6 +160,22 @@ def cmd_bucket_delete(args):
160 160
 			raise
161 161
 	output("Bucket '%s' removed" % uri.bucket())
162 162
 
163
+def cmd_bucket_info(args):
164
+	uri = S3Uri(args[0])
165
+	if not uri.type == "s3" or not uri.has_bucket() or uri.has_object():
166
+		raise ParameterError("Expecting S3 URI with just the bucket name set instead of '%s'" % args[0])
167
+	try:
168
+		s3 = S3(Config())
169
+		response = s3.bucket_info(uri.bucket())
170
+	except S3Error, e:
171
+		if S3.codes.has_key(e.info["Code"]):
172
+			error(S3.codes[e.info["Code"]] % uri.bucket())
173
+			return
174
+		else:
175
+			raise
176
+	output("Bucket '%s':" % uri.bucket())
177
+	output("   Location: %s" % response['bucket-location'])
178
+
163 179
 def cmd_object_put(args):
164 180
 	s3 = S3(Config())
165 181
 
... ...
@@ -566,6 +582,7 @@ commands = {}
566 566
 commands_list = [
567 567
 	{"cmd":"mb", "label":"Make bucket", "param":"s3://BUCKET", "func":cmd_bucket_create, "argc":1},
568 568
 	{"cmd":"rb", "label":"Remove bucket", "param":"s3://BUCKET", "func":cmd_bucket_delete, "argc":1},
569
+	{"cmd":"ib", "label":"Bucket information", "param":"s3://BUCKET", "func":cmd_bucket_info, "argc":1},
569 570
 	{"cmd":"ls", "label":"List objects or buckets", "param":"[s3://BUCKET[/PREFIX]]", "func":cmd_ls, "argc":0},
570 571
 	{"cmd":"la", "label":"List all object in all buckets", "param":"", "func":cmd_buckets_list_all_all, "argc":0},
571 572
 	{"cmd":"put", "label":"Put file into bucket", "param":"FILE [FILE...] s3://BUCKET[/PREFIX]", "func":cmd_object_put, "argc":2},