biblematedata 0.0.1__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.
- biblematedata-0.0.1/PKG-INFO +50 -0
- biblematedata-0.0.1/biblematedata/README.md +25 -0
- biblematedata-0.0.1/biblematedata/config.py +0 -0
- biblematedata-0.0.1/biblematedata/main.py +296 -0
- biblematedata-0.0.1/biblematedata/package_name.txt +1 -0
- biblematedata-0.0.1/biblematedata/requirements.txt +2 -0
- biblematedata-0.0.1/biblematedata/version.txt +1 -0
- biblematedata-0.0.1/biblematedata.egg-info/PKG-INFO +50 -0
- biblematedata-0.0.1/biblematedata.egg-info/SOURCES.txt +13 -0
- biblematedata-0.0.1/biblematedata.egg-info/dependency_links.txt +1 -0
- biblematedata-0.0.1/biblematedata.egg-info/entry_points.txt +2 -0
- biblematedata-0.0.1/biblematedata.egg-info/requires.txt +5 -0
- biblematedata-0.0.1/biblematedata.egg-info/top_level.txt +1 -0
- biblematedata-0.0.1/setup.cfg +4 -0
- biblematedata-0.0.1/setup.py +94 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: biblematedata
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: BibleMate AI - Automate Your Bible Study
|
|
5
|
+
Home-page: https://biblemate.ai
|
|
6
|
+
Author: Eliran Wong
|
|
7
|
+
Author-email: support@marvel.bible
|
|
8
|
+
License: GNU General Public License (GPL)
|
|
9
|
+
Project-URL: Source, https://github.com/eliranwong/biblemate
|
|
10
|
+
Project-URL: Tracker, https://github.com/eliranwong/biblemate/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/eliranwong/biblemate/wiki
|
|
12
|
+
Project-URL: Funding, https://www.paypal.me/MarvelBible
|
|
13
|
+
Keywords: mcp agent biblemate ai anthropic azure chatgpt cohere deepseek genai github googleai groq llamacpp mistral ollama openai vertexai xai
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Topic :: Utilities
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
19
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Requires-Python: >=3.10, <3.13
|
|
24
|
+
Provides-Extra: genai
|
|
25
|
+
|
|
26
|
+
# biblematedata
|
|
27
|
+
|
|
28
|
+
Bible Data for BibleMate AI Setup.
|
|
29
|
+
|
|
30
|
+
Install Essential Data for running [BibleMate AI](https://github.com/eliranwong/biblemate):
|
|
31
|
+
|
|
32
|
+
CLI version / MCP server:
|
|
33
|
+
|
|
34
|
+
https://github.com/eliranwong/biblematecli
|
|
35
|
+
|
|
36
|
+
Web GUI / Http Server / API Server:
|
|
37
|
+
|
|
38
|
+
https://github.com/eliranwong/biblemateweb
|
|
39
|
+
|
|
40
|
+
# Requirement
|
|
41
|
+
|
|
42
|
+
Install `git` command line tool separately.
|
|
43
|
+
|
|
44
|
+
# Install BibleMate Data
|
|
45
|
+
|
|
46
|
+
> pip install -U biblematedata
|
|
47
|
+
|
|
48
|
+
# Set Up Data For BibleMate Web / BibleMate CLI
|
|
49
|
+
|
|
50
|
+
> biblematedata
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# biblematedata
|
|
2
|
+
|
|
3
|
+
Bible Data for BibleMate AI Setup.
|
|
4
|
+
|
|
5
|
+
Install Essential Data for running [BibleMate AI](https://github.com/eliranwong/biblemate):
|
|
6
|
+
|
|
7
|
+
CLI version / MCP server:
|
|
8
|
+
|
|
9
|
+
https://github.com/eliranwong/biblematecli
|
|
10
|
+
|
|
11
|
+
Web GUI / Http Server / API Server:
|
|
12
|
+
|
|
13
|
+
https://github.com/eliranwong/biblemateweb
|
|
14
|
+
|
|
15
|
+
# Requirement
|
|
16
|
+
|
|
17
|
+
Install `git` command line tool separately.
|
|
18
|
+
|
|
19
|
+
# Install BibleMate Data
|
|
20
|
+
|
|
21
|
+
> pip install -U biblematedata
|
|
22
|
+
|
|
23
|
+
# Set Up Data For BibleMate Web / BibleMate CLI
|
|
24
|
+
|
|
25
|
+
> biblematedata
|
|
File without changes
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import os, zipfile, gdown, traceback, time, random, requests, shutil
|
|
2
|
+
from prompt_toolkit.formatted_text import HTML
|
|
3
|
+
from prompt_toolkit.shortcuts import radiolist_dialog
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
AUDIO_REPOS = {
|
|
8
|
+
"ASV (American accent; verse-by-verse)": ("BBE", "eliranwong/MP3_AmericanStandardVersion_american", "default"),
|
|
9
|
+
"BBE (British accent; verse-by-verse)": ("BBE", "eliranwong/MP3_BibleInBasicEnglish_british", "default"),
|
|
10
|
+
"BHS5 (Hebrew; word-by-word)": ("BHS5", "eliranwong/MP3_BHS5_word-by-word", "default"),
|
|
11
|
+
"BSB (American accent; verse-by-verse)": ("BSB", "eliranwong/MP3_BereanStudyBible_american", "default"),
|
|
12
|
+
"BSB (British accent; verse-by-verse)": ("BSB", "eliranwong/MP3_BereanStudyBible_british", "default"),
|
|
13
|
+
"CUV (Cantonese; verse-by-verse)": ("CUV", "eliranwong/MP3_ChineseUnionVersion_cantonese", "default"),
|
|
14
|
+
"CUVs (Mandarin; verse-by-verse)": ("CUVs", "eliranwong/MP3_ChineseUnionVersion_mandarin", "default"),
|
|
15
|
+
"ERV (British accent; verse-by-verse)": ("ERV", "eliranwong/MP3_EnglishRevisedVersion_british", "default"),
|
|
16
|
+
"ISV (American accent; verse-by-verse)": ("ISV", "eliranwong/MP3_InternationalStandardVersion_american", "default"),
|
|
17
|
+
"ISV (British accent; verse-by-verse)": ("ISV", "eliranwong/MP3_InternationalStandardVersion_british", "default"),
|
|
18
|
+
"KJV (American accent; verse-by-verse)": ("KJV", "eliranwong/MP3_KingJamesVersion_american", "default"),
|
|
19
|
+
"KJV (British accent; verse-by-verse)": ("KJV", "eliranwong/MP3_KingJamesVersion_british", "default"),
|
|
20
|
+
"LEB (American accent; verse-by-verse)": ("LEB", "eliranwong/MP3_LexhamEnglishBible_american", "default"),
|
|
21
|
+
"LEB (British accent; verse-by-verse)": ("LEB", "eliranwong/MP3_LexhamEnglishBible_british", "default"),
|
|
22
|
+
"NET (American accent; verse-by-verse)": ("NET", "eliranwong/MP3_NewEnglishTranslation_american", "default"),
|
|
23
|
+
"NET (British accent; verse-by-verse)": ("NET", "eliranwong/MP3_NewEnglishTranslation_british", "default"),
|
|
24
|
+
"OGNT (Greek; word-by-word)": ("OGNT", "eliranwong/MP3_OpenGNT_word-by-word", "default"),
|
|
25
|
+
"OHGB (Hebrew & Greek; fast; verse-by-verse)": ("OHGB", "eliranwong/MP3_OpenHebrewGreekBible_fast", "default"),
|
|
26
|
+
"OHGB (Hebrew & Greek; slow; verse-by-verse)": ("OHGB", "eliranwong/MP3_OpenHebrewGreekBible_slow", "default"),
|
|
27
|
+
"SBLGNT (Greek; fast; verse-by-verse)": ("SBLGNT", "eliranwong/MP3_SBLGNT_fast", "default"),
|
|
28
|
+
"SBLGNT (Greek; slow; verse-by-verse)": ("SBLGNT", "eliranwong/MP3_SBLGNT_slow", "default"),
|
|
29
|
+
"WEB (British accent; verse-by-verse)": ("WEB", "eliranwong/MP3_WebEnglishBible_british", "default"),
|
|
30
|
+
"WLC (Hebrew; fast; verse-by-verse)": ("WLC", "eliranwong/MP3_WLC_fast", "default"),
|
|
31
|
+
"WLC (Hebrew; slow; verse-by-verse)": ("WLC", "eliranwong/MP3_WLC_slow", "default"),
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
FILE_IDS = {
|
|
35
|
+
# vectors - new
|
|
36
|
+
"bible.db": (("vectors",), "1x5WbytQHkiJHzDiAjaf_I6XTIkRyMIBF"),
|
|
37
|
+
"collection.db": (("vectors",), "18tUxwdcaGPaQ7e7m-RIIEEBFNwyBFWva"),
|
|
38
|
+
"dictionary.db": (("vectors",), "1JYjxA6Zf2TkJ4eHEJ9xSaG5XpGcz46yq"),
|
|
39
|
+
"encyclopedia.db": (("vectors",), "1yQmwXIjvZEbrUtoMAm7OQoAYVbnRZVP7"),
|
|
40
|
+
"exlb.db": (("vectors",), "1zY9sKi53ct4fyH5KwOe31uAsSDJ_6t8z"),
|
|
41
|
+
# commentaries - new
|
|
42
|
+
"cAIC.commentary": (("commentaries",), "1tkNrdpw5fmRJ0-3_uvJiRz-f8hMQJIPh"),
|
|
43
|
+
"cAICSC.commentary": (("commentaries",), "1sjPHwZf4gVp5O35yYr7qbjJDC0KzSsvh"),
|
|
44
|
+
"cAICTC.commentary": (("commentaries",), "1pKAzBeuFHXV7Jw6OTKQ9kqDlIUxt-Sf1"),
|
|
45
|
+
# commentaries - UBA
|
|
46
|
+
"cBarnes.commentary": (("commentaries",), "13uxButnFH2NRUV-YuyRZYCeh1GzWqO5J"),
|
|
47
|
+
"cBenson.commentary": (("commentaries",), "1MSRUHGDilogk7_iZHVH5GWkPyf8edgjr"),
|
|
48
|
+
"cBI.commentary": (("commentaries",), "1DUATP_0M7SwBqsjf20YvUDblg3_sOt2F"),
|
|
49
|
+
"cBrooks.commentary": (("commentaries",), "1pZNRYE6LqnmfjUem4Wb_U9mZ7doREYUm"),
|
|
50
|
+
"cCalvin.commentary": (("commentaries",), "1FUZGK9n54aXvqMAi3-2OZDtRSz9iZh-j"),
|
|
51
|
+
"cCBSC.commentary": (("commentaries",), "1IxbscuAMZg6gQIjzMlVkLtJNDQ7IzTh6"),
|
|
52
|
+
"cCECNT.commentary": (("commentaries",), "1MpBx7z6xyJYISpW_7Dq-Uwv0rP8_Mi-r"),
|
|
53
|
+
"cCGrk.commentary": (("commentaries",), "1Jf51O0R911Il0V_SlacLQDNPaRjumsbD"),
|
|
54
|
+
"cCHP.commentary": (("commentaries",), "1dygf2mz6KN_ryDziNJEu47-OhH8jK_ff"),
|
|
55
|
+
"cClarke.commentary": (("commentaries",), "1ZVpLAnlSmBaT10e5O7pljfziLUpyU4Dq"),
|
|
56
|
+
"cCPBST.commentary": (("commentaries",), "14zueTf0ioI-AKRo_8GK8PDRKael_kB1U"),
|
|
57
|
+
"cEBC.commentary": (("commentaries",), "1UA3tdZtIKQEx-xmXtM_SO1k8S8DKYm6r"),
|
|
58
|
+
"cECER.commentary": (("commentaries",), "1sCJc5xuxqDDlmgSn2SFWTRbXnHSKXeh_"),
|
|
59
|
+
"cEGNT.commentary": (("commentaries",), "1ZvbWnuy2wwllt-s56FUfB2bS2_rZoiPx"),
|
|
60
|
+
"cGCT.commentary": (("commentaries",), "1vK53UO2rggdcfcDjH6mWXAdYti4UbzUt"),
|
|
61
|
+
"cGill.commentary": (("commentaries",), "1O5jnHLsmoobkCypy9zJC-Sw_Ob-3pQ2t"),
|
|
62
|
+
"cHenry.commentary": (("commentaries",), "1m-8cM8uZPN-fLVcC-a9mhL3VXoYJ5Ku9"),
|
|
63
|
+
"cHH.commentary": (("commentaries",), "1RwKN1igd1RbN7phiJDiLPhqLXdgOR0Ms"),
|
|
64
|
+
"cICCNT.commentary": (("commentaries",), "1QxrzeeZYc0-GNwqwdDe91H4j1hGSOG6t"),
|
|
65
|
+
"cJFB.commentary": (("commentaries",), "1NT02QxoLeY3Cj0uA_5142P5s64RkRlpO"),
|
|
66
|
+
"cKD.commentary": (("commentaries",), "1rFFDrdDMjImEwXkHkbh7-vX3g4kKUuGV"),
|
|
67
|
+
"cLange.commentary": (("commentaries",), "1_PrTT71aQN5LJhbwabx-kjrA0vg-nvYY"),
|
|
68
|
+
"cMacL.commentary": (("commentaries",), "1p32F9MmQ2wigtUMdCU-biSrRZWrFLWJR"),
|
|
69
|
+
"cPHC.commentary": (("commentaries",), "1xTkY_YFyasN7Ks9me3uED1HpQnuYI8BW"),
|
|
70
|
+
"cPulpit.commentary": (("commentaries",), "1briSh0oDhUX7QnW1g9oM3c4VWiThkWBG"),
|
|
71
|
+
"cRob.commentary": (("commentaries",), "17VfPe4wsnEzSbxL5Madcyi_ubu3iYVkx"),
|
|
72
|
+
"cSpur.commentary": (("commentaries",), "1OVsqgHVAc_9wJBCcz6PjsNK5v9GfeNwp"),
|
|
73
|
+
"cVincent.commentary": (("commentaries",), "1ZZNnCo5cSfUzjdEaEvZ8TcbYa4OKUsox"),
|
|
74
|
+
"cWesley.commentary": (("commentaries",), "1rerXER1ZDn4e1uuavgFDaPDYus1V-tS5"),
|
|
75
|
+
"cWhedon.commentary": (("commentaries",), "1FPJUJOKodFKG8wsNAvcLLc75QbM5WO-9"),
|
|
76
|
+
# lexicons - new
|
|
77
|
+
"lexicons": ((), "1xlvJ6GURwYCxPnYwo2xuyREutWTeWMcH"),
|
|
78
|
+
# bibles - new
|
|
79
|
+
"ODB.bible": (("original",), "1DD8IsGnH2YAcyHeIp4_CKiezw0vvoMUF"),
|
|
80
|
+
"OIB.bible": (("original",), "1RipYgwIflQprP1h02_7L0chpcINNFxef"),
|
|
81
|
+
"OLB.bible": (("original",), "13wCL_cHTX-ZO6xcbtx6YhiZZuJq_iZht"),
|
|
82
|
+
"OPB.bible": (("original",), "1WzrQlFzOE1PK7Lg2QxcUo-zpFiQlJujO"),
|
|
83
|
+
"ORB.bible": (("original",), "17TnhpbkO7y261NcJ8GThEBpMpF_MeTjG"),
|
|
84
|
+
"OHGB.bible": (("bibles",), "1Wwn_HaVW_ViOdG7MA_3aAxZQajw7O4tK"),
|
|
85
|
+
"OHGBi.bible": (("bibles",), "1z5xSfTQ8FESr01xx-WKppRisLUECiXbV"),
|
|
86
|
+
# bibles - UBA
|
|
87
|
+
"ASV.bible": (("bibles",), "1oDuV54_zOl_L0GQqmYiLvgjk2pQu4iSr"),
|
|
88
|
+
"BSB.bible": (("bibles",), "1fQX8cT12LE9Q3dBUJyezTYg4a0AbdKbN"),
|
|
89
|
+
"CUV.bible": (("bibles",), "1SuXGZIx_ivz9ztPvnylO_ComYOYrJyzk"),
|
|
90
|
+
"CUVs.bible": (("bibles",), "1cu0FFIb_Zc3lQ71P1EJB3P8E5vDLnOt6"),
|
|
91
|
+
"ISV.bible": (("bibles",), "1_nmaakABx8wVsQHdBL9rVh2wtRK8uyyW"),
|
|
92
|
+
"KJV.bible": (("bibles",), "1ycOkEJ2JI_4iwjllb4mE02wkDvrsPlNq"),
|
|
93
|
+
"LEB.bible": (("bibles",), "1p-_phmh3y54i4FSLhzEd33_v0kzSjAZn"),
|
|
94
|
+
"LXX1.bible": (("bibles",), "1t9sgkQxYkZElg1M8f3QHYIF8oRAIN_hd"),
|
|
95
|
+
"LXX1i.bible": (("bibles",), "1vtGfv2otmb2N86M2QdRB6KdFjlNyAGOc"),
|
|
96
|
+
"LXX2.bible": (("bibles",), "1oZk5nYKcR1s2XtRLfU-H9IxCkCQ2px6U"),
|
|
97
|
+
"LXX2i.bible": (("bibles",), "1jgq30khM0Oqxa3phE07Wg4R2p15t1N12"),
|
|
98
|
+
"NET.bible": (("bibles",), "1pJ_9Wk4CmDdFO08wioOxs4krKjNeh4Ur"),
|
|
99
|
+
"SBLGNT.bible": (("bibles",), "1N1ryqvSytW3RFlOUy7rex0JdO2X5IzuK"),
|
|
100
|
+
"SBLGNTl.bible": (("bibles",), "1IgbX1ZBB05FgNglQM8t6GZBNSJVCu2fS"),
|
|
101
|
+
"ULT.bible": (("bibles",), "1C_YiWs7GsduCuBOO4vSR7c13RRFtIZGg"),
|
|
102
|
+
"UST.bible": (("bibles",), "1-s7NUKpPauer3w1hpu6W9YqVBjiLuXmc"),
|
|
103
|
+
"WEB.bible": (("bibles",), "1L9qAeamdZwGzVdf7jC4_ks05hyQa2R7l"),
|
|
104
|
+
# core - new
|
|
105
|
+
"collections3.sqlite": ((), "1zvNWt0ffo979Mkgp4XZLurbedY8GC4qU"),
|
|
106
|
+
# core - UBA
|
|
107
|
+
"images.sqlite": ((), "18rjzm_2sRcTN22oJPNZrxPZ3eIh_cphq"),
|
|
108
|
+
"indexes2.sqlite": ((), "1EwYNGBE8kCwQ2GsJnwXlg-kM8PURiNG6"),
|
|
109
|
+
"cross-reference.sqlite": ((), "1uitkNgqOH0TrKXwbULF4ibLl13WnZ-U2"),
|
|
110
|
+
"morphology.sqlite": ((), "11QfpwEd5fjdDglPiqzygLNN99AVz2mw5"),
|
|
111
|
+
# data - new
|
|
112
|
+
"biblePeople.data": (("data",), "1o7mfGoRAgPXKAjZfpj2dsY2Xp4vX8NdU"),
|
|
113
|
+
"book_analysis_sc.data": (("data",), "19PIQCP99HI1TEaJiaoMnmKbMu_vUP_OP"),
|
|
114
|
+
"book_analysis_tc.data": (("data",), "19XtVixBGFnCj0akutTivq13eT_Gkn6gU"),
|
|
115
|
+
"book_analysis.data": (("data",), "1_Z4qjwgxUC4O-Pz7rX72ZtM3qLOD5ZL-"),
|
|
116
|
+
"chapter_summary_sc.data": (("data",), "10Au81R8qxB1kPGUS6sv2L5imDCgQDoEa"),
|
|
117
|
+
"chapter_summary_tc.data": (("data",), "1jpJLNB2UZ7U0VSFnlqCh_idL-j5jLUYX"),
|
|
118
|
+
"chapter_summary.data": (("data",), "1W5a04a4d4hfQEMgHX1x0hUOY4Q2Cu-hp"),
|
|
119
|
+
# data - UBA
|
|
120
|
+
"exlb3.data": (("data",), "1gp2Unsab85Se-IB_tmvVZQ3JKGvXLyMP"),
|
|
121
|
+
"dictionary.data": (("data",), "1NfbkhaR-dtmT1_Aue34KypR3mfPtqCZn"),
|
|
122
|
+
"encyclopedia.data": (("data",), "1OuM6WxKfInDBULkzZDZFryUkU1BFtym8"),
|
|
123
|
+
# books
|
|
124
|
+
"books": ((), "10BmoBH-XOY4QOiYQ0gyzUn4YxsHYnPte"),
|
|
125
|
+
# podcast - new
|
|
126
|
+
"podcast": ((), "1aNS8rtdQcTZGub6jhZhEarpUK3R4f_x8"),
|
|
127
|
+
# audio (via git clone)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
def start_download(file_id, destination):
|
|
131
|
+
URL = "https://docs.google.com/uc?export=download"
|
|
132
|
+
session = requests.Session()
|
|
133
|
+
response = session.get(URL, params={'id': file_id}, stream=True)
|
|
134
|
+
|
|
135
|
+
# Handle large file warning tokens
|
|
136
|
+
token = None
|
|
137
|
+
for key, value in response.cookies.items():
|
|
138
|
+
if key.startswith('download_warning'):
|
|
139
|
+
token = value
|
|
140
|
+
break
|
|
141
|
+
|
|
142
|
+
if token:
|
|
143
|
+
params = {'id': file_id, 'confirm': token}
|
|
144
|
+
response = session.get(URL, params=params, stream=True)
|
|
145
|
+
|
|
146
|
+
with open(destination, "wb") as f:
|
|
147
|
+
for chunk in response.iter_content(32768):
|
|
148
|
+
if chunk:
|
|
149
|
+
f.write(chunk)
|
|
150
|
+
|
|
151
|
+
def download_google_drive_file(file_id, target_folder=None, force=False):
|
|
152
|
+
# check if target folder exists
|
|
153
|
+
if target_folder is None:
|
|
154
|
+
target_folder = os.path.join(os.path.expanduser("~"), "biblemate", "data", *FILE_IDS[file_id][0])
|
|
155
|
+
if not os.path.isdir(target_folder):
|
|
156
|
+
Path(target_folder).mkdir(parents=True, exist_ok=True)
|
|
157
|
+
# check if final path exists
|
|
158
|
+
final_path = os.path.join(target_folder, file_id)
|
|
159
|
+
#print(f"Checking if {final_path} exists")
|
|
160
|
+
if os.path.exists(final_path):
|
|
161
|
+
if force:
|
|
162
|
+
os.remove(final_path)
|
|
163
|
+
else:
|
|
164
|
+
return final_path
|
|
165
|
+
# download
|
|
166
|
+
try:
|
|
167
|
+
print(f"Downloading {file_id}")
|
|
168
|
+
output = os.path.join(target_folder, file_id+".zip")
|
|
169
|
+
if os.path.isfile(output):
|
|
170
|
+
os.remove(output)
|
|
171
|
+
if os.path.isfile(output[:-4]):
|
|
172
|
+
os.remove(output[:-4])
|
|
173
|
+
start_download(FILE_IDS[file_id][-1], output)
|
|
174
|
+
with zipfile.ZipFile(output, 'r') as zip_ref:
|
|
175
|
+
zip_ref.extractall(target_folder)
|
|
176
|
+
if os.path.isfile(output):
|
|
177
|
+
os.remove(output)
|
|
178
|
+
# Wait between 5 to 15 seconds before the next download, to workaround rate limit
|
|
179
|
+
delay = random.uniform(5, 15)
|
|
180
|
+
print("Waiting for", delay, "seconds...")
|
|
181
|
+
time.sleep(random.uniform(5, 15))
|
|
182
|
+
except Exception as e:
|
|
183
|
+
print(f"Error downloading {file_id} in the first try: {str(e)}")
|
|
184
|
+
#traceback.print_exc()
|
|
185
|
+
delay = 15
|
|
186
|
+
print("Waiting for", delay, "seconds...")
|
|
187
|
+
time.sleep(delay)
|
|
188
|
+
try:
|
|
189
|
+
# 2nd attempt with gdown
|
|
190
|
+
print(f"Trying again to download {file_id}")
|
|
191
|
+
gdown.download(id=FILE_IDS[file_id][-1], output=output)
|
|
192
|
+
with zipfile.ZipFile(output, 'r') as zip_ref:
|
|
193
|
+
zip_ref.extractall(target_folder)
|
|
194
|
+
if os.path.isfile(output):
|
|
195
|
+
os.remove(output)
|
|
196
|
+
except Exception as e:
|
|
197
|
+
print(f"Error downloading {file_id}: {str(e)}")
|
|
198
|
+
#traceback.print_exc()
|
|
199
|
+
delay = 15
|
|
200
|
+
print("Waiting for", delay, "seconds...")
|
|
201
|
+
time.sleep(delay)
|
|
202
|
+
return ""
|
|
203
|
+
return final_path
|
|
204
|
+
|
|
205
|
+
def getValidOptions(options=[], descriptions=[], bold_descriptions=False, filter="", default="", title="Available Options", text="Select an item:"):
|
|
206
|
+
if not options:
|
|
207
|
+
return ""
|
|
208
|
+
filter = filter.strip().lower()
|
|
209
|
+
if descriptions:
|
|
210
|
+
descriptionslower = [i.lower() for i in descriptions]
|
|
211
|
+
values = [(option, HTML(f"<b>{descriptions[index]}</b>") if bold_descriptions else descriptions[index]) for index, option in enumerate(options) if (filter in option.lower() or filter in descriptionslower[index])]
|
|
212
|
+
else:
|
|
213
|
+
values = [(option, option) for option in options if filter in option.lower()]
|
|
214
|
+
if not values:
|
|
215
|
+
if descriptions:
|
|
216
|
+
values = [(option, HTML(f"<b>{descriptions[index]}</b>") if bold_descriptions else descriptions[index]) for index, option in enumerate(options)]
|
|
217
|
+
else:
|
|
218
|
+
values = [(option, option) for option in options]
|
|
219
|
+
result = radiolist_dialog(
|
|
220
|
+
title=title,
|
|
221
|
+
text=text,
|
|
222
|
+
values=values,
|
|
223
|
+
default=default if default and default in options else values[0][0],
|
|
224
|
+
).run()
|
|
225
|
+
if result:
|
|
226
|
+
print(result)
|
|
227
|
+
return result
|
|
228
|
+
return ""
|
|
229
|
+
|
|
230
|
+
def downloadbibleaudio(default=""):
|
|
231
|
+
options = list(AUDIO_REPOS.keys())
|
|
232
|
+
userInput = getValidOptions(options=options, title="Downlaod Bible Audio", default=default, text="NET (American accent), OHGB (slow), BHS5, OGNT are downloaded by default. \nSelect below for a replacement or new download:")
|
|
233
|
+
if not userInput:
|
|
234
|
+
return False
|
|
235
|
+
print(f"You selected '{userInput}'.")
|
|
236
|
+
module, repo, *_ = AUDIO_REPOS[userInput]
|
|
237
|
+
downloadbibleaudioaction(module, repo, force=True)
|
|
238
|
+
return True
|
|
239
|
+
|
|
240
|
+
def downloadbibleaudioaction(module, repo, force=False):
|
|
241
|
+
if not shutil.which("git"):
|
|
242
|
+
print("git is not installed. Please install git and try again.")
|
|
243
|
+
return
|
|
244
|
+
try:
|
|
245
|
+
audioDir = os.path.join(os.path.expanduser("~"), "biblemate", "data", "audio", "bibles", module, "default")
|
|
246
|
+
# remove old files
|
|
247
|
+
if os.path.isdir(audioDir):
|
|
248
|
+
# os.rmdir does not work with sub directories
|
|
249
|
+
# os.rmdir(audioDir)
|
|
250
|
+
# use shutil.rmtree instead
|
|
251
|
+
if force:
|
|
252
|
+
shutil.rmtree(audioDir)
|
|
253
|
+
else:
|
|
254
|
+
print(f"{audioDir} already exists.")
|
|
255
|
+
return
|
|
256
|
+
Path(audioDir).mkdir(parents=True, exist_ok=True)
|
|
257
|
+
os.system(f"git clone https://github.com/{repo} {audioDir}")
|
|
258
|
+
print("Downloaded!")
|
|
259
|
+
print(f"unpacking `{module}` audio files ...")
|
|
260
|
+
for item in os.listdir(audioDir):
|
|
261
|
+
zipFile = os.path.join(audioDir, item)
|
|
262
|
+
if os.path.isfile(zipFile) and item.endswith(".zip"):
|
|
263
|
+
#os.system(f"unzip {zipFile}")
|
|
264
|
+
# Unzip file
|
|
265
|
+
shutil.unpack_archive(zipFile, audioDir)
|
|
266
|
+
# Delete zip file
|
|
267
|
+
os.remove(zipFile)
|
|
268
|
+
print(f"`{module}` audio installed!")
|
|
269
|
+
except:
|
|
270
|
+
print("Errors!")
|
|
271
|
+
|
|
272
|
+
def main():
|
|
273
|
+
# download files
|
|
274
|
+
for i in FILE_IDS:
|
|
275
|
+
download_google_drive_file(i)
|
|
276
|
+
# setup custom folders
|
|
277
|
+
for i in ("lexicons", "commentaries", "audio", "bibles"):
|
|
278
|
+
target_folder = os.path.join(os.path.expanduser("~"), "biblemate", "data_custom", i)
|
|
279
|
+
if not os.path.isdir(target_folder):
|
|
280
|
+
Path(target_folder).mkdir(parents=True, exist_ok=True)
|
|
281
|
+
# downloading default audio with git clone
|
|
282
|
+
for i in (
|
|
283
|
+
"NET (American accent; verse-by-verse)",
|
|
284
|
+
"OHGB (Hebrew & Greek; slow; verse-by-verse)",
|
|
285
|
+
"BHS5 (Hebrew; word-by-word)",
|
|
286
|
+
"OGNT (Greek; word-by-word)",
|
|
287
|
+
):
|
|
288
|
+
module, repo, *_ = AUDIO_REPOS[i]
|
|
289
|
+
downloadbibleaudioaction(module, repo)
|
|
290
|
+
# download more audio
|
|
291
|
+
download_audio = True
|
|
292
|
+
while download_audio:
|
|
293
|
+
download_audio = downloadbibleaudio()
|
|
294
|
+
|
|
295
|
+
if __name__ == "__main__":
|
|
296
|
+
main()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
biblematedata
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.0.1
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: biblematedata
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: BibleMate AI - Automate Your Bible Study
|
|
5
|
+
Home-page: https://biblemate.ai
|
|
6
|
+
Author: Eliran Wong
|
|
7
|
+
Author-email: support@marvel.bible
|
|
8
|
+
License: GNU General Public License (GPL)
|
|
9
|
+
Project-URL: Source, https://github.com/eliranwong/biblemate
|
|
10
|
+
Project-URL: Tracker, https://github.com/eliranwong/biblemate/issues
|
|
11
|
+
Project-URL: Documentation, https://github.com/eliranwong/biblemate/wiki
|
|
12
|
+
Project-URL: Funding, https://www.paypal.me/MarvelBible
|
|
13
|
+
Keywords: mcp agent biblemate ai anthropic azure chatgpt cohere deepseek genai github googleai groq llamacpp mistral ollama openai vertexai xai
|
|
14
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
15
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
16
|
+
Classifier: Topic :: Utilities
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Classifier: Topic :: Software Development :: Build Tools
|
|
19
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
22
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
23
|
+
Requires-Python: >=3.10, <3.13
|
|
24
|
+
Provides-Extra: genai
|
|
25
|
+
|
|
26
|
+
# biblematedata
|
|
27
|
+
|
|
28
|
+
Bible Data for BibleMate AI Setup.
|
|
29
|
+
|
|
30
|
+
Install Essential Data for running [BibleMate AI](https://github.com/eliranwong/biblemate):
|
|
31
|
+
|
|
32
|
+
CLI version / MCP server:
|
|
33
|
+
|
|
34
|
+
https://github.com/eliranwong/biblematecli
|
|
35
|
+
|
|
36
|
+
Web GUI / Http Server / API Server:
|
|
37
|
+
|
|
38
|
+
https://github.com/eliranwong/biblemateweb
|
|
39
|
+
|
|
40
|
+
# Requirement
|
|
41
|
+
|
|
42
|
+
Install `git` command line tool separately.
|
|
43
|
+
|
|
44
|
+
# Install BibleMate Data
|
|
45
|
+
|
|
46
|
+
> pip install -U biblematedata
|
|
47
|
+
|
|
48
|
+
# Set Up Data For BibleMate Web / BibleMate CLI
|
|
49
|
+
|
|
50
|
+
> biblematedata
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
setup.py
|
|
2
|
+
biblematedata/README.md
|
|
3
|
+
biblematedata/config.py
|
|
4
|
+
biblematedata/main.py
|
|
5
|
+
biblematedata/package_name.txt
|
|
6
|
+
biblematedata/requirements.txt
|
|
7
|
+
biblematedata/version.txt
|
|
8
|
+
biblematedata.egg-info/PKG-INFO
|
|
9
|
+
biblematedata.egg-info/SOURCES.txt
|
|
10
|
+
biblematedata.egg-info/dependency_links.txt
|
|
11
|
+
biblematedata.egg-info/entry_points.txt
|
|
12
|
+
biblematedata.egg-info/requires.txt
|
|
13
|
+
biblematedata.egg-info/top_level.txt
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
biblematedata
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
from setuptools import setup
|
|
2
|
+
from setuptools.command.install import install
|
|
3
|
+
import os, shutil, platform, sys
|
|
4
|
+
|
|
5
|
+
version = "0.0.1"
|
|
6
|
+
with open(os.path.join("biblematedata", "version.txt"), "w", encoding="utf-8") as fileObj:
|
|
7
|
+
fileObj.write(version)
|
|
8
|
+
|
|
9
|
+
# package name
|
|
10
|
+
package_name_0 = "package_name.txt"
|
|
11
|
+
with open(package_name_0, "r", encoding="utf-8") as fileObj:
|
|
12
|
+
package = fileObj.read()
|
|
13
|
+
package_name_1 = os.path.join(package, "package_name.txt") # package readme
|
|
14
|
+
shutil.copy(package_name_0, package_name_1)
|
|
15
|
+
|
|
16
|
+
# update package readme
|
|
17
|
+
latest_readme = os.path.join("..", "README.md") # github repository readme
|
|
18
|
+
package_readme = os.path.join(package, "README.md") # package readme
|
|
19
|
+
shutil.copy(latest_readme, package_readme)
|
|
20
|
+
with open(package_readme, "r", encoding="utf-8") as fileObj:
|
|
21
|
+
long_description = fileObj.read()
|
|
22
|
+
|
|
23
|
+
# get required packages
|
|
24
|
+
install_requires = []
|
|
25
|
+
with open(os.path.join(package, "requirements.txt"), "r") as fileObj:
|
|
26
|
+
for line in fileObj.readlines():
|
|
27
|
+
mod = line.strip()
|
|
28
|
+
if mod:
|
|
29
|
+
install_requires.append(mod)
|
|
30
|
+
|
|
31
|
+
# make sure config.py is empty
|
|
32
|
+
open(os.path.join(package, "config.py"), "w").close()
|
|
33
|
+
|
|
34
|
+
# https://packaging.python.org/en/latest/guides/distributing-packages-using-setuptools/
|
|
35
|
+
setup(
|
|
36
|
+
name=package,
|
|
37
|
+
version=version,
|
|
38
|
+
python_requires=">=3.10, <3.13",
|
|
39
|
+
description=f"BibleMate AI - Automate Your Bible Study",
|
|
40
|
+
long_description=long_description,
|
|
41
|
+
author="Eliran Wong",
|
|
42
|
+
author_email="support@marvel.bible",
|
|
43
|
+
packages=[
|
|
44
|
+
package,
|
|
45
|
+
],
|
|
46
|
+
package_data={
|
|
47
|
+
package: ["*.*"],
|
|
48
|
+
},
|
|
49
|
+
license="GNU General Public License (GPL)",
|
|
50
|
+
install_requires=install_requires,
|
|
51
|
+
extras_require={
|
|
52
|
+
'genai': ["google-genai>=1.46.0"], # Dependencies for running Vertex AI
|
|
53
|
+
},
|
|
54
|
+
entry_points={
|
|
55
|
+
"console_scripts": [
|
|
56
|
+
f"{package}={package}.main:main",
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
keywords="mcp agent biblemate ai anthropic azure chatgpt cohere deepseek genai github googleai groq llamacpp mistral ollama openai vertexai xai",
|
|
60
|
+
url="https://biblemate.ai",
|
|
61
|
+
project_urls={
|
|
62
|
+
"Source": "https://github.com/eliranwong/biblemate",
|
|
63
|
+
"Tracker": "https://github.com/eliranwong/biblemate/issues",
|
|
64
|
+
"Documentation": "https://github.com/eliranwong/biblemate/wiki",
|
|
65
|
+
"Funding": "https://www.paypal.me/MarvelBible",
|
|
66
|
+
},
|
|
67
|
+
classifiers=[
|
|
68
|
+
# Reference: https://pypi.org/classifiers/
|
|
69
|
+
|
|
70
|
+
# How mature is this project? Common values are
|
|
71
|
+
# 3 - Alpha
|
|
72
|
+
# 4 - Beta
|
|
73
|
+
# 5 - Production/Stable
|
|
74
|
+
'Development Status :: 5 - Production/Stable',
|
|
75
|
+
|
|
76
|
+
# Indicate who your project is intended for
|
|
77
|
+
'Intended Audience :: End Users/Desktop',
|
|
78
|
+
'Topic :: Utilities',
|
|
79
|
+
'Topic :: Scientific/Engineering :: Artificial Intelligence',
|
|
80
|
+
'Topic :: Software Development :: Build Tools',
|
|
81
|
+
|
|
82
|
+
# Pick your license as you wish (should match "license" above)
|
|
83
|
+
'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)',
|
|
84
|
+
|
|
85
|
+
# Specify the Python versions you support here. In particular, ensure
|
|
86
|
+
# that you indicate whether you support Python 2, Python 3 or both.
|
|
87
|
+
#'Programming Language :: Python :: 3.8',
|
|
88
|
+
#'Programming Language :: Python :: 3.9',
|
|
89
|
+
# currently, fastmcp supports 3.10-3.12
|
|
90
|
+
'Programming Language :: Python :: 3.10',
|
|
91
|
+
'Programming Language :: Python :: 3.11',
|
|
92
|
+
'Programming Language :: Python :: 3.12',
|
|
93
|
+
],
|
|
94
|
+
)
|