stapel-gdpr
GDPR compliance: staged async data export (Art. 15/20) with status polling and download, account deletion with a cancellable grace period (Art. 17), inactivity closure, retention cleanup, LegalHold (blocks closure/deletion) and ReRegistrationHash, orchestrated through an in-process GDPRProvider registry (stapel_core.gdpr.gdpr_registry) plus comm confirmation (gdpr.section.erased) for remote services.
Part of the Stapel framework — composable Django apps that deploy as a monolith or as microservices without changing module code.
Install
pip install stapel-gdpr
At a glance
| Fact | Value |
|---|---|
| Version | 0.4.1 |
| Python | >=3.11 (3.11, 3.12, 3.13, 3.14) |
| HTTP operations | 7 |
| Config axes | 1 |
| Usage surface | 14 |
| Extension points | 3 |
| Error codes | 51 |
| Fleet dependencies | stapel-core |
Documentation
capabilities.json · llms.txt (for agents)
Quick start
# settings.py
INSTALLED_APPS = [
...
'stapel_gdpr',
]
MIDDLEWARE = [
...
# After authentication: refuses every request of an account being erased,
# whatever a still-valid token claims.
'stapel_gdpr.guards.AccountClosureGuardMiddleware',
]
STAPEL_GDPR = {
# Every store holding personal data. Erasure is only ever reported
# complete when each of these returned a deletion receipt, so an owner
# missing here is a store that quietly keeps the data. `manage.py check`
# fails while this is empty.
'DATA_OWNERS': ['auth', 'profiles', {'name': 'cdn', 'kind': 'remote'}],
'DATA_OWNERS_VERSION': '2026-08-13.1',
# How the user's sessions are revoked at closure. Auto-detected when
# stapel-auth is installed; without any seam, closure is refused rather
# than performed with live tokens left behind.
'SESSION_REVOKER': 'stapel_auth.sessions.services.SessionService.revoke_all',
}
Run manage.py check after wiring: a missing or stale data-owner inventory,
hash rows written outside store_hashes, and every open escape hatch are
reported there rather than discovered in an audit.
Bus events
Emits
| user.deleted | schema | All user PII permanently deleted after grace period. Every package storing user |
| user.deletion_initiated | schema | Account closure started. 30-day grace period begins; account is deactivated. |
| user.export_ready | schema | Data export archive is ready for download. |
| user.sessions_revoked | schema | Closure revoked every session and access JTI of the user. |
License
MIT — see LICENSE.
This page is assembled by stapel-readme from docs/readme.md plus the contract artifacts in docs/. Edit the prose in docs/readme.md; the badges, facts and links above and below it are generated — do not hand-edit README.md.
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 stapel_gdpr-0.4.1.tar.gz.
File metadata
- Download URL: stapel_gdpr-0.4.1.tar.gz
- Upload date:
- Size: 88.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3c0e4e63e82156956db52c1548f5c77f20f3a92a6ba609fdd4fce61e503b1c2
|
|
| MD5 |
d519c70f432317bfd2478233d7da063b
|
|
| BLAKE2b-256 |
8ce313fb5394d08a8460ca4d43158bd0b95e13962aa8b5a91d7578ed6e4272bf
|
Provenance
The following attestation bundles were made for stapel_gdpr-0.4.1.tar.gz:
Publisher:
publish.yml on usestapel/stapel-gdpr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_gdpr-0.4.1.tar.gz -
Subject digest:
b3c0e4e63e82156956db52c1548f5c77f20f3a92a6ba609fdd4fce61e503b1c2 - Sigstore transparency entry: 2470462202
- Sigstore integration time:
-
Permalink:
usestapel/stapel-gdpr@768e4046a6c487edf729d558959e8b4d0317c6b3 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@768e4046a6c487edf729d558959e8b4d0317c6b3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file stapel_gdpr-0.4.1-py3-none-any.whl.
File metadata
- Download URL: stapel_gdpr-0.4.1-py3-none-any.whl
- Upload date:
- Size: 75.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
607395fd56683a6861e23d2eade2ff126878d58a7bc057af4cb82d0491fefa8b
|
|
| MD5 |
11d763ab9218ac59a2f65658b54234de
|
|
| BLAKE2b-256 |
2c0c88014f87d324e082bacfc58c46209a39a105b8f6fa6d633b3efdd7e90ea2
|
Provenance
The following attestation bundles were made for stapel_gdpr-0.4.1-py3-none-any.whl:
Publisher:
publish.yml on usestapel/stapel-gdpr
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
stapel_gdpr-0.4.1-py3-none-any.whl -
Subject digest:
607395fd56683a6861e23d2eade2ff126878d58a7bc057af4cb82d0491fefa8b - Sigstore transparency entry: 2470462224
- Sigstore integration time:
-
Permalink:
usestapel/stapel-gdpr@768e4046a6c487edf729d558959e8b4d0317c6b3 -
Branch / Tag:
refs/tags/v0.4.1 - Owner: https://github.com/usestapel
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@768e4046a6c487edf729d558959e8b4d0317c6b3 -
Trigger Event:
push
-
Statement type: