import boto3 import requests from vendor_image_caching import config class Client: def __init__(self): self.session = boto3.Session(region_name=config.AWS_DEFAULT_REGION) self.s3_resource = self.session.resource("s3") def upload_image(self, url: str, s3_key: str) -> str: """Upload image to S3 bucket. Args: url: Image URL. s3_key: Image name in S3. logger: Logger instance. Returns: New image URL in local S3. """ request = requests.get(url, stream=True, timeout=config.PULLING_TIMEOUT) bucket = self.s3_resource.Bucket(config.AWS_S3_BUCKET_NAME) bucket.upload_fileobj(request.raw, s3_key, ExtraArgs={"ContentType": "image/jpeg"}) return f"{config.AWS_IMAGE_STORAGE_BASE_URL}/{s3_key}"