Commit ee091da
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