From b71c8c0694c4133aef557397eaa1e8eb28e440c0 Mon Sep 17 00:00:00 2001 From: yrriban Date: Thu, 24 Apr 2025 18:39:41 -0400 Subject: [PATCH] Add support for uploading dsda zip bundles. Also fix ACL to allow public reading of uploaded files. --- dcc/put.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/dcc/put.py b/dcc/put.py index 7c50ad1..09f1e93 100644 --- a/dcc/put.py +++ b/dcc/put.py @@ -3,10 +3,24 @@ import dcc.config import dcc.doom_base class Put(dcc.doom_base.WadMap): + def get_parser(self, prog_name): + parser = super().get_parser(prog_name) + parser.add_argument("-d", "--dsda", action="store_true") + parser.add_argument("-s", "--single", action="store_true") + return parser + # TODO: accept configuration for bucket name def take_action(self, parsed_args): s3_client = boto3.client('s3') demo = dcc.config.DemoInPath(parsed_args.wad, parsed_args.map) - s3_client.upload_file( - demo, 'yrriban', 'doom/' + dcc.config.DemoName(parsed_args.wad, parsed_args.map), - ExtraArgs={'ContentType': 'binary/octet-stream'}) + bucket = dcc.config.DemoName(parsed_args.wad, parsed_args.map) + if parsed_args.dsda: + pattern = ("{}{}".format(parsed_args.wad[0:2], parsed_args.map) if not parsed_args.single else parsed_args.wad[0:4]) + "*.zip" + zips = [x for x in dcc.config.DEMOS.joinpath(parsed_args.wad).glob(pattern)] + if len(zips) != 1: + raise Exception("Unable to identify exactly one suitable upload candidate (was {})".format(zips)) + demo = zips[0] + bucket = "dsda/{}".format(demo.name) + print("Uploading {} to bucket doom/{}.".format(demo, bucket)) + s3_client.upload_file(demo, 'yrriban', 'doom/' + bucket, + ExtraArgs={'ContentType': 'binary/octet-stream', 'ACL': 'public-read'})