Add public repository interfaces and subclassable adapter CRUD API. #11

Merged
brian merged 3 commits from cursor/public-repository-api into main 2026-06-28 20:05:16 +02:00
2 changed files with 24 additions and 17 deletions
Showing only changes of commit c5169df10d - Show all commits
+1 -3
View File
@@ -39,6 +39,4 @@ jobs:
run: uv run pyupgrade --py313-plus $(git ls-files '*.py') && git diff --exit-code run: uv run pyupgrade --py313-plus $(git ls-files '*.py') && git diff --exit-code
- name: Prettier format - name: Prettier format
run: | run: uv run pre-commit run prettier --all-files
npm install --save-dev --save-exact prettier
npx prettier --check .
+23 -14
View File
@@ -6,11 +6,11 @@ Subclass an adapter in your own repository to add domain-specific methods while
## Architecture ## Architecture
| Layer | Responsibility | | Layer | Responsibility |
|-------|----------------| | ---------------- | ----------------------------------------------------------------- |
| **Interfaces** | Abstract contracts for connection, context, and CRUD | | **Interfaces** | Abstract contracts for connection, context, and CRUD |
| **Adapters** | Technology-specific base classes (`RedisAdapter`, `MinioAdapter`) | | **Adapters** | Technology-specific base classes (`RedisAdapter`, `MinioAdapter`) |
| **Your project** | Subclass an adapter and add domain methods | | **Your project** | Subclass an adapter and add domain methods |
## Optional dependencies ## Optional dependencies
@@ -26,18 +26,18 @@ uv add python-repositories[redis,minio]
Requires Redis with the RedisJSON module (e.g. redis-stack). Requires Redis with the RedisJSON module (e.g. redis-stack).
| Environment variable | Description | | Environment variable | Description |
|---------------------|-------------| | -------------------- | ---------------------------------------------------- |
| `REDIS_URI` | Redis connection URL (e.g. `redis://localhost:6379`) | | `REDIS_URI` | Redis connection URL (e.g. `redis://localhost:6379`) |
### MinIO (`ObjectRepositoryInterface`) ### MinIO (`ObjectRepositoryInterface`)
| Environment variable | Description | | Environment variable | Description |
|---------------------|-------------| | -------------------- | ------------------------------------------- |
| `MINIO_ENDPOINT` | MinIO server endpoint | | `MINIO_ENDPOINT` | MinIO server endpoint |
| `MINIO_ACCESS_KEY` | Access key | | `MINIO_ACCESS_KEY` | Access key |
| `MINIO_SECRET_KEY` | Secret key | | `MINIO_SECRET_KEY` | Secret key |
| `MINIO_BUCKET` | Bucket name (created on connect if missing) | | `MINIO_BUCKET` | Bucket name (created on connect if missing) |
## Quick start ## Quick start
@@ -99,7 +99,16 @@ from python_repositories import (
```bash ```bash
uv sync --all-extras uv sync --all-extras
uv run pre-commit install # once per clone — runs hooks on git commit
uv run pytest tests/integration/ -v uv run pytest tests/integration/ -v
``` ```
`pre-commit` is included in the dev dependency group. `uv sync` installs the CLI, but git does not run hooks until you install them with `pre-commit install` (one time per clone). After that, commits run the checks defined in [`.pre-commit-config.yaml`](.pre-commit-config.yaml) (ruff, mypy, pyupgrade, prettier, and general file hygiene).
To run all hooks manually without committing:
```bash
uv run pre-commit run --all-files
```
Integration tests require Docker (testcontainers). Integration tests require Docker (testcontainers).