-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathinit_bot_db.py
More file actions
76 lines (61 loc) · 2.23 KB
/
init_bot_db.py
File metadata and controls
76 lines (61 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import os
import hydra
from hydra.utils import instantiate
from omegaconf import DictConfig, ListConfig
from sqlalchemy import create_engine
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import sessionmaker
from bot.db import Admin, Base
def init_admin_db(config: DictConfig) -> None:
father_tg_id = os.getenv("FATHER_TG_ID")
father_tg_tag = os.getenv("FATHER_TG_TAG")
engine = create_engine(config["bot_db_connection"])
Base.metadata.create_all(engine)
Session = sessionmaker(engine)
try:
with Session() as session:
main_admin = Admin(
tg_id=father_tg_id,
tg_tag=father_tg_tag,
can_add_info=True,
can_add_new_admins=True,
added_by_id=father_tg_id,
)
session.add(main_admin)
session.commit()
except IntegrityError:
print("Admin database has been already created and initialized!")
def init_pgsql_docstore(store_config: DictConfig):
docstore = instantiate(store_config, async_mode=False)
docstore.create_schema()
# flake8: noqa: C901
def finditems(obj, key):
found = []
if isinstance(obj, (dict, DictConfig)):
if key in obj:
found.append(obj[key])
for _, v in obj.items():
if isinstance(v, (dict, DictConfig)):
result = finditems(v, key)
if result is not None:
found.extend(result)
elif isinstance(v, (list, ListConfig)):
for item in v:
result = finditems(item, key)
if result is not None:
found.extend(result)
elif isinstance(obj, (list, ListConfig)):
for item in obj:
result = finditems(item, key)
if result is not None:
found.extend(result)
return list(set(found))
@hydra.main(version_base="1.3", config_path="../configs", config_name="default")
def main(config: DictConfig) -> None:
init_admin_db(config)
docstore_cfgs = finditems(config, "docstore")
for cfg in docstore_cfgs:
if cfg["_target_"] == "crag.storage.PGSQLDocStore":
init_pgsql_docstore(cfg)
if __name__ == "__main__":
main()