Проблема с рефакторингом файла Python

Решил я значит сделать рефакторинг файла Python, а именно разбить его на несколько файлов, дабы проще было работать.

Однако, что-то пошло не так и после from date import back_anket, бот просто ничего не делает (программа не останавливается, а просто работает в холостую).

Вот части кода 3 файлов:

Это файл api_token.py

import telebot
import sqlite3
    
API_TOKEN = 'API_TOKEN'
bot = telebot.TeleBot(API_TOKEN)

Файл date.py

from api_token import bot, sqlite3
    
def create_propper_list():
    connect = sqlite3.connect('bd.sql')
    curs = connect.cursor()
    
    # Fetch user info from the database
    curs.execute("SELECT chat_id FROM users")
    column_data = [row for row in curs.fetchall()]
    curs.close()
    connect.close()
    return column_data
    
@bot.callback_query_handler(func=lambda callback: True)
def back_anket(ankets):
    user_list = create_propper_list()
    print(user_list)
    
bot.polling(none_stop=True)

Это главный файл bot.py

import io
import json
from telebot import types
import sqlite3
        
from api_token import bot
from date import back_anket
        
start = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Старт')
                
name = None
age = None
...

К сожалению, в главном файле, как я уже и сказал после импорта все работает в холостую. Надеюсь на помощь.


Ответы (1 шт):

Автор решения: Amgarak

Проблема в bot.polling(none_stop=True).

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

Предлагаю bot.polling(none_stop=True) вызывать в самом конце, после всех импортов и вызовов.


Убрать из date.py -> bot.polling(none_stop=True) и переместить его в файл ->bot.py.

import io
import json
from telebot import types
import sqlite3

from api_token import bot
from date import back_anket

start = types.ReplyKeyboardMarkup(resize_keyboard=True)
btn1 = types.KeyboardButton('Старт')

name = None
age = None
...

if __name__ == '__main__':
    bot.polling(none_stop=True)
→ Ссылка