def METHOD_NAME(self, ds):
    logger.info('Copying input data')
    self._ds_data_path = Path(self._sm_config['fs']['spark_data_path']) / ds.id
    if ds.input_path.startswith('s3a://'):
        self._ds_data_path.mkdir(parents=True, exist_ok=True)
        bucket_name, key = split_s3_path(ds.input_path)
        bucket = storage.get_s3_bucket(bucket_name, self._sm_config)
        for obj_sum in bucket.objects.filter(Prefix=key):
            local_file = str(self._ds_data_path / Path(obj_sum.key).name)
            logger.debug(f'Downloading s3a://{bucket_name}/{obj_sum.key} -> {local_file}')
            obj_sum.Object().download_file(local_file)
    else:
        rmtree(self._ds_data_path, ignore_errors=True)
        copytree(src=ds.input_path, dst=self._ds_data_path)