Browse code

add list multiparts and abort multipart

UENISHI Kota authored on 2013/03/11 11:58:20
Showing 2 changed files
... ...
@@ -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},