Conversation
…667] - GitHub Action generates books.json monthly from the public GCS bucket - books.json: single flat index of all texts with download URLs per format - Example scripts: download by category, browse bucket, filter via books.json - CLAUDE.md: documents the architecture and how to download data - No auth needed — GCS bucket is public, scripts use unauthenticated APIs Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove all text content (~26GB) from the repo — data now lives in gs://sefaria-export/. Keep books.json index (19,637 texts), download scripts, and CI workflow. Update all paths to remove current/ prefix. Add tests for generate_books_json.py. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Removed MongoDB dump information from README.
Move books.json generation from 1st to 2nd of each month (6AM UTC), one day after the text-export CronJob runs on the 1st (3AM UTC). Update docs to note the schedule and manual trigger support. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add CLI script and browser-based explorer for exporting Sefaria's dictionary/lexicon data as CSV files. The problem: Dictionary entries (Jastrow, BDB, Klein) use a DictionaryNode schema and aren't included in the standard GCS text export. This PR adds tools that crawl Sefaria's /api/words/ endpoint, following next_hw linked-list pointers to enumerate every entry in a given lexicon. New files: - scripts/export_dictionaries_csv.py — CLI for bulk CSV export with resume/checkpoint support, rate limiting, HTML stripping - examples/dictionary-explorer/index.html — zero-dependency browser app with search, letter navigation, and CSV download - examples/export_dictionary_example.py — quick demo script - tests/test_export_dictionaries_csv.py — 30 unit tests Updated: README.md, CLAUDE.md with dictionary export documentation.
Code reviewFound 2 issues:
Sefaria-Export/examples/export_dictionary_example.py Lines 135 to 139 in 262e5f3
Sefaria-Export/examples/export_dictionary_example.py Lines 104 to 120 in 262e5f3 On the linked gist ( 🤖 Generated with Claude Code - If this code review was useful, please react with 👍. Otherwise, react with 👎. |
yodem
left a comment
There was a problem hiding this comment.
@smargolis Thanks for the PR!
I added some notes using Claude.
2 things from my side:
- there is a small problem with the html - Since its under our repo we might want it to be under our own design system and might go under product/ux teams. I think we should keep the html out of this scope and preserve only the cli tool/scripts. we can create a "powered-by" project for this html, you can have it on vercel for free and I would be happy to help with it.
- I didnt quite get why is there an export_dictionary_example.py? I mean isnt the example is the actual script? we can perhaps get rid of the example suffix.
I will also say that i didnt really get into the 2000+ lines but it is important for me to get this tool inside the repo.
Automated code reviewThis is an automated review (Claude), run by a Sefaria maintainer as part of a sweep through our open pull requests. A human is reading the results. @smargolis — good news: of the open PRs on this repo, this is the one that is still fully applicable and that we want. The premise checks out. We verified against The contribution is solid — 30 unit tests, rate limiting, and resume support, all touching only paths that still exist post-migration. GitHub currently reports it mergeable/clean. What's still outstanding are the two scope changes requested in the 2026-05-12 review:
One time-sensitive heads-up. We're about to reset this repository's git history — moving ~14 GB of accumulated history into a separate read-only archive repo so that a clone drops to ~25 MB. After that, this PR will no longer show a merge button, because it will have no common ancestor with the new root commit. Nothing of yours is lost either way. Your fork is untouched, and your commit Easiest way to coordinate is our developer Discord: 👉 https://sefaria.formstack.com/forms/sefaria_developer_discord_community Apologies for the four months of silence on our side — the interest in merging this is genuine. |
Reopened — this was closed automatically, not by a decisionShortly after the review above, we reset this repository's git history, moving ~14 GB into a read-only archive. That force-push auto-closed this PR. We did not expect it to: we believed GitHub only auto-closes a pull request when its base branch is deleted, and we rewrote To be unambiguous: we still want this contribution. Nothing about the closure was a judgement on the work. One practical consequence — the diff above is now meaningless, because your branch has no common ancestor with the new root commit (
Either way the two asks from the earlier review still stand: drop the browser explorer from this PR (we'd like to host it separately as a "powered-by" project), and fold away the redundant example script. 👉 https://sefaria.formstack.com/forms/sefaria_developer_discord_community |
Correction to the message aboveI said I had reopened this PR. I hadn't — the reopen was attempted and GitHub refused it: GitHub won't reopen a pull request whose merge base no longer exists in the base branch, which is exactly what the history reset removed. So this thread stays closed, and that is a platform limitation rather than a choice. Sorry for the incorrect statement — I should have checked the result before describing it as done. Everything else in that message stands, and the important part is unchanged: we still want this contribution, and none of your work is affected. Your commit The practical path is now a fresh pull request against the new git remote add upstream https://github.com/Sefaria/Sefaria-Export.git
git fetch upstream
git checkout -b dictionary-csv-export-v2 upstream/master
# re-apply your changes, minus the browser explorer and the redundant example scriptOr say the word and we'll cherry-pick your commit across ourselves with authorship preserved, and open the PR for you. 👉 https://sefaria.formstack.com/forms/sefaria_developer_discord_community |
|
Hi @smargolis — we'd like this contribution back, please. We had to make some changes to this repository (moving ~14 GB of git history into a read-only archive so a clone is small), and that's what closed your PR. Could you open a fresh pull request against the new Your commit git remote add upstream https://github.com/Sefaria/Sefaria-Export.git
git fetch upstream
git checkout -b dictionary-csv-export-v2 upstream/master
# re-apply your changes, minus the browser explorer and the redundant example scriptIf you'd rather not do the rebasing, say so and we'll cherry-pick your commit across ourselves with your authorship preserved. Please also join our developers Discord so we can talk about your PRs properly rather than leaving them sitting: 👉 https://sefaria.formstack.com/forms/sefaria_developer_discord_community Thank you — and sorry for the four months of silence before this. |
Adds CLI script and browser-based explorer for exporting Sefaria's dictionary/lexicon data (Jastrow, BDB, Klein) as structured CSV files.
Dictionary entries use a DictionaryNode schema and aren't included in the standard GCS text export. These tools crawl /api/words/ following next_hw linked-list pointers to enumerate every entry.
New files: