s3.py

1.4 kB · python · 47 lines

1import boto32import json3import time4from catalog.config import CARLOMITCHENER_BUCKET, DELAY5from catalog.helpers import product_path6from env import load_json78s3 = boto3.client("s3")910PREFIX = "data/products/"1112def product_key(id: int) -> str:13    return f"{PREFIX}{id}.json"1415def put_json(key: str, data) -> None:16    s3.put_object(17        Bucket=CARLOMITCHENER_BUCKET,18        Key=key,19        Body=json.dumps(data),20        ContentType="application/json",21    )2223def upload_products(ids: list[int]) -> None:24    print(f"Uploading {len(ids)} products to {CARLOMITCHENER_BUCKET}/{PREFIX}")25    for id in ids:26        key = product_key(id)27        put_json(key, load_json(product_path(id)))28        print(f"Uploaded: {key}")29        time.sleep(DELAY)30    print(f"Uploaded {len(ids)} products")3132def list_products() -> list[str]:33    keys = []34    paginator = s3.get_paginator("list_objects_v2")35    for page in paginator.paginate(Bucket=CARLOMITCHENER_BUCKET, Prefix=PREFIX):36        keys.extend(obj["Key"] for obj in page.get("Contents", []))37    return keys3839def delete_products() -> None:40    keys = list_products()41    if not keys:42        print(f"Nothing under {CARLOMITCHENER_BUCKET}/{PREFIX}")43        return44    for i in range(0, len(keys), 1000):45        batch = [{"Key": key} for key in keys[i:i + 1000]]46        s3.delete_objects(Bucket=CARLOMITCHENER_BUCKET, Delete={"Objects": batch})47    print(f"Deleted {len(keys)} objects under {CARLOMITCHENER_BUCKET}/{PREFIX}")