def METHOD_NAME(self, *args, **options):
    """
    Execute the command.
    Args:
        course_id (unicode): The ID of the course to use.
        s3_bucket_name (unicode): The name of the S3 bucket to upload to.
    Raises:
        CommandError
    """
    if len(args) < 2:
        raise CommandError(f'Usage: upload_oa_data {self.args}')
    course_id, s3_bucket = args[0], args[1]
    if isinstance(course_id, bytes):
        course_id = course_id.decode('utf-8')
    if isinstance(s3_bucket, bytes):
        s3_bucket = s3_bucket.decode('utf-8')
    csv_dir = tempfile.mkdtemp()
    try:
        print(f"Generating CSV files for course '{course_id}'")
        self._dump_to_csv(course_id, csv_dir)
        print(f"Creating archive of CSV files in {csv_dir}")
        archive_path = self._create_archive(csv_dir)
        print(f"Uploading {archive_path} to {s3_bucket}/{course_id}")
        url = self._upload(course_id, archive_path, s3_bucket)
        print("== Upload successful ==")
        print(f"Download URL (expires in {self.URL_EXPIRATION_HOURS} hours):\n{url}")
    finally:
        # Assume that the archive was created in the directory,
        # so to clean up we just need to delete the directory.
        shutil.rmtree(csv_dir)