Source code for dxaws_s3.providers.base
"""Provider interfaces for dxaws-s3.
Providers translate between AWS APIs (or other backends) and dxaws-s3 models.
This file defines the stable provider contract used by the manager/executor.
"""
from __future__ import annotations
from typing import Protocol
from ..models import S3BucketCurrent, S3BucketDesired, S3BucketResult
[docs]
class S3Provider(Protocol):
# --- read --------------------------------------------------------------
[docs]
def get_current(self, name: str) -> S3BucketCurrent:
"""Return the current observed state of the bucket."""
# --- create / mutate ---------------------------------------------------
[docs]
def create_bucket(self, desired: S3BucketDesired) -> None:
"""Create the bucket."""
[docs]
def put_public_access_block(self, name: str, enabled: bool) -> None:
"""Configure the bucket public access block."""
[docs]
def put_encryption(self, name: str, encryption: str, kms_key_arn: str | None) -> None:
"""Configure default bucket encryption."""
[docs]
def put_versioning(self, name: str, enabled: bool) -> None:
"""Configure bucket versioning."""
[docs]
def put_bucket_policy(self, name: str, policy_json: str) -> None:
"""Put/replace the bucket policy."""
# --- destroy / cleanup -------------------------------------------------
[docs]
def delete_all_objects(self, name: str) -> None:
"""Delete all objects (and versions, if present) from the bucket."""
[docs]
def delete_bucket(self, name: str) -> None:
"""Delete the bucket (must be empty first)."""
[docs]
def destroy_bucket(self, name: str) -> None:
"""Best-effort bucket destroy: empty then delete."""
# --- outputs -----------------------------------------------------------
[docs]
def get_outputs(self, name: str) -> S3BucketResult:
"""Return outputs for a bucket that exists."""