biblia-cli-project 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ YVP_APP_KEY="Your API key"
@@ -0,0 +1,31 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ - "feature/**"
8
+ pull_request:
9
+
10
+ jobs:
11
+ test:
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - name: Checkout
16
+ uses: actions/checkout@v4
17
+
18
+ - name: Install uv
19
+ uses: astral-sh/setup-uv@v3
20
+
21
+ - name: Install dependencies
22
+ run: uv sync
23
+
24
+ - name: Lint
25
+ run: uv run ruff check .
26
+
27
+ - name: Tests
28
+ run: uv run pytest
29
+
30
+ - name: Build
31
+ run: uv build
@@ -0,0 +1,15 @@
1
+ # Python-generated files
2
+ __pycache__/
3
+ *.py[oc]
4
+ build/
5
+ dist/
6
+ wheels/
7
+ *.egg-info
8
+ GUIA_INTERNA.md
9
+
10
+ # Virtual environments
11
+ .venv
12
+
13
+ # config files
14
+ .env
15
+ *.env.*
@@ -0,0 +1 @@
1
+ 3.12
@@ -0,0 +1,259 @@
1
+ Metadata-Version: 2.4
2
+ Name: biblia-cli-project
3
+ Version: 0.1.0
4
+ Summary: CLI para consultar versículos bíblicos desde JSON y APIs
5
+ Requires-Python: >=3.12
6
+ Requires-Dist: httpx>=0.28.1
7
+ Requires-Dist: platformdirs>=4.9.4
8
+ Requires-Dist: python-dotenv>=1.2.2
9
+ Requires-Dist: rich>=14.3.3
10
+ Description-Content-Type: text/markdown
11
+
12
+ # 📖 Biblia CLI
13
+
14
+ Una herramienta de línea de comandos rápida y basada en Python para buscar y recuperar versículos bíblicos desde archivos JSON locales y APIs externas.
15
+
16
+ ## ¿Qué hace la CLI?
17
+
18
+ Biblia CLI permite consultar versículos bíblicos de manera eficiente. Soporta búsqueda por referencia (como "Exodo 33:7"), rangos de versículos, búsqueda de texto completo y puede obtener datos desde fuentes locales (archivos JSON) o APIs remotas (como YouVersion).
19
+
20
+ Características principales:
21
+ - **Búsqueda por referencia**: Encuentra versículos específicos o rangos.
22
+ - **Búsqueda de texto**: Busca palabras o frases en toda la Biblia usando un índice invertido.
23
+ - **Fuentes múltiples**: Soporte para datos locales y APIs externas.
24
+ - **Interfaz rica**: Salida formateada con números de versículo en superíndice.
25
+ - **Configurable**: Selecciona versiones bíblicas y proveedores.
26
+
27
+ ## Instalación
28
+
29
+ ### Requisitos previos
30
+ - Python 3.12+
31
+ - [uv](https://docs.astral.sh/uv/) (gestor de paquetes Python)
32
+
33
+ ### Pasos de instalación
34
+
35
+ 1. Clona el repositorio:
36
+ ```bash
37
+ git clone https://github.com/yourusername/biblia-cli.git
38
+ cd biblia-cli
39
+ ```
40
+
41
+ 2. Crea y activa un entorno virtual:
42
+ ```bash
43
+ uv venv
44
+ # En Windows:
45
+ .venv\Scripts\activate
46
+ # En Unix/Linux/macOS:
47
+ source .venv/bin/activate
48
+ ```
49
+
50
+ 3. Instala las dependencias:
51
+ ```bash
52
+ uv sync
53
+ ```
54
+
55
+ 4. Construye e instala el paquete (opcional para desarrollo):
56
+ ```bash
57
+ uv build
58
+ uv run pip install --force-reinstall dist/*.whl
59
+ ```
60
+
61
+ ## Configuración de .env
62
+
63
+ Para usar la API de YouVersion, necesitas configurar una clave de API:
64
+
65
+ 1. Copia el archivo de ejemplo:
66
+ ```bash
67
+ cp .env_example .env
68
+ ```
69
+
70
+ 2. Edita `.env` y agrega tu clave de API de YouVersion:
71
+ ```
72
+ YVP_APP_KEY="tu_clave_de_api_aqui"
73
+ ```
74
+
75
+ > **Nota**: La clave de API es necesaria solo si planeas usar fuentes remotas. Para uso local, no es requerida.
76
+
77
+ ## Comandos principales
78
+
79
+ ### Listar versiones disponibles
80
+ ```bash
81
+ biblia versions
82
+ ```
83
+ Lista todas las versiones bíblicas disponibles en español.
84
+
85
+ ### Seleccionar versión activa
86
+ ```bash
87
+ biblia use RV1960
88
+ ```
89
+ Configura la versión bíblica activa para consultas con API.
90
+
91
+ ### Buscar por referencia
92
+ ```bash
93
+ biblia ref "Exodo 33:7"
94
+ ```
95
+ Busca un versículo específico.
96
+
97
+ ### Buscar rangos de versículos
98
+ ```bash
99
+ biblia ref "Exodo 33:7,10"
100
+ ```
101
+ Busca un rango de versículos consecutivos.
102
+
103
+ ### Búsqueda de texto
104
+ ```bash
105
+ biblia buscar "amor"
106
+ ```
107
+ Busca una palabra o frase en toda la Biblia.
108
+
109
+ ### Limitar resultados de búsqueda
110
+ ```bash
111
+ biblia buscar "amor" --limit 5
112
+ ```
113
+ Limita el número de resultados mostrados.
114
+
115
+ ### Mostrar texto completo en búsquedas
116
+ ```bash
117
+ biblia buscar "amor" --show
118
+ ```
119
+ Muestra el texto completo de los versículos en los resultados.
120
+
121
+ ### Mostrar versión
122
+ ```bash
123
+ biblia --version
124
+ ```
125
+ Muestra la versión del CLI.
126
+
127
+ ## Ejemplo con fuente local
128
+
129
+ Para usar datos locales (archivos JSON), especifica `--source local`:
130
+
131
+ ```bash
132
+ biblia ref "Exodo 33:7" --source local
133
+ ```
134
+
135
+ Esto buscará en los archivos JSON locales en el directorio `data/`.
136
+
137
+ ## Ejemplo con API
138
+
139
+ Para usar una API externa (requiere configuración previa):
140
+
141
+ 1. Selecciona una versión:
142
+ ```bash
143
+ biblia use RV1960
144
+ ```
145
+
146
+ 2. Busca con fuente API:
147
+ ```bash
148
+ biblia ref "Exodo 33:7" --source api
149
+ ```
150
+
151
+ O usa `auto` para que el CLI elija automáticamente (local si disponible, API si no):
152
+ ```bash
153
+ biblia ref "Exodo 33:7" --source auto
154
+ ```
155
+
156
+ ## Estructura del proyecto
157
+
158
+ ```
159
+ biblia-cli/
160
+ ├─ biblia/ # Paquete principal
161
+ │ ├─ cli.py # Interfaz de línea de comandos
162
+ │ ├─ bible.py # Lógica de búsqueda de versículos
163
+ │ ├─ search.py # Búsqueda de texto
164
+ │ ├─ indexer.py # Constructor de índice invertido
165
+ │ ├─ refs.py # Analizador de referencias
166
+ │ ├─ loader.py # Cargador de datos JSON
167
+ │ ├─ resolver.py # Resolución de fuentes
168
+ │ ├─ config.py # Configuración de API
169
+ │ ├─ config_store.py # Almacenamiento de configuración
170
+ │ ├─ models.py # Modelos de datos
171
+ │ ├─ utils.py # Utilidades
172
+ │ └─ providers/ # Proveedores de datos
173
+ │ └─ youversion.py # Cliente de YouVersion API
174
+ ├─ data/ # Datos bíblicos (archivos JSON)
175
+ │ ├─ exodo.json # Libro de Éxodo
176
+ │ └─ index.json # Índice invertido
177
+ ├─ tests/ # Pruebas
178
+ ├─ pyproject.toml # Configuración del proyecto
179
+ ├─ .env_example # Ejemplo de configuración
180
+ └─ README.md # Este archivo
181
+ ```
182
+
183
+ ## Cómo funciona
184
+
185
+ 1. **Almacenamiento de datos**: El contenido bíblico se almacena en formato JSON, un archivo por libro.
186
+ 2. **Indexación**: Un índice invertido mapea palabras a versículos para búsquedas rápidas.
187
+ 3. **Análisis**: Un analizador personalizado maneja nombres de libros con espacios (ej. "1 Corintios").
188
+ 4. **Formateo**: Los números de versículo se muestran en superíndice para mejor legibilidad.
189
+ 5. **Proveedores**: Soporte para múltiples fuentes de datos (local y APIs).
190
+
191
+ ## Agregar más libros
192
+
193
+ 1. Crea un nuevo archivo JSON en `data/` siguiendo este formato:
194
+ ```json
195
+ {
196
+ "libro": "Nombre del Libro",
197
+ "capitulos": [
198
+ {
199
+ "capitulo": 1,
200
+ "versiculos": [
201
+ {"versiculo": 1, "texto": "Texto del versículo 1"},
202
+ {"versiculo": 2, "texto": "Texto del versículo 2"}
203
+ ]
204
+ }
205
+ ]
206
+ }
207
+ ```
208
+
209
+ 2. Actualiza el índice ejecutando el indexador.
210
+
211
+ ## Contribuir
212
+
213
+ ¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.
214
+
215
+ ## Licencia
216
+
217
+ Este proyecto está bajo la Licencia MIT.
218
+ "abreviaturas": ["Abr"],
219
+ "capitulos": {
220
+ "1": {
221
+ "1": "Verse text here...",
222
+ "2": "Another verse..."
223
+ }
224
+ }
225
+ }
226
+ ```
227
+
228
+ 2. Rebuild the index to include the new book:
229
+ ```bash
230
+ python -m biblia.indexer
231
+ ```
232
+
233
+ ## Development
234
+
235
+ Install development dependencies:
236
+ ```bash
237
+ uv add --dev pytest
238
+ ```
239
+
240
+ Run tests:
241
+ ```bash
242
+ uv run pytest
243
+ ```
244
+
245
+ ## Future Improvements
246
+
247
+ - Full chapter lookup
248
+ - Abbreviation support (e.g., `Jn 3:16`)
249
+ - REST API
250
+ - Rich terminal output formatting
251
+ - PyPI publication
252
+
253
+ ## License
254
+
255
+ MIT
256
+
257
+ ## Contributing
258
+
259
+ Contributions are welcome! Feel free to open issues or submit pull requests.
@@ -0,0 +1,248 @@
1
+ # 📖 Biblia CLI
2
+
3
+ Una herramienta de línea de comandos rápida y basada en Python para buscar y recuperar versículos bíblicos desde archivos JSON locales y APIs externas.
4
+
5
+ ## ¿Qué hace la CLI?
6
+
7
+ Biblia CLI permite consultar versículos bíblicos de manera eficiente. Soporta búsqueda por referencia (como "Exodo 33:7"), rangos de versículos, búsqueda de texto completo y puede obtener datos desde fuentes locales (archivos JSON) o APIs remotas (como YouVersion).
8
+
9
+ Características principales:
10
+ - **Búsqueda por referencia**: Encuentra versículos específicos o rangos.
11
+ - **Búsqueda de texto**: Busca palabras o frases en toda la Biblia usando un índice invertido.
12
+ - **Fuentes múltiples**: Soporte para datos locales y APIs externas.
13
+ - **Interfaz rica**: Salida formateada con números de versículo en superíndice.
14
+ - **Configurable**: Selecciona versiones bíblicas y proveedores.
15
+
16
+ ## Instalación
17
+
18
+ ### Requisitos previos
19
+ - Python 3.12+
20
+ - [uv](https://docs.astral.sh/uv/) (gestor de paquetes Python)
21
+
22
+ ### Pasos de instalación
23
+
24
+ 1. Clona el repositorio:
25
+ ```bash
26
+ git clone https://github.com/yourusername/biblia-cli.git
27
+ cd biblia-cli
28
+ ```
29
+
30
+ 2. Crea y activa un entorno virtual:
31
+ ```bash
32
+ uv venv
33
+ # En Windows:
34
+ .venv\Scripts\activate
35
+ # En Unix/Linux/macOS:
36
+ source .venv/bin/activate
37
+ ```
38
+
39
+ 3. Instala las dependencias:
40
+ ```bash
41
+ uv sync
42
+ ```
43
+
44
+ 4. Construye e instala el paquete (opcional para desarrollo):
45
+ ```bash
46
+ uv build
47
+ uv run pip install --force-reinstall dist/*.whl
48
+ ```
49
+
50
+ ## Configuración de .env
51
+
52
+ Para usar la API de YouVersion, necesitas configurar una clave de API:
53
+
54
+ 1. Copia el archivo de ejemplo:
55
+ ```bash
56
+ cp .env_example .env
57
+ ```
58
+
59
+ 2. Edita `.env` y agrega tu clave de API de YouVersion:
60
+ ```
61
+ YVP_APP_KEY="tu_clave_de_api_aqui"
62
+ ```
63
+
64
+ > **Nota**: La clave de API es necesaria solo si planeas usar fuentes remotas. Para uso local, no es requerida.
65
+
66
+ ## Comandos principales
67
+
68
+ ### Listar versiones disponibles
69
+ ```bash
70
+ biblia versions
71
+ ```
72
+ Lista todas las versiones bíblicas disponibles en español.
73
+
74
+ ### Seleccionar versión activa
75
+ ```bash
76
+ biblia use RV1960
77
+ ```
78
+ Configura la versión bíblica activa para consultas con API.
79
+
80
+ ### Buscar por referencia
81
+ ```bash
82
+ biblia ref "Exodo 33:7"
83
+ ```
84
+ Busca un versículo específico.
85
+
86
+ ### Buscar rangos de versículos
87
+ ```bash
88
+ biblia ref "Exodo 33:7,10"
89
+ ```
90
+ Busca un rango de versículos consecutivos.
91
+
92
+ ### Búsqueda de texto
93
+ ```bash
94
+ biblia buscar "amor"
95
+ ```
96
+ Busca una palabra o frase en toda la Biblia.
97
+
98
+ ### Limitar resultados de búsqueda
99
+ ```bash
100
+ biblia buscar "amor" --limit 5
101
+ ```
102
+ Limita el número de resultados mostrados.
103
+
104
+ ### Mostrar texto completo en búsquedas
105
+ ```bash
106
+ biblia buscar "amor" --show
107
+ ```
108
+ Muestra el texto completo de los versículos en los resultados.
109
+
110
+ ### Mostrar versión
111
+ ```bash
112
+ biblia --version
113
+ ```
114
+ Muestra la versión del CLI.
115
+
116
+ ## Ejemplo con fuente local
117
+
118
+ Para usar datos locales (archivos JSON), especifica `--source local`:
119
+
120
+ ```bash
121
+ biblia ref "Exodo 33:7" --source local
122
+ ```
123
+
124
+ Esto buscará en los archivos JSON locales en el directorio `data/`.
125
+
126
+ ## Ejemplo con API
127
+
128
+ Para usar una API externa (requiere configuración previa):
129
+
130
+ 1. Selecciona una versión:
131
+ ```bash
132
+ biblia use RV1960
133
+ ```
134
+
135
+ 2. Busca con fuente API:
136
+ ```bash
137
+ biblia ref "Exodo 33:7" --source api
138
+ ```
139
+
140
+ O usa `auto` para que el CLI elija automáticamente (local si disponible, API si no):
141
+ ```bash
142
+ biblia ref "Exodo 33:7" --source auto
143
+ ```
144
+
145
+ ## Estructura del proyecto
146
+
147
+ ```
148
+ biblia-cli/
149
+ ├─ biblia/ # Paquete principal
150
+ │ ├─ cli.py # Interfaz de línea de comandos
151
+ │ ├─ bible.py # Lógica de búsqueda de versículos
152
+ │ ├─ search.py # Búsqueda de texto
153
+ │ ├─ indexer.py # Constructor de índice invertido
154
+ │ ├─ refs.py # Analizador de referencias
155
+ │ ├─ loader.py # Cargador de datos JSON
156
+ │ ├─ resolver.py # Resolución de fuentes
157
+ │ ├─ config.py # Configuración de API
158
+ │ ├─ config_store.py # Almacenamiento de configuración
159
+ │ ├─ models.py # Modelos de datos
160
+ │ ├─ utils.py # Utilidades
161
+ │ └─ providers/ # Proveedores de datos
162
+ │ └─ youversion.py # Cliente de YouVersion API
163
+ ├─ data/ # Datos bíblicos (archivos JSON)
164
+ │ ├─ exodo.json # Libro de Éxodo
165
+ │ └─ index.json # Índice invertido
166
+ ├─ tests/ # Pruebas
167
+ ├─ pyproject.toml # Configuración del proyecto
168
+ ├─ .env_example # Ejemplo de configuración
169
+ └─ README.md # Este archivo
170
+ ```
171
+
172
+ ## Cómo funciona
173
+
174
+ 1. **Almacenamiento de datos**: El contenido bíblico se almacena en formato JSON, un archivo por libro.
175
+ 2. **Indexación**: Un índice invertido mapea palabras a versículos para búsquedas rápidas.
176
+ 3. **Análisis**: Un analizador personalizado maneja nombres de libros con espacios (ej. "1 Corintios").
177
+ 4. **Formateo**: Los números de versículo se muestran en superíndice para mejor legibilidad.
178
+ 5. **Proveedores**: Soporte para múltiples fuentes de datos (local y APIs).
179
+
180
+ ## Agregar más libros
181
+
182
+ 1. Crea un nuevo archivo JSON en `data/` siguiendo este formato:
183
+ ```json
184
+ {
185
+ "libro": "Nombre del Libro",
186
+ "capitulos": [
187
+ {
188
+ "capitulo": 1,
189
+ "versiculos": [
190
+ {"versiculo": 1, "texto": "Texto del versículo 1"},
191
+ {"versiculo": 2, "texto": "Texto del versículo 2"}
192
+ ]
193
+ }
194
+ ]
195
+ }
196
+ ```
197
+
198
+ 2. Actualiza el índice ejecutando el indexador.
199
+
200
+ ## Contribuir
201
+
202
+ ¡Las contribuciones son bienvenidas! Por favor, abre un issue o envía un pull request.
203
+
204
+ ## Licencia
205
+
206
+ Este proyecto está bajo la Licencia MIT.
207
+ "abreviaturas": ["Abr"],
208
+ "capitulos": {
209
+ "1": {
210
+ "1": "Verse text here...",
211
+ "2": "Another verse..."
212
+ }
213
+ }
214
+ }
215
+ ```
216
+
217
+ 2. Rebuild the index to include the new book:
218
+ ```bash
219
+ python -m biblia.indexer
220
+ ```
221
+
222
+ ## Development
223
+
224
+ Install development dependencies:
225
+ ```bash
226
+ uv add --dev pytest
227
+ ```
228
+
229
+ Run tests:
230
+ ```bash
231
+ uv run pytest
232
+ ```
233
+
234
+ ## Future Improvements
235
+
236
+ - Full chapter lookup
237
+ - Abbreviation support (e.g., `Jn 3:16`)
238
+ - REST API
239
+ - Rich terminal output formatting
240
+ - PyPI publication
241
+
242
+ ## License
243
+
244
+ MIT
245
+
246
+ ## Contributing
247
+
248
+ Contributions are welcome! Feel free to open issues or submit pull requests.
File without changes
@@ -0,0 +1,50 @@
1
+ from pathlib import Path
2
+
3
+ from biblia.loader import load_book
4
+ from biblia.refs import parse_full_reference, parse_reference_range
5
+ from biblia.utils import to_superscript
6
+
7
+ PROJECT_ROOT = Path(__file__).resolve().parents[1] # .../biblia-cli
8
+ DATA_DIR = PROJECT_ROOT / "data"
9
+
10
+
11
+ def get_verses_range(ref: str):
12
+ book, chapter, start, end = parse_reference_range(ref)
13
+
14
+ filename = book.lower().replace(" ", "_") + ".json"
15
+ path = DATA_DIR / filename
16
+
17
+ data = load_book(path)
18
+ verses = data["capitulos"][chapter]
19
+
20
+ start_i = int(start)
21
+
22
+ if end is None:
23
+ end_i = start_i
24
+ else:
25
+ end_i = int(end)
26
+
27
+ if end_i < start_i:
28
+ raise ValueError("El versículo final no puede ser menor que el inicial.")
29
+
30
+ lines = []
31
+ lines.append(f"{book} {chapter}")
32
+
33
+ for v in range(start_i, end_i + 1):
34
+ text = verses[str(v)]
35
+ sup = to_superscript(str(v))
36
+ lines.append(f"{sup} {text}")
37
+
38
+ return "\n".join(lines)
39
+
40
+
41
+ def get_verse_by_reference(ref: str):
42
+ book, chapter, verse = parse_full_reference(ref)
43
+
44
+ filename = book.lower().replace(" ", "_") + ".json"
45
+ path = DATA_DIR / filename
46
+
47
+ data = load_book(path)
48
+ verses = data["capitulos"][str(chapter)]
49
+
50
+ return verses[str(verse)]
@@ -0,0 +1,75 @@
1
+ BOOK_TO_USFM = {
2
+ "Genesis": "GEN",
3
+ "Exodo": "EXO",
4
+ "Levitico": "LEV",
5
+ "Numeros": "NUM",
6
+ "Deuteronomio": "DEU",
7
+ "Josue": "JOS",
8
+ "Jueces": "JDG",
9
+ "Rut": "RUT",
10
+ "1 Samuel": "1SA",
11
+ "2 Samuel": "2SA",
12
+ "1 Reyes": "1KI",
13
+ "2 Reyes": "2KI",
14
+ "1 Cronicas": "1CH",
15
+ "2 Cronicas": "2CH",
16
+ "Esdras": "EZR",
17
+ "Nehemias": "NEH",
18
+ "Ester": "EST",
19
+ "Job": "JOB",
20
+ "Salmos": "PSA",
21
+ "Proverbios": "PRO",
22
+ "Eclesiastes": "ECC",
23
+ "Cantar de los Cantares": "SNG",
24
+ "Isaias": "ISA",
25
+ "Jeremias": "JER",
26
+ "Lamentaciones": "LAM",
27
+ "Ezequiel": "EZK",
28
+ "Daniel": "DAN",
29
+ "Oseas": "HOS",
30
+ "Joel": "JOL",
31
+ "Amos": "AMO",
32
+ "Abdias": "OBA",
33
+ "Jonas": "JON",
34
+ "Miqueas": "MIC",
35
+ "Nahum": "NAM",
36
+ "Habacuc": "HAB",
37
+ "Sofonias": "ZEP",
38
+ "Hageo": "HAG",
39
+ "Zacarias": "ZEC",
40
+ "Malaquias": "MAL",
41
+ "Mateo": "MAT",
42
+ "Marcos": "MRK",
43
+ "Lucas": "LUK",
44
+ "Juan": "JHN",
45
+ "Hechos": "ACT",
46
+ "Romanos": "ROM",
47
+ "1 Corintios": "1CO",
48
+ "2 Corintios": "2CO",
49
+ "Galatas": "GAL",
50
+ "Efesios": "EPH",
51
+ "Filipenses": "PHP",
52
+ "Colosenses": "COL",
53
+ "1 Tesalonicenses": "1TH",
54
+ "2 Tesalonicenses": "2TH",
55
+ "1 Timoteo": "1TI",
56
+ "2 Timoteo": "2TI",
57
+ "Tito": "TIT",
58
+ "Filemon": "PHM",
59
+ "Hebreos": "HEB",
60
+ "Santiago": "JAS",
61
+ "1 Pedro": "1PE",
62
+ "2 Pedro": "2PE",
63
+ "1 Juan": "1JN",
64
+ "2 Juan": "2JN",
65
+ "3 Juan": "3JN",
66
+ "Judas": "JUD",
67
+ "Apocalipsis": "REV",
68
+ }
69
+
70
+
71
+ def get_usfm_code(book: str) -> str:
72
+ try:
73
+ return BOOK_TO_USFM[book]
74
+ except KeyError as exc:
75
+ raise ValueError(f"Libro no soportado para API: {book}") from exc