Skip to content

Commit

Permalink
Multipart upload added.
Browse files Browse the repository at this point in the history
  • Loading branch information
Piotr Kaleta committed Mar 1, 2013
1 parent 7ba14fa commit 68af3c1
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 6 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ Commands
* <code>glacier vault sync [--wait] [--fix] [--max-age <em>hours</em>] <em>vault-name</em></code>
* <code>glacier archive list <em>vault-name</em></code>
* <code>glacier archive upload [--name <em>archive-name</em>] <em>vault-name</em> <em>filename</em></code>
* <code>glacier archive multipart_upload [--name <em>archive-name</em>] [--part-size <em>part-size</em>] <em>vault-name</em> <em>filename</em></code>
* <code>glacier archive retrieve [--wait] [-o <em>filename</em>] [--multipart-size <em>bytes</em>] <em>vault-name</em> <em>archive-name</em></code>
* <code>glacier archive retrieve [--wait] [--multipart-size <em>bytes</em>] <em>vault-name</em> <em>archive-name</em> [<em>archive-name</em>...]</code>
* <code>glacier archive delete <em>vault-name</em> <em>archive-name</em></code>
Expand Down
40 changes: 34 additions & 6 deletions glacier.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@
INVENTORY_LAG = 24 * 60 * 60 * 3

PROGRAM_NAME = 'glacier'
DEFAULT_PART_SIZE = 4194304


class ConsoleError(RuntimeError):
def __init__(self, m):
Expand Down Expand Up @@ -463,7 +465,7 @@ def archive_list(self, args):
if archive_list:
print(*archive_list, sep="\n")

def archive_upload(self, args):
def archive_upload(self, args, multipart=False):
# XXX: "Leading whitespace in archive descriptions is removed."
# XXX: "The description must be less than or equal to 1024 bytes. The
# allowable characters are 7 bit ASCII without control codes,
Expand All @@ -473,15 +475,25 @@ def archive_upload(self, args):
name = args.name
else:
try:
full_name = args.file.name
full_name = args.file
except:
raise RuntimeError('Archive name not specified. Use --name')
raise RuntimeError("Archive name not specified. Use --name.")
name = os.path.basename(full_name)

vault = self.connection.get_vault(args.vault)
archive_id = vault.create_archive_from_file(file_obj=args.file, description=name)

if not multipart:
archive_id = vault.create_archive_from_file(
filename=args.file, description=name)
else:
archive_id = vault.concurrent_create_archive_from_file(
filename=args.file, description=name)

self.cache.add_archive(args.vault, name, archive_id)

def multipart_archive_upload(self, args):
return self.archive_upload(args, multipart=True)

@staticmethod
def _write_archive_retrieval_job(f, job, multipart_size):
if job.archive_size > multipart_size:
Expand Down Expand Up @@ -639,12 +651,28 @@ def main(self):
archive_list_subparser = archive_subparser.add_parser('list')
archive_list_subparser.set_defaults(func=self.archive_list)
archive_list_subparser.add_argument('vault')

# Upload command
archive_upload_subparser = archive_subparser.add_parser('upload')
archive_upload_subparser.set_defaults(func=self.archive_upload)
archive_upload_subparser.add_argument('vault')
archive_upload_subparser.add_argument('file',
type=argparse.FileType('rb'))
archive_upload_subparser.add_argument('file')
archive_upload_subparser.add_argument('--name')

# Multipart upload command
archive_multipart_upload_subparser = archive_subparser.add_parser(
'multipart_upload')
archive_multipart_upload_subparser.set_defaults(
func=self.multipart_archive_upload)
archive_multipart_upload_subparser.add_argument('vault')
archive_multipart_upload_subparser.add_argument('file')
archive_multipart_upload_subparser.add_argument('--name')
archive_multipart_upload_subparser.add_argument(
'--part-size',
default=DEFAULT_PART_SIZE,
dest="part_size"
)

archive_retrieve_subparser = archive_subparser.add_parser('retrieve')
archive_retrieve_subparser.set_defaults(func=self.archive_retrieve)
archive_retrieve_subparser.add_argument('vault')
Expand Down

0 comments on commit 68af3c1

Please sign in to comment.