def _create_downloader()

in source/infrastructure/forecast/forecast/downloader.py [0:0]


    def _create_downloader(self):
        downloader = UrlDownloader(
            self.parent,
            f"{self.name}Downloader",
            destination=Location(
                bucket_name=self.destination.value_as_string,
                object_key=self.destination_key,
            ),
            source_url=self.url.parameter.value_as_string,
            source_bucket=self.bucket.parameter.value_as_string,
            source_key=self.key.parameter.value_as_string,
            scheme=self.scheme.parameter.value_as_string,
        )

        policy = iam.Policy(
            self.parent,
            f"{downloader.name}S3AccessPolicy",
            document=iam.PolicyDocument(
                statements=[
                    iam.PolicyStatement(
                        effect=iam.Effect.ALLOW,
                        actions=["s3:GetObject"],
                        resources=[
                            f"arn:{Aws.PARTITION}:s3:::{self.bucket.parameter.value_as_string}/{self.key.parameter.value_as_string}"
                        ],
                    )
                ]
            ),
        )
        policy.attach_to_role(downloader.function.role)
        Aspects.of(policy).add(ConditionalResources(self.bucket.condition))

        return downloader