From 24a2837f349689a1b561a0db268873ce284bdb16 Mon Sep 17 00:00:00 2001 From: profitroll Date: Fri, 18 Aug 2023 20:43:09 +0200 Subject: [PATCH] Added migrations --- commands.json | 17 +++++++++++++++++ config_example.json | 19 +------------------ main.py | 22 +++++++++++++++++++++- modules/migrator.py | 22 ++++++++++++++++++++++ requirements.txt | 1 + 5 files changed, 62 insertions(+), 19 deletions(-) create mode 100644 commands.json create mode 100644 modules/migrator.py diff --git a/commands.json b/commands.json new file mode 100644 index 0000000..6799c00 --- /dev/null +++ b/commands.json @@ -0,0 +1,17 @@ +{ + "start": { + "scopes": [ + { + "name": "BotCommandScopeDefault" + } + ] + }, + "remove_commands": { + "scopes": [ + { + "name": "BotCommandScopeChat", + "chat_id": "owner" + } + ] + } +} \ No newline at end of file diff --git a/config_example.json b/config_example.json index 2fc6588..4a77861 100644 --- a/config_example.json +++ b/config_example.json @@ -19,22 +19,5 @@ "reports": { "chat_id": "owner" }, - "disabled_plugins": [], - "commands": { - "start": { - "scopes": [ - { - "name": "BotCommandScopeDefault" - } - ] - }, - "remove_commands": { - "scopes": [ - { - "name": "BotCommandScopeChat", - "chat_id": "owner" - } - ] - } - } + "disabled_plugins": [] } \ No newline at end of file diff --git a/main.py b/main.py index dca1b60..efb838e 100644 --- a/main.py +++ b/main.py @@ -1,9 +1,13 @@ import contextlib import logging +from argparse import ArgumentParser from os import getpid +from pathlib import Path +from libbot import sync from libbot.pyrogram.classes import PyroClient +from modules.migrator import migrate_database from modules.scheduler import scheduler # Uncomment this and the line below client declaration @@ -21,6 +25,16 @@ logging.basicConfig( logger = logging.getLogger(__name__) +parser = ArgumentParser( + prog="__name__", + description="__description__", +) + +# Remove if no database is being used +parser.add_argument("--migrate", action="store_true") + +args = parser.parse_args() + with contextlib.suppress(ImportError): import uvloop @@ -28,9 +42,15 @@ with contextlib.suppress(ImportError): def main(): - client = PyroClient(scheduler=scheduler) + client = PyroClient( + scheduler=scheduler, commands_source=sync.json_read(Path("commands.json")) + ) # Conversation(client) + # Remove if no database is being used + if args.migrate: + migrate_database() + try: client.run() except KeyboardInterrupt: diff --git a/modules/migrator.py b/modules/migrator.py new file mode 100644 index 0000000..5ebeb91 --- /dev/null +++ b/modules/migrator.py @@ -0,0 +1,22 @@ +from typing import Any, Mapping + +from libbot.sync import config_get +from mongodb_migrations.cli import MigrationManager +from mongodb_migrations.config import Configuration + + +def migrate_database() -> None: + """Apply migrations from folder `migrations/` to the database""" + db_config: Mapping[str, Any] = config_get("database") + + manager_config = Configuration( + { + "mongo_host": db_config["host"], + "mongo_port": db_config["port"], + "mongo_database": db_config["name"], + "mongo_username": db_config["user"], + "mongo_password": db_config["password"], + } + ) + manager = MigrationManager(manager_config) + manager.run() diff --git a/requirements.txt b/requirements.txt index 21bd829..b53b25b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ apscheduler~=3.10.3 convopyro==0.5 +mongodb-migrations==1.3.0 pykeyboard==0.1.5 tgcrypto==1.2.5 uvloop==0.17.0