Python client for the BiblIndex API.
Project description
BiblIndex Python client
Maintainers
| Name | |
|---|---|
| Pierre Hennequart | pierre@janalis.com |
Documentation
Quick Start
make setup
make run
Installation
Clone the repository
git clone <repo-url>
cd <repo-name>
Install Python environment
This project uses a version-managed Python setup.
pyenv install $(cat .python-version)
pyenv local $(cat .python-version)
Install dependencies
This project uses a modern Python packaging tool:
uv sync
Environment variables
cp .env .env.local
Edit .env.local with your configuration.
Run the project
Using Make (recommended)
make help # List all available commands
make run
Or manually
uv run python src/example.py
Available commands
Run make help to see all available commands with descriptions:
make help
Platform Support
| OS | Support | Notes |
|---|---|---|
| macOS | ✅ | Native supported |
| Linux | ✅ | Native supported |
| Windows | ⚠️ | Use WSL or Git Bash |
Notes
- Uses pyenv for Python version management
- Uses uv for fast dependency resolution
- Makefile orchestrates setup + run steps
Recommended Setup
For the smoothest experience:
- macOS / Linux → native terminal
- Windows → WSL2 (recommended)
Use as a library in another project
Released versions are published to PyPI.
With uv
uv add biblindex-client
With pip
pip install biblindex-client
Installing an unreleased commit
To use a version that hasn't been released to PyPI yet, install directly from the Git repository (optionally pinned to a tag, branch or commit):
uv add "biblindex-client @ git+https://github.com/janalis/biblindex-client.git@v0.1.0"
Or in pyproject.toml
[project]
dependencies = [
"biblindex-client @ git+https://github.com/janalis/biblindex-client.git@v0.1.0",
]
Usage
from biblindex_client import BiblIndexClient
client = BiblIndexClient(
baseUrl="https://www.biblindex.org",
username="...",
password="...",
clientId="...",
clientSecret="...",
)
quotations = client.request("/api/quotations", {"page": 1})
Lazy fetching
API responses are automatically wrapped in lazy proxies that defer network requests until data is actually read:
LazyResource(MutableMapping): resource links (e.g./api/extracts/42,{"@id": "/api/works/1"}) embedded in responses are wrapped as lazy mappings — the linked resource is fetched only when a field is accessed.LazyCollection(MutableSequence): paginated Hydra collections and plain JSON arrays are wrapped as lazy sequences — subsequent pages are fetched on demand when iterating or indexing beyond the current page.
Hydra metadata properties (hydra:member, hydra:view, hydra:search, hydra:totalItems) are not exposed through the lazy wrappers — collections are returned directly as LazyCollection instances.
Caching ensures the same API resource is never fetched twice within a single response tree.
from biblindex_client import BiblIndexClient, LazyResource
client = BiblIndexClient(...)
collection = client.request("/api/quotations", {"page": 1})
# members is a LazyCollection — pages fetched lazily
item = collection[0] # no network call yet
print(item["@id"]) # triggers fetch of /api/quotations/1229419
Using application/json (plain JSON)
Warning: Prefer
application/ld+json(the default) whenever the API supports it. The Hydra JSON-LD format provides metadata (hydra:totalItems,hydra:view) that enables accuratelen()and proper next-page resolution viahydra:nextlinks. With plainapplication/json, total item count is unavailable and pagination falls back to incrementing?page=N, which may yield empty pages at the end.
When the API returns plain JSON arrays instead of Hydra collections, configure the accept media type:
from biblindex_client import BiblIndexClient, LazyCollection, LazyResource
client = BiblIndexClient(
baseUrl="https://www.biblindex.org",
username="...",
password="...",
clientId="...",
clientSecret="...",
accept="application/json",
)
collection = client.request("/api/quotations", {"page": 1})
# The array is wrapped in a LazyCollection — pages are fetched lazily
print(type(collection)) # <class 'LazyCollection'>
print(collection.loadedItems) # items loaded so far (page 1)
# Accessing beyond the current page triggers ?page=N
item = collection[2] # fetches /api/quotations?page=2
print(item["id"]) # reads from the fetched item
Pagination uses the ?page=N query parameter automatically — each fetch increments the page number. If the API returns an empty array the collection stops fetching further pages.
Publishing a new version
make bump-patch # or bump-minor / bump-major
This bumps the version in pyproject.toml, commits, tags (vX.Y.Z), and pushes to GitHub. The Release workflow then builds the distribution, publishes it to TestPyPI and then PyPI, and creates a GitHub Release with auto-generated release notes.
Publishing uses PyPI trusted publishing (OIDC) via uv publish — no API tokens or credentials are stored or needed locally. The TestPyPI upload acts as a smoke test that gates the real PyPI release.
Contributing
This project is open to contributions.
We welcome pull requests following the standard GitHub flow:
- Fork the repository
- Create a feature branch
- Commit your changes
- Open a pull request
Please ensure your changes are well tested and follow the existing code style.
API Modifications
If you need changes, extensions, or adjustments to the API, please contact the maintainers.
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 biblindex_client-0.2.2.tar.gz.
File metadata
- Download URL: biblindex_client-0.2.2.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","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 |
09d4c0060bb6929420b570432cd79b341231db7021f92e9b94f96a2b44893809
|
|
| MD5 |
98e48badd19a77807ef3db014ea71354
|
|
| BLAKE2b-256 |
6a16290c3b875bcc7be0a8c8f374250b563260abb6284808ce0df0a2c4a3f13e
|
File details
Details for the file biblindex_client-0.2.2-py3-none-any.whl.
File metadata
- Download URL: biblindex_client-0.2.2-py3-none-any.whl
- Upload date:
- Size: 9.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","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 |
664f81841ace0eb5aa1c5ba7e93db867ea67dc821e872c3ef76c7c4667c66970
|
|
| MD5 |
8d53bce3f1b323ef5f7dc518f4c3e9ab
|
|
| BLAKE2b-256 |
bb23805ea8d25dbf95f3800298dd43fb72121e908b2d16a0805e7e6009259f79
|