Metadata-Version: 2.4
Name: avaril
Version: 2.0.0
Summary: Privacy governance SDK for Python: consent management, signed process manifests and runtime enforcement, built for privacy by design.
Author: Avaril
License-Expression: ISC
Project-URL: Homepage, https://avaril.net
Project-URL: Documentation, https://docs.avaril.net
Keywords: privacy,privacy-by-design,data-protection,consent,consent-management,dpdp,dpdpa,compliance,governance
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Security
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography>=41
Requires-Dist: msgpack>=1.0
Provides-Extra: dev
Requires-Dist: pytest>=8; extra == "dev"
Dynamic: license-file

# Avaril — DPDPA consent management

Avaril is a privacy governance layer for building software that meets its
legal obligations by design. It gives teams a privacy framework that fits
into the software development lifecycle.

Client for the Avaril public SDK API (`/api/sdk/*`), authenticated with a
publishable key (`av_pk_*`). Zero dependencies (stdlib only).

```python
from avaril import AvarilClient

client = AvarilClient("av_pk_live_...")

config = client.fetch_cookie_config()
for purpose in config["consent"]["purposes"]:
    print(purpose["title"])

result = client.record_cookie_consent(
    event_id="b1f2...",
    subject_id="anonymous-subject-123",
    preferences={"analytics": True, "marketing": False},
)
print("duplicate" if result["duplicate"] else "recorded")

client.withdraw_cookie_consent(event_id="c3d4...", subject_id="anonymous-subject-123")
```



Errors are raised as `avaril.errors.AvarilError` carrying the API's
`code`/`message` and the HTTP status. All methods return the parsed JSON
response bodies as `dict`s.
