Browse code

add list multiparts and abort multipart

UENISHI Kota authored on 2013/03/11 11:58:20
Showing 2 changed files
... ...
@@ -547,6 +547,17 @@ class S3(object):
547 547
         response = self.send_request(request)
548 548
         return response
549 549
 
550
+    def get_multipart(self, uri):
551
+        request = self.create_request("BUCKET_LIST", bucket = uri.bucket(), extra = "?uploads")
552
+        response = self.send_request(request)
553
+        return response
554
+
555
+    def abort_multipart(self, uri, id):
556
+        request = self.create_request("OBJECT_DELETE", uri=uri,
557
+                                      extra = ("?uploadId=%s" % id))
558
+        response = self.send_request(request)
559
+        return response
560
+
550 561
     def get_accesslog(self, uri):
551 562
         request = self.create_request("BUCKET_LIST", bucket = uri.bucket(), extra = "?logging")
552 563
         response = self.send_request(request)
... ...
@@ -1244,6 +1244,34 @@ def cmd_delpolicy(args):
1244 1244
     output(u"%s: Policy deleted" % uri)
1245 1245
 
1246 1246
 
1247
+def cmd_multipart(args):
1248
+    s3 = S3(cfg)
1249
+    uri = S3Uri(args[0])
1250
+    
1251
+    #id = ''
1252
+    #if(len(args) > 1): id = args[1]
1253
+
1254
+    response = s3.get_multipart(uri)
1255
+    debug(u"response - %s" % response['status'])
1256
+    output(u"%s" % uri)
1257
+    tree = getTreeFromXml(response['data'])
1258
+    debug(parseNodes(tree))
1259
+    output(u"Initiated\tId\tPath")
1260
+    for mpupload in parseNodes(tree):
1261
+        try:
1262
+            output("%s\t%s\t%s" % (mpupload['Initiated'], mpupload['UploadId'], mpupload['Key']))
1263
+        except:
1264
+            pass
1265
+
1266
+def cmd_abort_multipart(args):
1267
+    '''{"cmd":"abortmp",   "label":"abort a multipart upload", "param":"s3://BUCKET Id", "func":cmd_abort_multipart, "argc":2},'''
1268
+    s3 = S3(cfg)
1269
+    uri = S3Uri(args[0])
1270
+    id = args[1]
1271
+    response = s3.abort_multipart(uri, id)
1272
+    debug(u"response - %s" % response['status'])
1273
+    output(u"%s" % uri)
1274
+
1247 1275
 def cmd_accesslog(args):
1248 1276
     s3 = S3(cfg)
1249 1277
     bucket_uri = S3Uri(args.pop())
... ...
@@ -1598,6 +1626,9 @@ def get_commands_list():
1598 1598
     {"cmd":"setpolicy", "label":"Modify Bucket Policy", "param":"FILE s3://BUCKET", "func":cmd_setpolicy, "argc":2},
1599 1599
     {"cmd":"delpolicy", "label":"Delete Bucket Policy", "param":"s3://BUCKET", "func":cmd_delpolicy, "argc":1},
1600 1600
 
1601
+    {"cmd":"multipart", "label":"show multipart uploads", "param":"s3://BUCKET [Id]", "func":cmd_multipart, "argc":1},
1602
+    {"cmd":"abortmp",   "label":"abort a multipart upload", "param":"s3://BUCKET/OBJECT Id", "func":cmd_abort_multipart, "argc":2},
1603
+
1601 1604
     {"cmd":"accesslog", "label":"Enable/disable bucket access logging", "param":"s3://BUCKET", "func":cmd_accesslog, "argc":1},
1602 1605
     {"cmd":"sign", "label":"Sign arbitrary string using the secret key", "param":"STRING-TO-SIGN", "func":cmd_sign, "argc":1},
1603 1606
     {"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},