""" Singleton AWS session class. """ from boto3.session import Session as BaseSession from boto3.s3 import inject as boto3_s3_inject from common.src.logger import new_logger logger = new_logger(__name__) class Session(BaseSession): """Singleton boto3 session with safe S3 injection.""" _instance: BaseSession = None def __new__(cls, *args, **kwargs): """Create a new instance of the Session class.""" if cls._instance is None: instance = super().__new__(cls) instance._initialize(*args, **kwargs) # Inject S3 methods once. This prevents issues with # S3 upload_file and download_file methods, specifically when # injecting them multiple times. s3_cls = instance.client("s3").__class__ if not hasattr(s3_cls, "upload_file"): boto3_s3_inject.inject_s3_transfer_methods(s3_cls) cls._instance = instance return cls._instance def _initialize(self, *args, **kwargs): super().__init__(*args, **kwargs) logger.debug("AWS Singleton Session created.")