38 lines
890 B
Python
38 lines
890 B
Python
import boto3
|
|
from botocore.client import Config
|
|
from config import (
|
|
S3_ENDPOINT,
|
|
S3_REGION,
|
|
S3_ACCESS_KEY,
|
|
S3_SECRET_KEY,
|
|
)
|
|
|
|
def get_s3_client():
|
|
kwargs = {
|
|
"aws_access_key_id": S3_ACCESS_KEY,
|
|
"aws_secret_access_key": S3_SECRET_KEY,
|
|
|
|
"config": Config(signature_version="s3v4"),
|
|
}
|
|
|
|
if S3_ENDPOINT:
|
|
kwargs["endpoint_url"] = S3_ENDPOINT
|
|
kwargs["region_name"] = S3_REGION or "us-east-1"
|
|
else:
|
|
if not S3_REGION:
|
|
raise RuntimeError("AWS S3 requires S3_REGION")
|
|
kwargs["region_name"] = S3_REGION
|
|
|
|
return boto3.client("s3", **kwargs)
|
|
|
|
|
|
def generate_presigned_url(s3, bucket: str, key: str, expires: int):
|
|
return s3.generate_presigned_url(
|
|
ClientMethod="get_object",
|
|
Params={
|
|
"Bucket": bucket,
|
|
"Key": key,
|
|
},
|
|
ExpiresIn=expires,
|
|
)
|