49
49
INVENTORY_LAG = 24 * 60 * 60 * 3
50
50
51
51
PROGRAM_NAME = 'glacier'
52
+ DEFAULT_PART_SIZE = 4194304
53
+
52
54
53
55
class ConsoleError (RuntimeError ):
54
56
def __init__ (self , m ):
@@ -463,7 +465,7 @@ def archive_list(self, args):
463
465
if archive_list :
464
466
print (* archive_list , sep = "\n " )
465
467
466
- def archive_upload (self , args ):
468
+ def archive_upload (self , args , multipart = False ):
467
469
# XXX: "Leading whitespace in archive descriptions is removed."
468
470
# XXX: "The description must be less than or equal to 1024 bytes. The
469
471
# allowable characters are 7 bit ASCII without control codes,
@@ -473,15 +475,25 @@ def archive_upload(self, args):
473
475
name = args .name
474
476
else :
475
477
try :
476
- full_name = args .file . name
478
+ full_name = args .file
477
479
except :
478
- raise RuntimeError (' Archive name not specified. Use --name' )
480
+ raise RuntimeError (" Archive name not specified. Use --name." )
479
481
name = os .path .basename (full_name )
480
482
481
483
vault = self .connection .get_vault (args .vault )
482
- archive_id = vault .create_archive_from_file (file_obj = args .file , description = name )
484
+
485
+ if not multipart :
486
+ archive_id = vault .create_archive_from_file (
487
+ filename = args .file , description = name )
488
+ else :
489
+ archive_id = vault .concurrent_create_archive_from_file (
490
+ filename = args .file , description = name )
491
+
483
492
self .cache .add_archive (args .vault , name , archive_id )
484
493
494
+ def multipart_archive_upload (self , args ):
495
+ return self .archive_upload (args , multipart = True )
496
+
485
497
@staticmethod
486
498
def _write_archive_retrieval_job (f , job , multipart_size ):
487
499
if job .archive_size > multipart_size :
@@ -639,12 +651,28 @@ def main(self):
639
651
archive_list_subparser = archive_subparser .add_parser ('list' )
640
652
archive_list_subparser .set_defaults (func = self .archive_list )
641
653
archive_list_subparser .add_argument ('vault' )
654
+
655
+ # Upload command
642
656
archive_upload_subparser = archive_subparser .add_parser ('upload' )
643
657
archive_upload_subparser .set_defaults (func = self .archive_upload )
644
658
archive_upload_subparser .add_argument ('vault' )
645
- archive_upload_subparser .add_argument ('file' ,
646
- type = argparse .FileType ('rb' ))
659
+ archive_upload_subparser .add_argument ('file' )
647
660
archive_upload_subparser .add_argument ('--name' )
661
+
662
+ # Multipart upload command
663
+ archive_multipart_upload_subparser = archive_subparser .add_parser (
664
+ 'multipart_upload' )
665
+ archive_multipart_upload_subparser .set_defaults (
666
+ func = self .multipart_archive_upload )
667
+ archive_multipart_upload_subparser .add_argument ('vault' )
668
+ archive_multipart_upload_subparser .add_argument ('file' )
669
+ archive_multipart_upload_subparser .add_argument ('--name' )
670
+ archive_multipart_upload_subparser .add_argument (
671
+ '--part-size' ,
672
+ default = DEFAULT_PART_SIZE ,
673
+ dest = "part_size"
674
+ )
675
+
648
676
archive_retrieve_subparser = archive_subparser .add_parser ('retrieve' )
649
677
archive_retrieve_subparser .set_defaults (func = self .archive_retrieve )
650
678
archive_retrieve_subparser .add_argument ('vault' )
0 commit comments