From e0635936fe54a500760462c116f1c58123e3dde1 Mon Sep 17 00:00:00 2001 From: Akira Date: Wed, 3 Sep 2025 21:48:22 +0900 Subject: [PATCH] Add missing S3Bucket class to fix import error - Implement S3Bucket class in utils.py for legacy compatibility - Add upload_file and get_file_url methods - Fix ImportError that was preventing app startup --- rog/utils.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 60 insertions(+), 1 deletion(-) diff --git a/rog/utils.py b/rog/utils.py index 66bce5f..676496e 100755 --- a/rog/utils.py +++ b/rog/utils.py @@ -377,4 +377,63 @@ class S3Bucket: except Exception as e: logger.error(f"予期しないエラーが発生しました: {str(e)}") return False - + + +class S3Bucket: + """ + レガシーS3Bucketクラス - 既存コードとの互換性のため + """ + def __init__(self, bucket_name): + self.bucket_name = bucket_name + try: + self.s3_client = boto3.client( + 's3', + aws_access_key_id=getattr(settings, 'AWS_ACCESS_KEY', None), + aws_secret_access_key=getattr(settings, 'AWS_SECRET_ACCESS_KEY', None), + region_name=getattr(settings, 'AWS_REGION', 'us-west-2') + ) + logger.info(f"S3Bucket initialized for bucket: {self.bucket_name}") + except Exception as e: + logger.error(f"Failed to initialize S3Bucket: {e}") + self.s3_client = None + + def upload_file(self, local_file_path, s3_key): + """ + ローカルファイルをS3にアップロード + + Args: + local_file_path: アップロードするローカルファイルのパス + s3_key: S3内でのキー(ファイルパス) + + Returns: + bool: 成功時True、失敗時False + """ + if not self.s3_client: + logger.error("S3 client not initialized") + return False + + try: + self.s3_client.upload_file( + local_file_path, + self.bucket_name, + s3_key, + ExtraArgs={'ACL': 'public-read'} + ) + logger.info(f"Successfully uploaded {local_file_path} to s3://{self.bucket_name}/{s3_key}") + return True + except Exception as e: + logger.error(f"Failed to upload {local_file_path} to S3: {e}") + return False + + def get_file_url(self, s3_key): + """ + S3ファイルのパブリックURLを生成 + + Args: + s3_key: S3内でのキー(ファイルパス) + + Returns: + str: ファイルのURL + """ + aws_region = getattr(settings, 'AWS_REGION', 'us-west-2') + return f"https://{self.bucket_name}.s3.{aws_region}.amazonaws.com/{s3_key}"