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_tags(self, name: str, tags: dict[str, str]) -> None: """Put/replace bucket tags."""
[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."""