From 116a18eba1556499ede9fb87cca51b48dc2797c3 Mon Sep 17 00:00:00 2001 From: profitroll Date: Sun, 5 Nov 2023 13:20:01 +0000 Subject: [PATCH] [WIP] Database rework --- classes/importer/csv.py | 2 +- classes/importer/json.py | 2 +- classes/location.py | 2 +- classes/pyroclient.py | 2 +- config_example.json | 9 ++++++++- modules/database.py | 4 +--- modules/database_api.py | 29 +++++++++++++++++++++++++++++ modules/reminder.py | 2 +- modules/search_name.py | 2 +- modules/search_nearby.py | 2 +- plugins/commands/upcoming.py | 2 +- 11 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 modules/database_api.py diff --git a/classes/importer/csv.py b/classes/importer/csv.py index c876f92..f406135 100644 --- a/classes/importer/csv.py +++ b/classes/importer/csv.py @@ -6,7 +6,7 @@ from typing import Any, Dict, List, Union from bson import ObjectId from classes.importer.abstract import Importer -from modules.database import col_entries +from modules.database_api import col_entries class ImporterCSV(Importer): diff --git a/classes/importer/json.py b/classes/importer/json.py index 86afaad..798a301 100644 --- a/classes/importer/json.py +++ b/classes/importer/json.py @@ -5,7 +5,7 @@ from bson import ObjectId from ujson import loads from classes.importer.abstract import Importer -from modules.database import col_entries +from modules.database_api import col_entries class ImporterJSON(Importer): diff --git a/classes/location.py b/classes/location.py index 5f51a90..5a29557 100644 --- a/classes/location.py +++ b/classes/location.py @@ -6,7 +6,7 @@ from pytz import timezone as pytz_timezone from pytz.tzinfo import BaseTzInfo, DstTzInfo from classes.point import Point -from modules.database import col_locations +from modules.database_api import col_locations @dataclass diff --git a/classes/pyroclient.py b/classes/pyroclient.py index db580c8..adbcf21 100644 --- a/classes/pyroclient.py +++ b/classes/pyroclient.py @@ -7,7 +7,7 @@ from pyrogram.types import User from classes.location import Location from classes.pyrouser import PyroUser -from modules.database import col_locations +from modules.database_api import col_locations from modules.reminder import remind diff --git a/config_example.json b/config_example.json index cff73b1..3302d10 100644 --- a/config_example.json +++ b/config_example.json @@ -14,7 +14,14 @@ "password": null, "host": "127.0.0.1", "port": 27017, - "name": "garbagebot" + "name": "garbage_bot" + }, + "database_api": { + "user": null, + "password": null, + "host": "127.0.0.1", + "port": 27017, + "name": "garbage_reminder" }, "search": { "radius": 0.1 diff --git a/modules/database.py b/modules/database.py index f85e739..03e589b 100644 --- a/modules/database.py +++ b/modules/database.py @@ -1,4 +1,4 @@ -"""Module that provides all database collections""" +"""Module that provides bot's database collections.""" from typing import Any, Mapping @@ -24,5 +24,3 @@ db_client = AsyncClient(con_string) db: AsyncDatabase = db_client.get_database(name=db_config["name"]) col_users: AsyncCollection = db.get_collection("users") -col_entries: AsyncCollection = db.get_collection("entries") -col_locations: AsyncCollection = db.get_collection("locations") diff --git a/modules/database_api.py b/modules/database_api.py new file mode 100644 index 0000000..fcbf92a --- /dev/null +++ b/modules/database_api.py @@ -0,0 +1,29 @@ +"""Module that provides API database collections. +It's possible to use REST API client instead, but +using MongoDB directly is MUCH faster this way.""" + +from typing import Any, Mapping + +from async_pymongo import AsyncClient, AsyncCollection, AsyncDatabase +from libbot.sync import config_get + +db_config: Mapping[str, Any] = config_get("database_api") + +if db_config["user"] is not None and db_config["password"] is not None: + con_string = "mongodb://{0}:{1}@{2}:{3}/{4}".format( + db_config["user"], + db_config["password"], + db_config["host"], + db_config["port"], + db_config["name"], + ) +else: + con_string = "mongodb://{0}:{1}/{2}".format( + db_config["host"], db_config["port"], db_config["name"] + ) + +db_client = AsyncClient(con_string) +db: AsyncDatabase = db_client.get_database(name=db_config["name"]) + +col_entries: AsyncCollection = db.get_collection("entries") +col_locations: AsyncCollection = db.get_collection("locations") diff --git a/modules/reminder.py b/modules/reminder.py index e4b5794..f408d9a 100644 --- a/modules/reminder.py +++ b/modules/reminder.py @@ -7,7 +7,7 @@ from libbot.pyrogram.classes import PyroClient from classes.enums import GarbageType from classes.location import Location from classes.pyrouser import PyroUser -from modules.database import col_entries, col_users +from modules.database_api import col_entries, col_users from modules.utils import from_utc logger = logging.getLogger(__name__) diff --git a/modules/search_name.py b/modules/search_name.py index 5fae746..534d726 100644 --- a/modules/search_name.py +++ b/modules/search_name.py @@ -6,7 +6,7 @@ from pyrogram.types import ForceReply, Message, ReplyKeyboardRemove from classes.location import Location from classes.pyroclient import PyroClient -from modules.database import col_locations +from modules.database_api import col_locations async def search_name(app: PyroClient, message: Message) -> Union[Location, None]: diff --git a/modules/search_nearby.py b/modules/search_nearby.py index 32def59..29604a3 100644 --- a/modules/search_nearby.py +++ b/modules/search_nearby.py @@ -6,7 +6,7 @@ from pyrogram.types import Message, ReplyKeyboardRemove from classes.location import Location from classes.pyroclient import PyroClient -from modules.database import col_locations +from modules.database_api import col_locations from modules.search_name import search_name diff --git a/plugins/commands/upcoming.py b/plugins/commands/upcoming.py index 9c67396..881958d 100644 --- a/plugins/commands/upcoming.py +++ b/plugins/commands/upcoming.py @@ -6,7 +6,7 @@ from pyrogram.types import Message from classes.garbage_entry import GarbageEntry from classes.pyroclient import PyroClient from modules import custom_filters -from modules.database import col_entries +from modules.database_api import col_entries @PyroClient.on_message(