Commit ee091da

benny-dou <60535774+benny-dou@users.noreply.github.com>
2026-01-12 01:28:37
feat(database): add function to check if key exists in Cloudflare R2
1 parent 9ad1598
Changed files (1)
src
database
src/database/r2.py
@@ -189,3 +189,31 @@ async def del_cf_r2(
                 logger.success(f"DEL CF-R2 for key={key}")
         except Exception as e:
             logger.warning(f"DEL CF-R2 failed for key={key}: {e}")
+
+
+async def key_exist_cf_r2(
+    key: str,
+    bucket_name: str = DB.CF_R2_BUCKET_NAME,
+    account_id: str = DB.CF_ACCOUNT_ID,
+    aws_access_key_id: str = DB.CF_R2_ACCESS_KEY_ID,
+    aws_secret_access_key: str = DB.CF_R2_SECRET_ACCESS_KEY,
+    *,
+    enabled: bool = DB.CF_R2_ENABLED,
+    silent: bool = False,
+) -> bool:
+    """Check if key exists in Cloudflare R2."""
+    if not all([enabled, bucket_name, account_id, aws_access_key_id, aws_secret_access_key]):
+        return False
+    async with Session().client(
+        service_name="s3",
+        endpoint_url=f"https://{account_id}.r2.cloudflarestorage.com",
+        aws_access_key_id=aws_access_key_id,
+        aws_secret_access_key=aws_secret_access_key,
+        region_name="auto",
+    ) as s3:  # type: ignore
+        try:
+            await s3.head_object(Bucket=bucket_name, Key=key)
+        except Exception:
+            if not silent:
+                logger.warning(f"`{key}` is not exist in CF-R2")
+    return False