+
+
+def upload_file(encode, metadata, dry_run=True):
+ """Upload a file to the DCC
+ """
+ encode.validate(metadata, 'file')
+
+ if dry_run:
+ LOGGER.info(json.dumps(metadata, indent=4, sort_keys=True))
+ return
+
+ upload = make_upload_filename(metadata)
+ if not os.path.exists(upload):
+ with open(upload, 'w') as outstream:
+ json.dump(metadata, outstream, indent=4, sort_keys=True)
+ LOGGER.debug(json.dumps(metadata, indent=4, sort_keys=True))
+
+ response = encode.post_json('/file', metadata)
+ LOGGER.info(json.dumps(response, indent=4, sort_keys=True))
+
+ item = response['@graph'][0]
+ creds = item['upload_credentials']
+ run_aws_cp(metadata['submitted_file_name'], creds)
+ else:
+ LOGGER.info('%s already uploaded',
+ metadata['submitted_file_name'])
+
+
+def make_upload_filename(metadata):
+ return metadata['submitted_file_name'] + '.upload'