... | ... |
@@ -536,6 +536,17 @@ class S3(object): |
536 | 536 |
response = self.send_request(request) |
537 | 537 |
return response |
538 | 538 |
|
539 |
+ def get_multipart(self, uri): |
|
540 |
+ request = self.create_request("BUCKET_LIST", bucket = uri.bucket(), extra = "?uploads") |
|
541 |
+ response = self.send_request(request) |
|
542 |
+ return response |
|
543 |
+ |
|
544 |
+ def abort_multipart(self, uri, id): |
|
545 |
+ request = self.create_request("OBJECT_DELETE", uri=uri, |
|
546 |
+ extra = ("?uploadId=%s" % id)) |
|
547 |
+ response = self.send_request(request) |
|
548 |
+ return response |
|
549 |
+ |
|
539 | 550 |
def get_accesslog(self, uri): |
540 | 551 |
request = self.create_request("BUCKET_LIST", bucket = uri.bucket(), extra = "?logging") |
541 | 552 |
response = self.send_request(request) |
... | ... |
@@ -1265,6 +1265,34 @@ def cmd_delpolicy(args): |
1265 | 1265 |
output(u"%s: Policy deleted" % uri) |
1266 | 1266 |
|
1267 | 1267 |
|
1268 |
+def cmd_multipart(args): |
|
1269 |
+ s3 = S3(cfg) |
|
1270 |
+ uri = S3Uri(args[0]) |
|
1271 |
+ |
|
1272 |
+ #id = '' |
|
1273 |
+ #if(len(args) > 1): id = args[1] |
|
1274 |
+ |
|
1275 |
+ response = s3.get_multipart(uri) |
|
1276 |
+ debug(u"response - %s" % response['status']) |
|
1277 |
+ output(u"%s" % uri) |
|
1278 |
+ tree = getTreeFromXml(response['data']) |
|
1279 |
+ debug(parseNodes(tree)) |
|
1280 |
+ output(u"Initiated\tId\tPath") |
|
1281 |
+ for mpupload in parseNodes(tree): |
|
1282 |
+ try: |
|
1283 |
+ output("%s\t%s\t%s" % (mpupload['Initiated'], mpupload['UploadId'], mpupload['Key'])) |
|
1284 |
+ except: |
|
1285 |
+ pass |
|
1286 |
+ |
|
1287 |
+def cmd_abort_multipart(args): |
|
1288 |
+ '''{"cmd":"abortmp", "label":"abort a multipart upload", "param":"s3://BUCKET Id", "func":cmd_abort_multipart, "argc":2},''' |
|
1289 |
+ s3 = S3(cfg) |
|
1290 |
+ uri = S3Uri(args[0]) |
|
1291 |
+ id = args[1] |
|
1292 |
+ response = s3.abort_multipart(uri, id) |
|
1293 |
+ debug(u"response - %s" % response['status']) |
|
1294 |
+ output(u"%s" % uri) |
|
1295 |
+ |
|
1268 | 1296 |
def cmd_accesslog(args): |
1269 | 1297 |
s3 = S3(cfg) |
1270 | 1298 |
bucket_uri = S3Uri(args.pop()) |
... | ... |
@@ -1619,6 +1647,9 @@ def get_commands_list(): |
1619 | 1619 |
{"cmd":"setpolicy", "label":"Modify Bucket Policy", "param":"FILE s3://BUCKET", "func":cmd_setpolicy, "argc":2}, |
1620 | 1620 |
{"cmd":"delpolicy", "label":"Delete Bucket Policy", "param":"s3://BUCKET", "func":cmd_delpolicy, "argc":1}, |
1621 | 1621 |
|
1622 |
+ {"cmd":"multipart", "label":"show multipart uploads", "param":"s3://BUCKET [Id]", "func":cmd_multipart, "argc":1}, |
|
1623 |
+ {"cmd":"abortmp", "label":"abort a multipart upload", "param":"s3://BUCKET/OBJECT Id", "func":cmd_abort_multipart, "argc":2}, |
|
1624 |
+ |
|
1622 | 1625 |
{"cmd":"accesslog", "label":"Enable/disable bucket access logging", "param":"s3://BUCKET", "func":cmd_accesslog, "argc":1}, |
1623 | 1626 |
{"cmd":"sign", "label":"Sign arbitrary string using the secret key", "param":"STRING-TO-SIGN", "func":cmd_sign, "argc":1}, |
1624 | 1627 |
{"cmd":"signurl", "label":"Sign an S3 URL to provide limited public access with expiry", "param":"s3://BUCKET/OBJECT expiry_epoch", "func":cmd_signurl, "argc":2}, |