170 похожих чатов

Друзья, пытаюсь перейти на данный темплейт для написания телеграмм ботов Я

не совсем могу понять как мне правильно в хендлеры передавать информацию из баз данных, и при этом сохранить принципы ООП?
В файле bot.py в объект бота передаётся конфиг собранный из датаклассов. В models я написал своеобразный модуль для подключения к безе данных - класс в который нужно передать данные для аутентификации. Но получается чтобы создать объект подключения мне нужно импортировать объект бота в хендлеры, из чего выходит циркулирующий импорт. Я чёт запутался, скучаю по временам когда можно было писать говнокод и не париться(

Получается раньше я мог сделать users_tables = UsersTables(db_auth) прямо в модуле с хендлерами где UsersTables объект подключения к базе данных, и начать выполнять запросы в бд и получать ответы пользуясь функциями класса. Сейчас же для того чтобы так поступить мне нужно получать конфиг из config.load_config('env') в этой части репозитория, что мне кажется костыльным, так как конфиг в темплейте собирается в bot.py и передаётся в объект бота, вот здесь.

29 ответов

14 просмотров

эээ я чет запутался

> Но получается чтобы создать объект подключения мне нужно импортировать объект бота в хендлеры нет. Чтобы создать объект подключения тебе нужен конфиг подклчения. > в объект бота передаётся конфиг собранный из датаклассов. плохая идея. конфиг должен передаваться частями туда куда надо напрямую без каких-то божественных хранилищ конфигов

m-dar Автор вопроса

То есть не будет костыльным, если я буду использовать config.load_config('env') везде где мне заблагоразумится?

m-dar Автор вопроса
m dar
То есть не будет костыльным, если я буду использов...

Ну да, впринципе понял, я чёт из мухи слона раздул

m dar
То есть не будет костыльным, если я буду использов...

я сказал передавать нужные части куда надо, а не грузить везде заново

m-dar Автор вопроса
Tishka17
я сказал передавать нужные части куда надо, а не г...

Если ты имеешь ввиду что нужно грузить конфиг максимум в каждом модуле, а не в каждой функции, то это я понимаю

m dar
Если ты имеешь ввиду что нужно грузить конфиг макс...

нет, максимум в мейн функции или тестах

m-dar Автор вопроса
Tishka17
нет, максимум в мейн функции или тестах

тогда я все ещё не понимаю как мне пользоваться конфигом из мейна, и при этом не ловить циркулирующий импорт. и вопрос отсаётся тот же что и был

m dar
тогда я все ещё не понимаю как мне пользоваться ко...

https://github.com/Tishka17/tgbot_template/blob/master/tgbot/middlewares/db.py у меня вот так сделано

в смысле? ты передал параметры коннекта в мидлварь, таким образом они ни очем не знает больше и умеет создавать коннекты. затем эти коннекты прилетают в репо/хэндлер который может их юзать

m-dar Автор вопроса
Tishka17
в смысле? ты передал параметры коннекта в мидлварь...

то есть в каждом хенделе я могу получать данные для коннекта и работать таким образом? async def admin_start(message: Message, data): await message.reply("Hello, admin!") users_tables = models.UsersTables(data.db.database, data.db.tables, data.db.auth) await users_tables.new_user("1234", "da")

m-dar Автор вопроса
Tishka17
шта

Ты сам говоришь миддлварь передаёт данные для коннекта в хендлер

m-dar Автор вопроса
Tishka17
что за data.db.database, data.db.tables, data.db.a...

@dataclass class DbConfig: host: str password: str user: str database: str tables: list auth: dict

m dar
Ты сам говоришь миддлварь передаёт данные для конн...

что за users_tables - почему таблицы юзеров тебе прилетают из мидлвари?

m dar
@dataclass class DbConfig: host: str passw...

что он делает в хэндлере

m-dar Автор вопроса
Tishka17
что за users_tables - почему таблицы юзеров тебе п...

users_tables это объект соединения с базой данных с методами работы с определённым таблицами

m dar
users_tables это объект соединения с базой данных ...

users_tables - это "таблицы пользвоателей", назови нормально

m dar
users_tables это объект соединения с базой данных ...

я тебе дал ссылку на мой шаблон, ты посмотрел?

m-dar Автор вопроса
Tishka17
я тебе дал ссылку на мой шаблон, ты посмотрел?

Там вроде как нет примера работы с базой данных

m-dar Автор вопроса

Миддлварь который я не понял как работает, но явно не как коннектор с бд?

m dar
Миддлварь который я не понял как работает, но явно...

мидлварь тупо создает нужные для хэндлеров объекты

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
База данных не поможет. Шифрование не поможет. Какие там ещё варианты? Накидывайте.
КТ315
20
А табстоп это сообщение от окна или от элемента управления?
The Bird of Hermes
18
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Открыл свой двухкилобайтный экзешник в x32dbg, а тут какая-то хрень. Смущает кнопка "выполнить до пользовательского кода", а что ещё может быть в файле помимо него ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
11
Мне были интересны дишные хаки и я нашёл любопытный способ на форуме через __traits, что-то вроде int delegate(int) fac = (int n) => n == 0 ? 1 : n * __traits(parent, {})(n - ...
Constantin F.
1
Вопрос тем кто смотрит видео и слушает подкасты - как вы потом ищете нужную вам информацию? Вот статью я прочитал, потом могу искать нужную мне часть банальным поиском. Пропус...
Aleksandr Druzhinin
4
Всем привет, подскажите/посоветуйте пожалуйста. Фаердак компоненты, имею одно место где бизнес хочет видеть при открытии формы список всех клиентов, это порядка 30к. Мои дово...
Sasha Sch
14
Ребят, если кто в курсе - скажите, а в загранке такое же засилье маркетплейсов? или там простые сермяжные интернет-магазины живут попроще?
Андрей [aharito] Харитонов
14
Коллеги, доброе утро. Запустил на удаленном хосте приложение (ручками зашел туда по ssh и запустил, не командой удаленно). Создал потом ssh-туннель, и с моей машины приложение...
Δημήτηρ
9
Карта сайта