Metadata-Version: 2.5
Name: airprompter-datastore-postgres
Version: 0.4.1
Summary: The AirPrompter release datastore over one PostgreSQL table: a KvStore with INSERT … ON CONFLICT and versioned UPDATEs, for kv_release_datastore. Bring your own driver (psycopg 3, psycopg2, a psycopg_pool).
Project-URL: Homepage, https://github.com/airprompter/airprompter-agent-sdk
Project-URL: Source, https://github.com/airprompter/airprompter-agent-sdk/tree/main/sdk-python/packages/datastore-postgres
Project-URL: Protocol, https://github.com/airprompter/airprompter-agent-sdk/blob/main/protocol/datastore-format.md
Project-URL: Changelog, https://github.com/airprompter/airprompter-agent-sdk/blob/main/CHANGELOG.md
Project-URL: Issues, https://github.com/airprompter/airprompter-agent-sdk/issues
Author: AirPrompter
License-Expression: BSD-3-Clause
License-File: LICENSE
Keywords: agent,airprompter,datastore,llm,postgres,postgresql,prompts
Classifier: Development Status :: 3 - Alpha
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 :: Software Development :: Libraries
Requires-Python: >=3.10
Requires-Dist: airprompter-agent-sync==0.4.1
Provides-Extra: psycopg
Requires-Dist: psycopg>=3.1; extra == 'psycopg'
Provides-Extra: psycopg2
Requires-Dist: psycopg2-binary>=2.9; extra == 'psycopg2'
Description-Content-Type: text/markdown

# airprompter-datastore-postgres

The AirPrompter release datastore over one PostgreSQL table: a `KvStore` for
`kv_release_datastore` (`airprompter-agent-sync`). The puller writes sealed
releases through it; every runtime hydrates from it
([docs/datastore.md](https://github.com/airprompter/airprompter-agent-sdk/blob/main/docs/datastore.md)).
The table is the one `@airprompter/datastore-postgres` uses, so Python and
TypeScript share it.

```python
import psycopg
from airprompter_agent import kv_release_datastore
from airprompter_datastore_postgres import postgres_kv_store

kv = postgres_kv_store(connection=psycopg.connect(os.environ["DATABASE_URL"], autocommit=True))
kv.ensure_schema()   # or postgres_kv_schema() in your migrations
releases = kv_release_datastore(kv)
```

- `connection=` a DB-API connection (psycopg 3 or psycopg2; operations take
  turns on it) or `pool=` a `psycopg_pool.ConnectionPool`.
- `INSERT … ON CONFLICT DO NOTHING` and `UPDATE … WHERE version = %s`: no
  transaction or lock is ever held across calls. Postgres 11+.
- Prove it against your database: `check_kv_store(kv)` → `KvStoreReport(ok, passed, failures)`.
