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.
- biblia_cli_project-0.1.0/.env_example +1 -0
- biblia_cli_project-0.1.0/.github/workflows/ci.yml +31 -0
- biblia_cli_project-0.1.0/.gitignore +15 -0
- biblia_cli_project-0.1.0/.python-version +1 -0
- biblia_cli_project-0.1.0/PKG-INFO +259 -0
- biblia_cli_project-0.1.0/README.md +248 -0
- biblia_cli_project-0.1.0/biblia/__init__.py +0 -0
- biblia_cli_project-0.1.0/biblia/bible.py +50 -0
- biblia_cli_project-0.1.0/biblia/book_codes.py +75 -0
- biblia_cli_project-0.1.0/biblia/cli.py +144 -0
- biblia_cli_project-0.1.0/biblia/config.py +15 -0
- biblia_cli_project-0.1.0/biblia/config_store.py +29 -0
- biblia_cli_project-0.1.0/biblia/indexer.py +50 -0
- biblia_cli_project-0.1.0/biblia/loader.py +6 -0
- biblia_cli_project-0.1.0/biblia/models.py +12 -0
- biblia_cli_project-0.1.0/biblia/providers/youversion.py +89 -0
- biblia_cli_project-0.1.0/biblia/refs.py +39 -0
- biblia_cli_project-0.1.0/biblia/resolver.py +24 -0
- biblia_cli_project-0.1.0/biblia/search.py +26 -0
- biblia_cli_project-0.1.0/biblia/tests/test_cli.py +46 -0
- biblia_cli_project-0.1.0/biblia/utils.py +16 -0
- biblia_cli_project-0.1.0/data/exodo.json +24 -0
- biblia_cli_project-0.1.0/data/index.json +727 -0
- biblia_cli_project-0.1.0/main.py +6 -0
- biblia_cli_project-0.1.0/pyproject.toml +35 -0
- biblia_cli_project-0.1.0/uv.lock +249 -0
|
@@ -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 @@
|
|
|
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
|