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... | ... |
@@ -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}, |