Server implementation for the Wallet Attached Storage specification
Project description
Wallet Attached Storage Server
Python server for the Wallet Attached Storage specification, built with FastAPI.
Installation
pip install wallet-attached-storage-server
Usage
# Start the server
uvicorn was_server:app --port 8080
# Or with auto-reload for development
uvicorn was_server:app --reload --port 8080
The server exposes the full WAS API at the root path. Clients authenticate with Cavage draft-12 HTTP Signatures using Ed25519 did:key identifiers.
API
Spaces
| Method | Path | Auth | Description |
|---|---|---|---|
PUT |
/space/{id} |
Yes | Create or update a space |
GET |
/space/{id} |
Yes | Read space metadata |
DELETE |
/space/{id} |
Yes | Delete space and all its resources |
POST |
/spaces/ |
Yes | Create a space (server-generated ID) |
GET |
/spaces/ |
Yes | List spaces you control |
Resources
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/space/{id}/{path} |
No | Read a resource |
PUT |
/space/{id}/{path} |
Yes | Create or update |
POST |
/space/{id}/{path} |
Yes | Create (returns 201) |
DELETE |
/space/{id}/{path} |
Yes | Delete (idempotent) |
Authorization
Each space has a controller field set to a did:key DID. All write operations and space reads require an HTTP Signature whose signing key matches the space controller. Resource reads are unsigned (public).
Storage Backend
The server ships with an in-memory storage backend. The storage layer is defined as a Python protocol, so you can swap in a file, database, or S3 backend by implementing StorageBackend.
Development
uv run ruff check
uv run flake8 src tests
uv run bandit -r src
uv run bandit -r tests -s B101
uv run safety scan
uv run -m pytest -vv --cov=src --cov-report=term
CI runs all of the above on every push and PR (Python 3.11–3.14). To publish a release, tag and push:
git tag -sm "Initial release." "v0.1.0"
git push
Acceptance Tests
The companion client library includes a live test suite that runs against localhost:8080:
# Terminal 1
uv run uvicorn was_server:app --port 8080
# Terminal 2 (in the client repo)
uv run -m pytest tests/test_live.py -vv
References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wallet_attached_storage_server-0.1.0.tar.gz.
File metadata
- Download URL: wallet_attached_storage_server-0.1.0.tar.gz
- Upload date:
- Size: 94.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
163e953e3d72965df100dcdad2a72e7a39baf5add6778314ebab91c5f93a111d
|
|
| MD5 |
c95c183197212e5735ef53af0c3c9d33
|
|
| BLAKE2b-256 |
9babbe1f4e7a0c24dacc682d910eb153a85e3bf165ee5b22b4c13a0a5c703297
|
File details
Details for the file wallet_attached_storage_server-0.1.0-py3-none-any.whl.
File metadata
- Download URL: wallet_attached_storage_server-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
41cd6fc0a950b4c5c9c031e20bf229b393efd15703f879d37717350951ece74a
|
|
| MD5 |
280e2868c11120a261e7c89dd9e807fc
|
|
| BLAKE2b-256 |
7f2eddf0f5c5bea5519ab752c858cbea3f02012bc46d75e1fe2f9145b55283bd
|