ragready
Unified text + metadata extractors for Retrieval-Augmented Generation (RAG) pipelines
Version 0.2.1 · MIT-licensed
✨ Why ragready?
A high-quality RAG knowledge base starts with clean, consistent documents—no matter where they live.
ragready streams Markdown-normalised content from:
| Source type | Iterator | Notes |
|---|---|---|
| GitHub / GitLab repos | git_repo_iter |
Auth tokens supported |
| Atlassian Confluence | confluence_iter |
Cloud & Data Center |
| Public websites | website_iter |
BFS crawl within domain |
| Local files & folders | local_iter |
PDFs, DOCX, PPTX, XLSX, CSV, images (OCR), audio, ZIPs, EPUB… |
Each iterator yields a single dataclass—DocumentRecord—so downstream code never worries about source-specific quirks.
🚀 Installation
pip install ragready
Requires Python ≥ 3.9 and a working
gitexecutable for repo extraction. The package bundlesmarkitdown[all], so DOCX/PDF/PPTX/XLSX and OCR support work out-of-the-box.
⚡ Quick start
import ragready as rr
from pprint import pprint
# Crawl python.org two links deep
records = rr.website_iter(["https://www.python.org"], crawl_depth=2)
# Collect into a DataFrame (optional)
import pandas as pd
df = pd.DataFrame(r.to_dict() for r in records)
print(df[["filename", "content"]].head())
🍱 Example snippets
1. Local files
import ragready as rr
import pandas as pd
# Optional LLM client (leave None for pure local parsing)
client = None
llm_model = None
# Run the iterator and capture records
docs = [
rec.to_dict()
for rec in rr.local_iter(
["./data"],
llm_client=client,
llm_model=llm_model
)
]
# Convert to a DataFrame (optional)
df = pd.DataFrame(docs)
print(df.head()) # quick peek
2. Git repo with private access
# 1) Imports
import os
import pandas as pd
import ragready as rr
# Optional token for private repos
token = os.getenv("GITHUB_TOKEN") # set in your shell, or leave None for public
# Pick the repos you want to scan
urls = [
"https://github.com/pandas-dev/pandas.git",
"https://gitlab.com/your-group/your-project.git",
]
# Run the iterator(s) and collect to dicts
git_records = [
rec.to_dict()
for url in urls
for rec in rr.git_repo_iter(url, token=token)
]
# Build a DataFrame (optional)
git_df = pd.DataFrame(git_records)
# Inspect or save
print("\nGit repos preview:")
print(git_df[["source", "filename", "author", "url"]].head()) # quick peek
3. Confluence (plain-text)
import os
import pandas as pd
import ragready as rr
# Stream the pages
conf_rows = [
rec.to_dict()
for rec in rr.confluence_iter(
base_url=os.getenv("CONF_URL"), # e.g. "https://your-domain.atlassian.net/wiki"
username=os.getenv("CONF_USER"), # your Atlassian email / user
api_token=os.getenv("CONFLUENCE_TOKEN"),
space_keys=["ENG", "DS"], # any number of spaces
plain_text=True, # strip HTML tags
limit=500 # max pages
)
]
# Build a DataFrame
conf_df = pd.DataFrame(conf_rows)
# 3Preview key columns
print("\nConfluence preview:")
print(conf_df[["filename", "author", "url"]].head()) # quick peek
4. Website
import pandas as pd
import ragready as rr
# Website crawl → DataFrame preview
web_rows = [
rec.to_dict()
for rec in rr.website_iter(
roots=[
"https://www.python.org", # add more starting URLs as needed
# "https://docs.rust-lang.org",
],
crawl_depth=1 # how deep to follow links (None = unlimited)
)
]
web_df = pd.DataFrame(web_rows)
print("\nWebsite preview:")
print(web_df[["source", "title", "url"]].head()) # quick peek
🛠️ Public API
| Symbol | Description |
|---|---|
DocumentRecord |
Normalised dataclass each iterator yields |
git_repo_iter |
Stream files from GitHub / GitLab repos |
confluence_iter |
Stream pages from Confluence spaces |
website_iter |
Breadth-first crawl within a domain |
local_iter |
Recursively convert local files via MarkItDown & OCR |
All iterators are lazy streams—process millions of docs without filling memory.
🔑 Environment variables
| Purpose | Variable(s) |
|---|---|
| GitHub | GITHUB_TOKEN |
| GitLab | GITLAB_TOKEN |
| Confluence | CONF_USER, CONFLUENCE_TOKEN, CONF_URL |
📄 License
MIT © 2025 Kwadwo Daddy Nyame Owusu-Boakye
🤝 Contributing
- Fork & branch off
main pip install -e .[dev]- Run
pytest+ruff checkbefore PRs
All contributions welcome — new extractors, bug fixes, or docs!
🙏 Acknowledgements
Built on the shoulders of:
- MarkItDown – universal document-to-Markdown converter
- GitPython, BeautifulSoup 4, pdfplumber, python-pptx, and the wider open-source community.
Happy extracting — your RAG pipeline will thank you! 🦾
Metadata
Release files for ragready 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ragready-0.2.1.tar.gz | 16.2 kB | Without provenance | Details for ragready-0.2.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ragready-0.2.1-py3-none-any.whl | Python 3 | none | any | Details for ragready-0.2.1-py3-none-any.whl |
Total release size: 29.6 kB
Release files / ragready-0.2.1.tar.gz
| Download URL | ragready-0.2.1.tar.gz |
|---|---|
| Size | 16.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
1d42f15c6ac42c2e813d766cd68e4c872d647bcc6852c33380f84e8dd680be5e
|
|
BLAKE2b-256 checksum How to use checksums |
c3a591cc47b2fbb7dc34be774143b689a2b8af5b76e668a0c180f77ff35ff4d0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.7
|
Release files / ragready-0.2.1-py3-none-any.whl
| Download URL | ragready-0.2.1-py3-none-any.whl |
|---|---|
| Size | 13.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
acd3ade7b2c5d33744e56137990130ee5f4e0bf926e50d546bcd465e57a4275d
|
|
BLAKE2b-256 checksum How to use checksums |
4ddf9c16867a216afd708651fc5aee1d238db9a719ca5b5f0e2c2620e196ae98
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.7
|
Security for ragready 0.2.1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.