platform-storage
Package: cloud_dog_storage
Standard: PS-85 (Storage Interfaces)
Status: Design complete, build-ready (v0.1.0)
Purpose
Drop-in Python library implementing the PS-85 Storage Interfaces standard. Provides a unified file/object storage abstraction with pluggable backends, consistent error handling, TLS configuration, path sanitisation, and observability.
Key Features
- 5 storage backends: Local filesystem, S3-compatible, WebDAV, FTP/FTPS, Google Drive
- Unified POSIX path model: Same
/path/to/fileaddressing regardless of backend - Config-driven backend selection: Switch from local to S3 via config change — zero code modification
- Sync + async: Sync primary API with
AsyncStorageBackendwrapper for event-loop frameworks - Security: Path traversal prevention, root boundary enforcement, credential redaction, TLS configuration
- Error taxonomy: Consistent
StorageErrorhierarchy across all backends - Factory pattern:
build_storage_backend(config)creates the right backend from config - Conformance suite: Reusable tests that validate any backend implementation
- Mock backend: In-memory
MockStorageBackendfor consumer project unit tests - FastAPI integration: Optional
Depends(get_storage_backend)helper - Config delegation: Credentials pre-resolved by
cloud_dog_config(PS-80) — no direct Vault/env reads in this package
Dependencies
- Required:
pydantic - Optional:
requests(S3, WebDAV, Google Drive),cloud_dog_config,cloud_dog_logging,fastapi
Documents
- REQUIREMENTS.md — Functional and non-functional requirements (21 FRs)
- ARCHITECTURE.md — Module layout, component design, integration patterns
- TESTS.md — Test plan, directory structure, coverage map (72 tests: 32 UT + 10 ST + 20 IT + 5 AT + 5 QT)
Quick Start
from cloud_dog_storage import build_storage_backend
from cloud_dog_storage.config.models import StorageConfig
# Via cloud_dog_config (recommended — credentials pre-resolved from Vault)
from cloud_dog_config import get_config, bind_model
config = bind_model(get_config(), "storage", StorageConfig)
storage = build_storage_backend(config)
# Or direct construction (when cloud_dog_config not installed)
config = StorageConfig(backend="local", root_path="/data/files")
storage = build_storage_backend(config)
# Use (same API for all backends)
storage.write_bytes("/reports/q1.pdf", pdf_data)
data = storage.read_bytes("/reports/q1.pdf")
entries = storage.list_dir("/reports", recursive=True)
storage.delete_path("/reports/q1.pdf")
# Async usage
from cloud_dog_storage import AsyncStorageBackend
async_storage = AsyncStorageBackend(storage)
data = await async_storage.read_bytes("/reports/q1.pdf")
Reference Implementations
Existing code in these projects informed the package design:
| Project | Storage Code | Backends |
|---|---|---|
file-mcp-server |
src/file_tools/storage/ (1,482L) |
Local, S3, WebDAV, FTP, Google Drive |
notification-agent |
src/core/storage/ (2,967L) |
Local, S3, WebDAV, FTP |
expert-agent |
src/core/multimedia/ (~900L) |
Local only |
Standards Alignment
| Standard | Alignment |
|---|---|
| PS-85 | Primary standard — Storage Interfaces |
| PS-80 | Config delegation — credentials pre-resolved by cloud_dog_config, no direct Vault reads |
| PS-40 | Structured logging, credential redaction |
| PS-90 | Path sanitisation, TLS enforcement, credential handling |
| PS-95 | Test hierarchy (UT/ST/IT/AT/QT), conformance suite |
| PS-00 | Config-driven, testable, auditable |
Licence
Apache-2.0 — Copyright (c) 2026 Cloud-Dog, Viewdeck Engineering Limited
Metadata
Release files for cloud-dog-storage 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| cloud_dog_storage-0.1.8.tar.gz | 82.2 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cloud_dog_storage-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 133.4 kB
Release files / cloud_dog_storage-0.1.8.tar.gz
| Download URL | cloud_dog_storage-0.1.8.tar.gz |
|---|---|
| Size | 82.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cf0aea281f032d6856f34b03e795c544727a36d1862f0885bdb70086fa2731f6
|
|
BLAKE2b-256 checksum How to use checksums |
3b55ecce68e789f5856a3d8221a2c248d7c98080e82f5706f6321edcc24c28b7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.14
|
Release files / cloud_dog_storage-0.1.8-py3-none-any.whl
| Download URL | cloud_dog_storage-0.1.8-py3-none-any.whl |
|---|---|
| Size | 51.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a70e016d6059fddccc0e5fcb07980e0c1bf83c428604d3ef107c500f1855d285
|
|
BLAKE2b-256 checksum How to use checksums |
b623965c3fef959d8f8930c9fa099359b31dc05175a8b08257e5b8770f47e7f9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.14
|
Security for cloud-dog-storage 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.