diff --git a/controllerBD/db_loader.py b/controllerBD/db_loader.py index 5ab3c3c..5654979 100644 --- a/controllerBD/db_loader.py +++ b/controllerBD/db_loader.py @@ -1,9 +1,9 @@ from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker, declarative_base +from sqlalchemy.orm import declarative_base, sessionmaker from data.config import DB_DSN -engine = create_engine(DB_DSN, pool_pre_ping=True, isolation_level='AUTOCOMMIT') +engine = create_engine(DB_DSN, pool_pre_ping=True, isolation_level="AUTOCOMMIT") Session = sessionmaker(bind=engine) Base = declarative_base() diff --git a/controllerBD/services.py b/controllerBD/services.py index c5ad113..3eb5c1a 100644 --- a/controllerBD/services.py +++ b/controllerBD/services.py @@ -37,7 +37,9 @@ def update_one_user_mets(first_user: int, second_user: int): """Записывает в user_mets информацию об одном пользователе.""" with Session() as db_session: first_user_mets = ( - db_session.query(UserMets.met_info).filter(UserMets.id == first_user).first() + db_session.query(UserMets.met_info) + .filter(UserMets.id == first_user) + .first() ) user_mets = json.loads(first_user_mets[0]) new_met_id = ( @@ -101,18 +103,37 @@ def get_defaulf_pare_base_id(): def get_user_count_from_db(): with Session() as db_session: all_users = db_session.query(Users).count() - active_users = db_session.query(UserStatus).filter(UserStatus.status == 1).count() + active_users = ( + db_session.query(UserStatus).filter(UserStatus.status == 1).count() + ) return {"all_users": all_users, "active_users": active_users} + def get_active_user_names_from_db(): users = [] with Session() as db_session: - for active_user_id in [user.id for user in db_session.query(UserStatus).filter(UserStatus.status == 1).all()]: - user_tg_username = db_session.query(Username).filter(Username.id == active_user_id).one_or_none().username - user_name = db_session.query(Users).filter(Users.id == active_user_id).one_or_none().name + for active_user_id in [ + user.id + for user in db_session.query(UserStatus) + .filter(UserStatus.status == 1) + .all() + ]: + user_tg_username = ( + db_session.query(Username) + .filter(Username.id == active_user_id) + .one_or_none() + .username + ) + user_name = ( + db_session.query(Users) + .filter(Users.id == active_user_id) + .one_or_none() + .name + ) users.append({"name": user_name, "tg_username": user_tg_username}) return users + def get_user_id_from_db(teleg_id: int) -> int: """Получает id юзера в базе по телеграм id""" with Session() as db_session: @@ -123,7 +144,9 @@ def get_tg_username_from_db_by_teleg_id(teleg_id: int) -> int: """Получает телеграм-юзернейм по telegram id""" with Session() as db_session: base_id = get_user_id_from_db(teleg_id) - answer = db_session.query(Username.username).filter(Username.id == base_id).first() + answer = ( + db_session.query(Username.username).filter(Username.id == base_id).first() + ) if answer: return answer[0] return None @@ -132,7 +155,9 @@ def get_tg_username_from_db_by_teleg_id(teleg_id: int) -> int: def get_tg_username_from_db_by_base_id(base_id: int) -> int: """Получает телеграм-юзернейм по id в базе""" with Session() as db_session: - answer = db_session.query(Username.username).filter(Username.id == base_id).first() + answer = ( + db_session.query(Username.username).filter(Username.id == base_id).first() + ) if answer: return answer[0] return None diff --git a/data/config.py b/data/config.py index ecdf4ba..75ecc53 100644 --- a/data/config.py +++ b/data/config.py @@ -9,4 +9,4 @@ ADMIN_TG_ID = os.getenv("ADMIN_TG_ID") DEFAULT_PARE_iD = os.getenv("DEFAULT_PARE_iD") DEFAULT_PARE_USERNAME = os.getenv("DEFAULT_PARE_USERNAME") -IS_FOR_BUR = os.getenv("IS_FOR_BUR", False) \ No newline at end of file +IS_FOR_BUR = os.getenv("IS_FOR_BUR", False) diff --git a/handlers/admin/__init__.py b/handlers/admin/__init__.py index 8b13789..e69de29 100644 --- a/handlers/admin/__init__.py +++ b/handlers/admin/__init__.py @@ -1 +0,0 @@ - diff --git a/handlers/admin/admin_report.py b/handlers/admin/admin_report.py index c0c29b7..9547736 100644 --- a/handlers/admin/admin_report.py +++ b/handlers/admin/admin_report.py @@ -8,41 +8,41 @@ def prepare_user_info(): """Формируем список пользователей со штрафными баллами и другой инф.""" with Session() as db_session: query = text( - """SELECT - mr.about_whom_id, - ui.teleg_id, - ui.name, - un.username, + """SELECT + mr.about_whom_id, + ui.teleg_id, + ui.name, + un.username, COUNT( CASE WHEN mr.grade = 0 THEN 1 ELSE NULL END - ) AS cnt_fail, - MAX(mr.date_of_comment) AS last_comment, + ) AS cnt_fail, + MAX(mr.date_of_comment) AS last_comment, mr.comment, bl.ban_status FROM mets_reviews AS mr - LEFT JOIN user_info AS ui + LEFT JOIN user_info AS ui ON mr.about_whom_id = ui.id - LEFT JOIN tg_usernames AS un + LEFT JOIN tg_usernames AS un ON mr.about_whom_id = un.id LEFT JOIN ( - SELECT - banned_user_id, - MAX(id) AS max_id, + SELECT + banned_user_id, + MAX(id) AS max_id, ban_status FROM ban_list GROUP BY banned_user_id, ban_status - ) AS bl + ) AS bl ON mr.about_whom_id = bl.banned_user_id WHERE mr.grade = 0 - GROUP BY - mr.about_whom_id, - ui.teleg_id, - ui.name, - un.username, - mr.comment, + GROUP BY + mr.about_whom_id, + ui.teleg_id, + ui.name, + un.username, + mr.comment, bl.ban_status ORDER BY MAX(mr.date_of_comment) DESC; """ diff --git a/handlers/admin/ban_handlers.py b/handlers/admin/ban_handlers.py index 1e3c436..0a7c30f 100644 --- a/handlers/admin/ban_handlers.py +++ b/handlers/admin/ban_handlers.py @@ -6,17 +6,12 @@ from controllerBD.db_loader import Session from controllerBD.models import BanList, Holidays, UserStatus from handlers.admin.handlers import admin_menu -from handlers.admin.validators import ban_validator, comment_validator, unban_validator +from handlers.admin.validators import (ban_validator, comment_validator, + unban_validator) from handlers.decorators import admin_handlers -from keyboards.admin import ( - add_to_ban_list, - admin_ban_markup, - admin_cancel_markup, - back_to_main_markup, - ban_list, - cancel, - remove_from_ban_list, -) +from keyboards.admin import (add_to_ban_list, admin_ban_markup, + admin_cancel_markup, back_to_main_markup, + ban_list, cancel, remove_from_ban_list) from keyboards.user import back_to_main from loader import bot, logger from states import AdminData @@ -59,10 +54,9 @@ async def ban_list_add(message: types.Message): async def ban_list_add_answer(message: types.Message, state: FSMContext): """Получение ответа от админа и проверка введенного id.""" logger.info(f"Для добавления в бан введен пользователь " f"с if {message.text}.") - user_id = message.text if not await ban_validator(message): return - await state.update_data(banned_user_id=user_id) + await state.update_data(banned_user_id=int(message.text)) await comment_to_ban(message) @@ -137,10 +131,9 @@ async def ban_list_remove(message: types.Message): async def ban_list_remove_answer(message: types.Message, state: FSMContext): """Получение ответа с id пользователем для вывода из бана. Валидация.""" logger.info(f"Для вывода из бана введен пользователь " f"с if {message.text}.") - user_id = message.text if not await unban_validator(message): return - await state.update_data(unbanned_user_id=user_id) + await state.update_data(unbanned_user_id=int(message.text)) await comment_to_unban(message) diff --git a/handlers/admin/handlers.py b/handlers/admin/handlers.py index 4616bbd..57905b1 100644 --- a/handlers/admin/handlers.py +++ b/handlers/admin/handlers.py @@ -6,33 +6,23 @@ from controllerBD.db_loader import Session from controllerBD.models import UserStatus -from controllerBD.services import get_user_count_from_db, get_active_user_names_from_db -from handlers.admin.admin_report import prepare_report_message, prepare_user_info +from controllerBD.services import (get_active_user_names_from_db, + get_user_count_from_db) +from handlers.admin.admin_report import (prepare_report_message, + prepare_user_info) from handlers.decorators import admin_handlers from handlers.user.check_message import prepare_user_list, send_message from handlers.user.get_info_from_table import get_id_from_user_info_table -from keyboards.admin import ( - admin_cancel_markup, - admin_change_status_markup, - admin_inform_markup, - admin_menu_button, - admin_menu_markup, - admin_pair_generation_markup, - cancel, - change_pair_generation_date, - change_status, - do_not_take_part_button, - force_pair_generation, - go_back, - inform, - inform_active_users, - inform_bad_users, - pair_generation, - renew_pair_generation, - send_message_to_all_button, - stop_pair_generation, - take_part_button, -) +from keyboards.admin import (admin_cancel_markup, admin_change_status_markup, + admin_inform_markup, admin_menu_button, + admin_menu_markup, admin_pair_generation_markup, + cancel, change_pair_generation_date, + change_status, do_not_take_part_button, + force_pair_generation, go_back, inform, + inform_active_users, inform_bad_users, + pair_generation, renew_pair_generation, + send_message_to_all_button, stop_pair_generation, + take_part_button) from loader import bot, logger from match_algoritm.MatchingHelper import start_algoritm from states import AdminData @@ -77,8 +67,7 @@ async def inform_message_1(message: types.Message): for user in active_users: await bot.send_message( message.from_user.id, - f"Имя: {user['name']}\n" - f"Телеграм: @{user['tg_username']}", + f"Имя: {user['name']}\n" f"Телеграм: @{user['tg_username']}", ) diff --git a/handlers/admin/validators/validators.py b/handlers/admin/validators/validators.py index 514f6e9..4715cf5 100644 --- a/handlers/admin/validators/validators.py +++ b/handlers/admin/validators/validators.py @@ -96,7 +96,8 @@ async def resolve_user_input_to_db_id(user_input: str): return ( True, db_id, - f"Найден пользователь по явно указанному внутреннему ID: {internal_user.name}", + f"Найден пользователь по явно указанному внутреннему ID: " + f"{internal_user.name}", ) return False, None, f"Пользователь с внутренним ID {db_id} не найден" except ValueError: @@ -136,14 +137,16 @@ async def resolve_user_input_to_db_id(user_input: str): telegram_user.id, f"⚠️ ВНИМАНИЕ: ID {user_id} найден у двух пользователей! " f"Выбран по Telegram ID: {telegram_user.name}. " - f"Для точности используйте @username или укажите 'db:{user_id}' для внутреннего ID.", + f"Для точности используйте @username или укажите " + f"'db:{user_id}' для внутреннего ID.", ) # Случай 4: Не найден ни по одному типу ID return ( False, None, - f"Пользователь с ID {user_id} не найден ни в внутренней базе, ни среди Telegram ID", + f"Пользователь с ID {user_id} не найден ни в внутренней базе, " + f"ни среди Telegram ID", ) return False, None, "Неверный формат ввода. Введите число (ID) или username с @" diff --git a/handlers/user/check_message.py b/handlers/user/check_message.py index 56b43fb..d866176 100644 --- a/handlers/user/check_message.py +++ b/handlers/user/check_message.py @@ -53,4 +53,6 @@ async def change_status(teleg_id): """Смена статуса участия.""" with Session() as db_session: user_id = get_id_from_user_info_table(teleg_id) - db_session.query(UserStatus).filter(UserStatus.id == user_id).update({"status": 0}) + db_session.query(UserStatus).filter(UserStatus.id == user_id).update( + {"status": 0} + ) diff --git a/handlers/user/first_check.py b/handlers/user/first_check.py index 451acf9..62dfad5 100644 --- a/handlers/user/first_check.py +++ b/handlers/user/first_check.py @@ -13,31 +13,33 @@ async def check_and_add_registration_button(message: types.Message): """Проверка пользователя для последующих действий.""" text = ( - "Добро пожаловать в бот!\n\n" - "Для подбора пары нужно пройти небольшую регистрацию: " - "представиться и ответить на пару вопросов о себе, " - "чтобы собеседнику было проще начать с тобой разговор. Если" - " отвечать не хочется, то часть шагов можно пропустить.\n\n" - 'Нажми кнопку "Регистрация" ниже.\n\n' - "Для общения, помощи и рассказов о том, как прошла " - "встреча присоединяйся к нашему IT сообществу в " - "телеграм https://t.me/ViribusUnitisGroup" - ) + "Добро пожаловать в бот!\n\n" + "Для подбора пары нужно пройти небольшую регистрацию: " + "представиться и ответить на пару вопросов о себе, " + "чтобы собеседнику было проще начать с тобой разговор. Если" + " отвечать не хочется, то часть шагов можно пропустить.\n\n" + 'Нажми кнопку "Регистрация" ниже.\n\n' + "Для общения, помощи и рассказов о том, как прошла " + "встреча присоединяйся к нашему IT сообществу в " + "телеграм https://t.me/ViribusUnitisGroup" + ) if IS_FOR_BUR: - text = ( - """ + text = """ Привет! Добро пожаловать в бот для знакомств 2-й смены лагеря "Буревестник" 2025! -Каждый день мы будем подбирать для тебя нового собеседника из нашей смены. Ты сможешь узнать, кто это, и пойти познакомиться с ним вживую! Распределение происходит ежедневно, так что не упусти шанс найти новых друзей. -Чтобы начать, пройди небольшую регистрацию: представься и ответь на пару вопросов. Это поможет твоему новому знакомому завязать разговор. +Каждый день мы будем подбирать для тебя нового собеседника из нашей смены. \ +Ты сможешь узнать, кто это, и пойти познакомиться с ним вживую! \ +Распределение происходит ежедневно, так что не упусти шанс найти новых друзей. +Чтобы начать, пройди небольшую регистрацию: представься и ответь на пару вопросов. \ +Это поможет твоему новому знакомому завязать разговор. Нажми кнопку "Регистрация" ниже, чтобы найти первого собеседника! - -Для общения всей сменой, помощи и рассказов о встречах присоединяйся к нашему общему чату в Телеграме: https://t.me/+Nrp4dllTGetkNDJi + +Для общения всей сменой, помощи и рассказов о встречах присоединяйся к нашему \ +общему чату в Телеграме: https://t.me/+Nrp4dllTGetkNDJi """ - ) if not await check_user_in_base(message): await bot.send_message( message.from_user.id, diff --git a/handlers/user/get_info_from_table.py b/handlers/user/get_info_from_table.py index ae60396..e83cd3a 100644 --- a/handlers/user/get_info_from_table.py +++ b/handlers/user/get_info_from_table.py @@ -40,7 +40,9 @@ def get_user_data_from_db(teleg_id): def get_user_status_from_db(user_id): """Получение статуса участия пользователя из БД""" with Session() as db_session: - user_status = db_session.query(UserStatus).filter(UserStatus.id == user_id).first() + user_status = ( + db_session.query(UserStatus).filter(UserStatus.id == user_id).first() + ) return user_status.__dict__ diff --git a/handlers/user/handlers.py b/handlers/user/handlers.py index d65a3e7..bb4bc06 100644 --- a/handlers/user/handlers.py +++ b/handlers/user/handlers.py @@ -1,23 +1,27 @@ -from aiogram import exceptions, types -from aiogram.dispatcher import Dispatcher - -from controllerBD.db_loader import Session -from controllerBD.models import MetInfo -from handlers.decorators import user_handlers -from handlers.user.add_username import check_username -from handlers.user.get_info_from_table import ( - get_full_user_info_by_id, - get_holidays_status_from_db, - get_id_from_user_info_table, - get_user_data_from_db, - get_user_status_from_db, -) -from handlers.user.new_member import get_gender_from_db, start_registration +import logging + +from aiogram import Dispatcher, exceptions, types +from aiogram.dispatcher import FSMContext + +from handlers.decorators import (add_tg_username_to_db, check_ban, + check_profile_exists) +from handlers.user.ban_check import check_user_in_ban_list +from handlers.user.get_info_from_table import (get_full_user_info_by_id, + get_holidays_status_from_db, + get_id_from_user_info_table, + get_info_from_user_table, + get_user_data_from_db, + get_user_status_from_db) +from handlers.user.new_member import (add_user_to_base, get_gender_from_db, + start_registration) from handlers.user.reviews import get_met_id_with_user_last_week from handlers.user.work_with_date import date_from_db_to_message from keyboards.user import * -from loader import bot, logger +from loader import bot from sendler import make_message +from states.states import GeneralUserData, UserData + +logger = logging.getLogger(__name__) # @dp.errors_handler(exception=exceptions.RetryAfter) @@ -79,7 +83,7 @@ async def about_bot(message: types.Message): ) await bot.send_message( message.from_user.id, - """☕️ Алоха\, это бот Рандом Кофе\! + r"""☕️ Алоха\, это бот Рандом Кофе\! Бот еженедельно подбирает вам собеседника для очной или онлайн\-встречи\. Общайтесь\, делитесь идеями и расширяйте круг знакомств\! @@ -152,7 +156,10 @@ async def my_pare_check(message: types.Message): else: with Session() as db_session: users = ( - db_session.query(MetInfo).filter(MetInfo.id == met_id[0]).first().__dict__ + db_session.query(MetInfo) + .filter(MetInfo.id == met_id[0]) + .first() + .__dict__ ) if users["first_user_id"] == user_id: user_info = get_full_user_info_by_id(users["second_user_id"]) diff --git a/handlers/user/holidays.py b/handlers/user/holidays.py index f450887..6b90fde 100644 --- a/handlers/user/holidays.py +++ b/handlers/user/holidays.py @@ -9,18 +9,11 @@ from handlers.decorators import user_handlers from handlers.user.check_message import send_message from handlers.user.get_info_from_table import ( - get_id_from_user_info_table, - get_teleg_id_from_user_info_table, -) + get_id_from_user_info_table, get_teleg_id_from_user_info_table) from handlers.user.work_with_date import date_from_db_to_message -from keyboards.user import ( - holidays_length, - one_week_holidays_message, - set_holiday_message, - three_week_holidays_message, - turn_off_holidays, - two_week_holidays_message, -) +from keyboards.user import (holidays_length, one_week_holidays_message, + set_holiday_message, three_week_holidays_message, + turn_off_holidays, two_week_holidays_message) from loader import bot, logger @@ -92,7 +85,9 @@ async def cancel_holidays(message: types.Message): db_session.query(Holidays).filter(Holidays.id == user_id).update( {"status": 0, "till_date": "null"} ) - db_session.query(UserStatus).filter(UserStatus.id == user_id).update({"status": 1}) + db_session.query(UserStatus).filter(UserStatus.id == user_id).update( + {"status": 1} + ) db_session.commit() await bot.send_message(message.from_user.id, text="Режим каникул был отключен") logger.info( @@ -107,7 +102,9 @@ async def get_holidays(message: types.Message, date_to_return): db_session.query(Holidays).filter(Holidays.id == user_id).update( {"status": 1, "till_date": str(date_to_return)} ) - db_session.query(UserStatus).filter(UserStatus.id == user_id).update({"status": 0}) + db_session.query(UserStatus).filter(UserStatus.id == user_id).update( + {"status": 0} + ) db_session.commit() logger.info( f"Пользователь с TG_ID {message.from_user.id} " diff --git a/handlers/user/new_member.py b/handlers/user/new_member.py index 5c1b8c3..ad7df55 100644 --- a/handlers/user/new_member.py +++ b/handlers/user/new_member.py @@ -7,30 +7,17 @@ from handlers.admin.ban_handlers import back_to_main_markup from handlers.user.add_username import check_username from handlers.user.first_check import check_and_add_registration_button -from handlers.user.get_info_from_table import ( - check_user_in_base, - get_id_from_user_info_table, -) -from handlers.user.validators import ( - validate_about, - validate_birthday, - validate_check_info, - validate_gender, - validate_name, -) +from handlers.user.get_info_from_table import (check_user_in_base, + get_id_from_user_info_table) +from handlers.user.validators import (validate_about, validate_birthday, + validate_check_info, validate_gender, + validate_name) from handlers.user.work_with_date import date_from_message_to_db -from keyboards.user import ( - back_message, - confirm_markup, - man_message, - register_can_skip_reply_markup, - register_man_or_woman_markup, - registr_message, - return_to_begin_button, - return_to_begin_markup, - skip_message, - woman_message, -) +from keyboards.user import (back_message, confirm_markup, man_message, + register_can_skip_reply_markup, + register_man_or_woman_markup, registr_message, + return_to_begin_button, return_to_begin_markup, + skip_message, woman_message) from loader import bot, logger from states.states import UserData @@ -106,11 +93,17 @@ def add_to_db(teleg_id, name, birthday, about, gender): with Session() as db_session: db_session.add( Users( - teleg_id=teleg_id, name=name, birthday=birthday, about=about, gender=gender + teleg_id=teleg_id, + name=name, + birthday=birthday, + about=about, + gender=gender, ) ) db_session.commit() - logger.info(f"Пользователь с TG_ID {teleg_id} " f"добавлен в БД как новый участник") + logger.info( + f"Пользователь с TG_ID {teleg_id} " f"добавлен в БД как новый участник" + ) def update_profile_db(teleg_id, name, birthday, about, gender): diff --git a/handlers/user/review_history.py b/handlers/user/review_history.py index 12285d9..a35e62d 100644 --- a/handlers/user/review_history.py +++ b/handlers/user/review_history.py @@ -10,10 +10,8 @@ from controllerBD.services import get_tg_username_from_db_by_base_id from handlers.decorators import user_handlers from handlers.user.add_username import check_username -from handlers.user.get_info_from_table import ( - get_id_from_user_info_table, - get_user_info_by_id, -) +from handlers.user.get_info_from_table import (get_id_from_user_info_table, + get_user_info_by_id) from handlers.user.work_with_date import date_from_db_to_message from keyboards.user import my_reviews, review_yes_or_no from loader import bot, logger @@ -184,7 +182,9 @@ def prepare_message(user_id, met_id, review_info): def get_sqliterow_about_met(met_id): """Получаем словарь строки MetInfo.""" with Session() as db_session: - met_info = db_session.query(MetInfo).filter(MetInfo.id == met_id).first().__dict__ + met_info = ( + db_session.query(MetInfo).filter(MetInfo.id == met_id).first().__dict__ + ) return met_info diff --git a/handlers/user/reviews.py b/handlers/user/reviews.py index d666daf..1e17f8b 100644 --- a/handlers/user/reviews.py +++ b/handlers/user/reviews.py @@ -8,23 +8,12 @@ from controllerBD.models import MetInfo, MetsReview from handlers.decorators import admin_handlers from handlers.user.get_info_from_table import ( - get_id_from_user_info_table, - get_teleg_id_from_user_info_table, -) -from handlers.user.validators import ( - validate_about, - validate_review_grade, - validate_review_yes_or_no, -) + get_id_from_user_info_table, get_teleg_id_from_user_info_table) +from handlers.user.validators import (validate_about, validate_review_grade, + validate_review_yes_or_no) from keyboards.admin import review_messages -from keyboards.user import ( - menu_markup, - no_button, - review_skip, - review_yes_or_no, - skip_message, - yes_button, -) +from keyboards.user import (menu_markup, no_button, review_skip, + review_yes_or_no, skip_message, yes_button) from loader import bot, logger from states import ReviewState @@ -193,7 +182,8 @@ def get_met_id_with_user_last_week(user_id): and_( MetInfo.date.between(str(start_period), str(datetime.date.today)), or_( - MetInfo.first_user_id == user_id, MetInfo.second_user_id == user_id + MetInfo.first_user_id == user_id, + MetInfo.second_user_id == user_id, ), ) ) @@ -208,7 +198,9 @@ async def check_comment_in_bd(user_id, met_id): """Проверка наличия отзыва на встречу.""" with Session() as db_session: is_exist = db_session.query( - exists().where(and_(MetsReview.met_id == met_id, MetsReview.who_id == user_id)) + exists().where( + and_(MetsReview.met_id == met_id, MetsReview.who_id == user_id) + ) ).scalar() if not is_exist: return False diff --git a/handlers/user/validators/validators.py b/handlers/user/validators/validators.py index 5fc651c..bc39627 100644 --- a/handlers/user/validators/validators.py +++ b/handlers/user/validators/validators.py @@ -3,15 +3,8 @@ from aiogram import types -from keyboards.user import ( - all_right_message, - back_message, - man_message, - no_button, - skip_message, - woman_message, - yes_button, -) +from keyboards.user import (all_right_message, back_message, man_message, + no_button, skip_message, woman_message, yes_button) from loader import bot diff --git a/keyboards/__init__.py b/keyboards/__init__.py index 8b13789..e69de29 100644 --- a/keyboards/__init__.py +++ b/keyboards/__init__.py @@ -1 +0,0 @@ - diff --git a/keyboards/admin/admin_markups.py b/keyboards/admin/admin_markups.py index 38f2a06..b59b317 100644 --- a/keyboards/admin/admin_markups.py +++ b/keyboards/admin/admin_markups.py @@ -2,7 +2,8 @@ from aiogram.types import ReplyKeyboardMarkup from data import ADMIN_TG_ID -from keyboards.user.defalt_markups import back_to_main, menu_markup, menu_message +from keyboards.user.defalt_markups import (back_to_main, menu_markup, + menu_message) admin_menu_button = "Меню администратора" inform = "Отчет" diff --git a/loader.py b/loader.py index 04da888..0e31f6a 100644 --- a/loader.py +++ b/loader.py @@ -18,6 +18,7 @@ def timetz(*args): return datetime.now(timezone).timetuple() + def get_module_logger(mod_name): """ To use this, do logger = get_module_logger(__name__) @@ -25,12 +26,14 @@ def get_module_logger(mod_name): logger = logging.getLogger(mod_name) handler = logging.StreamHandler() formatter = logging.Formatter( - '%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s') + "%(asctime)s [%(name)-12s] %(levelname)-8s %(message)s" + ) handler.setFormatter(formatter) logger.addHandler(handler) logger.setLevel(logging.DEBUG) return logger + logger = get_module_logger("main_logger") aiogram_logger = get_module_logger("aio_logger") diff --git a/main.py b/main.py index c97785e..fd478e5 100644 --- a/main.py +++ b/main.py @@ -2,13 +2,15 @@ import aioschedule from aiogram import executor + from controllerBD.services import send_message_to_admins from data import IS_FOR_BUR from handlers.admin.ban_handlers import register_admin_ban_handlers from handlers.admin.handlers import register_admin_handlers from handlers.user.handlers import register_user_handlers from handlers.user.help_texts import register_help_texts_handlers -from handlers.user.holidays import register_holidays_handlers, sheduled_check_holidays +from handlers.user.holidays import (register_holidays_handlers, + sheduled_check_holidays) from handlers.user.new_member import register_new_member_handler from handlers.user.review_history import register_review_history_handler from handlers.user.reviews import register_review_handlers diff --git a/match_algoritm/MatchingHelper.py b/match_algoritm/MatchingHelper.py index 99cf88b..640764e 100644 --- a/match_algoritm/MatchingHelper.py +++ b/match_algoritm/MatchingHelper.py @@ -3,11 +3,8 @@ from controllerBD.db_loader import Session from controllerBD.models import UserMets, UserStatus -from controllerBD.services import ( - send_message_to_admins, - update_all_user_mets, - update_mets, -) +from controllerBD.services import (send_message_to_admins, + update_all_user_mets, update_mets) from handlers.user.check_message import check_message from loader import bot, logger from sendler.match_messages import send_match_messages @@ -94,7 +91,8 @@ def start(self): logger.info("Начало работы алгоритма") subprocess.call( [ - "./match_algoritm/matchingalogitm -f ./data/match_algoritm_data/input.txt --max" + "./match_algoritm/matchingalogitm -f " + "./data/match_algoritm_data/input.txt --max" ], shell=True, ) diff --git a/match_algoritm/blossom.py b/match_algoritm/blossom.py index fcd7a6d..ff44d1c 100644 --- a/match_algoritm/blossom.py +++ b/match_algoritm/blossom.py @@ -63,15 +63,17 @@ def __init__(self): def __assert_representation(self): for t in self.adjacency: - assert ( - len(self.adjacency[t]) > 0 - ), "Если вершина существует в матрице смежности, она должна иметь хотя бы одного соседа." + assert len(self.adjacency[t]) > 0, ( + "Если вершина существует в матрице смежности, она должна иметь " + "хотя бы одного соседа." + ) for u in self.adjacency[t]: self.__assert_edge_exists((t, u)) for t in self.unmarked_adjacency: - assert ( - len(self.unmarked_adjacency[t]) > 0 - ), "Если вершина существует в непомеченной матрице смежности, она должна иметь хотя бы одного соседа." + assert len(self.unmarked_adjacency[t]) > 0, ( + "Если вершина существует в непомеченной матрице смежности, она " + "должна иметь хотя бы одного соседа." + ) for u in self.unmarked_adjacency[t]: self.__assert_edge_exists((t, u)) self.__assert_unmarked_edge_exists((t, u)) @@ -240,9 +242,7 @@ def lift_path(self, path, blossom): assert False, "Путь не может содержать ровно одну вершину" if path[0] == blossom.get_id(): - ############################################################################################################ # ЛЕВАЯ КОНЕЧНАЯ ТОЧКА - ############################################################################################################ w = path[1] blossom_path = [] @@ -260,9 +260,7 @@ def lift_path(self, path, blossom): ), "At least one path with even edges must exist through the blossom" if path[-1] == blossom.get_id(): - ############################################################################################################ # ПРАВАЯ КОНЕЧНАЯ ТОЧКА - ############################################################################################################ u = path[-2] blossom_path = [] for v in blossom.traverse_left(): @@ -282,9 +280,7 @@ def lift_path(self, path, blossom): u, w = path[i - 1], path[i + 1] if u in self.adjacency[blossom.get_base()]: - #################################################################################################### - # ВРУТРЕНЯЯ ЧАСТЬ ЦВЕТКА ЛЕВООРЕНТИРОВАНИИА - #################################################################################################### + # ВНУТРЕННЯЯ ЧАСТЬ ЦВЕТКА ЛЕВООРИЕНТИРОВАННАЯ blossom_path = [] for v in blossom.traverse_left(): @@ -301,9 +297,7 @@ def lift_path(self, path, blossom): ), "At least one path with even edges must exist through the blossom" elif w in self.adjacency[blossom.get_base()]: - #################################################################################################### - # ВРУТРЕНЯЯ ЧАСТЬ ПРАВООРИЕНТИРОВАННА - #################################################################################################### + # ВНУТРЕННЯЯ ЧАСТЬ ПРАВООРИЕНТИРОВАННАЯ blossom_path = [] for v in blossom.traverse_left(): @@ -490,8 +484,8 @@ def contract(self, blossom): return matching -"""Лес — это неориентированный граф, в котором любые две вершины связаны не более чем одним путем. -Эквивалентно, лес - это неориентированный ациклический граф, все компоненты связности которого являются деревьями; +"""Лес — это неориентированный граф, в котором любые две вершины связаны не более чем одним путем. +Эквивалентно, лес - это неориентированный ациклический граф, все компоненты связности которого являются деревьями; другими словами, граф состоит из несвязного объединения деревьев.""" diff --git a/sendler/match_messages.py b/sendler/match_messages.py index 171740d..63781d4 100644 --- a/sendler/match_messages.py +++ b/sendler/match_messages.py @@ -4,12 +4,9 @@ from controllerBD.db_loader import Session from controllerBD.models import Gender, Users -from controllerBD.services import ( - get_defaulf_pare_base_id, - get_tg_username_from_db_by_teleg_id, - update_all_user_mets, - update_mets, -) +from controllerBD.services import (get_defaulf_pare_base_id, + get_tg_username_from_db_by_teleg_id, + update_all_user_mets, update_mets) from data import IS_FOR_BUR from handlers.user.work_with_date import date_from_db_to_message from keyboards.user import help_texts_markup