
ThunderDots — DTS client for documentary corpora
DTS scrapping, TEI fragmentation, metadata filtering, validation, and export pipelines.
Overview
ThunderDots is a Python client for DTS (Distributed Text Services) endpoints, initially built for DoTS.
It helps you move from a remote DTS API to structured Python objects and JSON records that can feed indexing pipelines, including full-text search, RAG/vector databases, and corpus-analysis workflows.
ThunderDots focuses on practical documentary workflows: crawling DTS collections, fetching TEI/XML resources, extracting reusable text fragments, selecting metadata, validating outputs, and exporting data to downstream search or indexing systems.
What ThunderDots does
ThunderDots can:
- walk DTS collections and subcollections;
- fetch resources and TEI/XML documents;
- extract text fragments from full documents, DTS navigation, or custom TEI XPath rules;
- preserve or filter Dublin Core and extension metadata;
- enrich temporal metadata such as dates and coverage ranges;
- validate generated outputs with JSON Schema;
- transform DTS resources into Pandas/Polars DataFrames;
- export records to indexing pipelines such as Elasticsearch or Qdrant-compatible formats;
- cache fetched corpora as JSON and CSV;
- run synchronous or asynchronous workflows.
Installation
With uv
uv add thunderdots
With pip
pip install thunderdots
Notebook (Jupyter) support
notebook is not installed by default. Since Jupyter is only needed to run
the documentation notebooks, it is shipped as an optional extra. Install it
with:
# uv
uv add thunderdots[docs]
# pip
pip install thunderdots[docs]
For development
git clone https://github.com/chartes/thunderdots.git
cd thunderdots
uv venv
source .venv/bin/activate
uv sync --all-extras --dev
or with pip
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
Minimal example
from thunderdots import ThunderDots
td = ThunderDots(
endpoint_dts="https://dots.chartes.psl.eu/api/dts",
collection_params={"collection_id": "ENCPOS_1900"},
resource_params={"fragment_mode": "document"},
)
td.fetch()
results = td.results()
print(td.stats())
Development
Run tests
pytest
Online DTS tests are opt-in:
RUN_NETWORK_TESTS=1 pytest
Run Ruff (linter, format)
ruff format --check
ruff check
Build the documentation
mkdocs build --strict -f mkdocs/mkdocs.yml
Create a new PyPI release
Check the release checklist for details.
License
ThunderDots is distributed under the MIT License.
Citation
If you use ThunderDots in academic work, please cite it as:
@software{terriel_thunderdots_2026,
author = {Terriel, Lucas},
title = {ThunderDots},
year = {2026},
publisher = {GitHub},
institution = {{École nationale des chartes}},
url = {https://github.com/dots-suite/thunderdots},
note = {Python client for Distributed Text Services (DTS) via DoTS}
}
You can also use the repository metadata from CITATION.cff.
Metadata
Release files for thunderdots 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| thunderdots-0.1.7.tar.gz | 1.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| thunderdots-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.4 MB
Release files / thunderdots-0.1.7.tar.gz
| Download URL | thunderdots-0.1.7.tar.gz |
|---|---|
| Size | 1.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
cac21742e39c7f690fa7ec797b591da1a582103acc42c665b553f935ab44c1bf
|
|
BLAKE2b-256 checksum How to use checksums |
6937935db2001b96000024f37a06e1252c8c1769e3d34b931257a22e2f21b364
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / thunderdots-0.1.7-py3-none-any.whl
| Download URL | thunderdots-0.1.7-py3-none-any.whl |
|---|---|
| Size | 53.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
12362ffce0ae6c99010954abac2c8e9519bb324d7af5a4494e6d2e3a76c3d8f2
|
|
BLAKE2b-256 checksum How to use checksums |
81cf91027f19940a3effa137377ee76e048989314dc9da92500c45f5a2fc642a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log