From fec374edba286d9be45d73338f63d4eccfedbe8a Mon Sep 17 00:00:00 2001 From: Fringg Date: Thu, 26 Mar 2026 10:34:14 +0300 Subject: [PATCH] chore: ruff format --- app/cabinet/routes/admin_users.py | 6 +--- app/handlers/admin/promo_offers.py | 2 +- app/handlers/admin/tariffs.py | 3 +- app/keyboards/inline.py | 14 +++++---- app/services/blocked_users_service.py | 6 +--- app/services/broadcast_service.py | 4 +-- app/services/campaign_service.py | 8 +++-- app/services/monitoring_service.py | 30 ++++--------------- app/services/recurrent_payment_service.py | 4 +-- app/services/remnawave_service.py | 4 ++- app/services/remnawave_webhook_service.py | 19 +++++++----- .../subscription_auto_purchase_service.py | 19 +++--------- app/services/user_cart_service.py | 4 +-- app/services/user_service.py | 4 ++- 14 files changed, 48 insertions(+), 79 deletions(-) diff --git a/app/cabinet/routes/admin_users.py b/app/cabinet/routes/admin_users.py index 5e6eddc9..758fea3e 100644 --- a/app/cabinet/routes/admin_users.py +++ b/app/cabinet/routes/admin_users.py @@ -2722,11 +2722,7 @@ async def sync_user_from_panel( if settings.is_multi_tariff_enabled(): # In multi-tariff mode, user.remnawave_uuid is None; UUIDs live on subscriptions - sub_uuids = [ - s.remnawave_uuid - for s in (getattr(user, 'subscriptions', None) or []) - if s.remnawave_uuid - ] + sub_uuids = [s.remnawave_uuid for s in (getattr(user, 'subscriptions', None) or []) if s.remnawave_uuid] for _uuid in sub_uuids: panel_user = await api.get_user_by_uuid(_uuid) if panel_user: diff --git a/app/handlers/admin/promo_offers.py b/app/handlers/admin/promo_offers.py index a2491a43..ebde4123 100644 --- a/app/handlers/admin/promo_offers.py +++ b/app/handlers/admin/promo_offers.py @@ -2128,7 +2128,7 @@ async def send_offer_to_segment(callback: CallbackQuery, db_user: User, db: Asyn for user in users: if settings.is_multi_tariff_enabled(): all_squads: set[str] = set() - for s in (getattr(user, 'subscriptions', None) or []): + for s in getattr(user, 'subscriptions', None) or []: all_squads.update(s.connected_squads or []) connected = all_squads else: diff --git a/app/handlers/admin/tariffs.py b/app/handlers/admin/tariffs.py index de5fd77a..82c91569 100644 --- a/app/handlers/admin/tariffs.py +++ b/app/handlers/admin/tariffs.py @@ -2184,8 +2184,7 @@ async def confirm_delete_tariff( warning = '' if subs_count > 0: warning = ( - f'\n\n⚠️ Внимание! На этом тарифе {subs_count} неактивных подписок.\n' - f'Они потеряют привязку к тарифу.' + f'\n\n⚠️ Внимание! На этом тарифе {subs_count} неактивных подписок.\nОни потеряют привязку к тарифу.' ) await callback.message.edit_text( diff --git a/app/keyboards/inline.py b/app/keyboards/inline.py index 26f990ed..7b488604 100644 --- a/app/keyboards/inline.py +++ b/app/keyboards/inline.py @@ -1874,9 +1874,7 @@ def get_subscription_expiring_keyboard(subscription_id: int, language: str = DEF else texts.t('MY_SUBSCRIPTION_BUTTON', '📱 Моя подписка') ) - extend_callback = ( - f'se:{subscription_id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' - ) + extend_callback = f'se:{subscription_id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' return InlineKeyboardMarkup( inline_keyboard=[ @@ -2553,7 +2551,11 @@ def get_device_selection_keyboard( keyboard.append(row) if settings.CONNECT_BUTTON_MODE == 'guide': - _osl_cb = f'open_subscription_link:{sub_id}' if sub_id and settings.is_multi_tariff_enabled() else 'open_subscription_link' + _osl_cb = ( + f'open_subscription_link:{sub_id}' + if sub_id and settings.is_multi_tariff_enabled() + else 'open_subscription_link' + ) keyboard.append( [ InlineKeyboardButton( @@ -2671,7 +2673,9 @@ def get_connection_guide_keyboard( ] ) - _sc_cb = f'subscription_connect:{sub_id}' if sub_id and settings.is_multi_tariff_enabled() else 'subscription_connect' + _sc_cb = ( + f'subscription_connect:{sub_id}' if sub_id and settings.is_multi_tariff_enabled() else 'subscription_connect' + ) keyboard.extend( [ [ diff --git a/app/services/blocked_users_service.py b/app/services/blocked_users_service.py index 31a39f1a..76fbaa9b 100644 --- a/app/services/blocked_users_service.py +++ b/app/services/blocked_users_service.py @@ -160,11 +160,7 @@ class BlockedUsersService: async def _check_single_user(self, user: User) -> BlockCheckResult: """Проверяет одного пользователя.""" - sub_uuids = [ - s.remnawave_uuid - for s in (getattr(user, 'subscriptions', None) or []) - if s.remnawave_uuid - ] + sub_uuids = [s.remnawave_uuid for s in (getattr(user, 'subscriptions', None) or []) if s.remnawave_uuid] remnawave_uuids = sub_uuids or ([user.remnawave_uuid] if user.remnawave_uuid else []) if not user.telegram_id: diff --git a/app/services/broadcast_service.py b/app/services/broadcast_service.py index fb7cc00e..59746aaa 100644 --- a/app/services/broadcast_service.py +++ b/app/services/broadcast_service.py @@ -543,9 +543,7 @@ async def cleanup_blocked_broadcast_users(blocked_telegram_ids: list[int]) -> No # Проверяем, есть ли активная оплаченная подписка from app.database.crud.subscription import is_active_paid_subscription - sub_result = await session.execute( - select(Subscription).where(Subscription.user_id == user.id) - ) + sub_result = await session.execute(select(Subscription).where(Subscription.user_id == user.id)) all_subs = sub_result.scalars().all() if any(is_active_paid_subscription(s) for s in all_subs): diff --git a/app/services/campaign_service.py b/app/services/campaign_service.py index f6eeecf8..84fceaff 100644 --- a/app/services/campaign_service.py +++ b/app/services/campaign_service.py @@ -179,7 +179,9 @@ class AdvertisingCampaignService: try: await self.subscription_service.update_remnawave_user(db, existing_subscription) except Exception as error: - logger.error('❌ Ошибка синхронизации RemnaWave при продлении кампании', campaign_id=campaign.id, error=error) + logger.error( + '❌ Ошибка синхронизации RemnaWave при продлении кампании', campaign_id=campaign.id, error=error + ) logger.info( '🎁 Подписка пользователя продлена по кампании на дней', @@ -354,7 +356,9 @@ class AdvertisingCampaignService: try: await self.subscription_service.create_remnawave_user(db, new_subscription) except Exception as error: - logger.error('❌ Ошибка синхронизации RemnaWave для тарифа кампании', campaign_id=campaign.id, error=error) + logger.error( + '❌ Ошибка синхронизации RemnaWave для тарифа кампании', campaign_id=campaign.id, error=error + ) logger.info( '🎁 Пользователю выдан тариф по кампании на дней', diff --git a/app/services/monitoring_service.py b/app/services/monitoring_service.py index 9b6a24b5..f4455266 100644 --- a/app/services/monitoring_service.py +++ b/app/services/monitoring_service.py @@ -1315,11 +1315,7 @@ class MonitoringService: from aiogram.types import InlineKeyboardMarkup - extend_callback = ( - f'se:{subscription.id}' - if settings.is_multi_tariff_enabled() - else 'subscription_extend' - ) + extend_callback = f'se:{subscription.id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' keyboard = InlineKeyboardMarkup( inline_keyboard=[ [build_miniapp_or_callback_button(text='💎 Продлить подписку', callback_data=extend_callback)], @@ -1414,16 +1410,8 @@ class MonitoringService: from aiogram.types import InlineKeyboardMarkup - extend_callback = ( - f'se:{subscription.id}' - if settings.is_multi_tariff_enabled() - else 'subscription_extend' - ) - sub_btn_text = ( - '📱 Мои подписки' - if settings.is_multi_tariff_enabled() - else '📱 Моя подписка' - ) + extend_callback = f'se:{subscription.id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' + sub_btn_text = '📱 Мои подписки' if settings.is_multi_tariff_enabled() else '📱 Моя подписка' keyboard = InlineKeyboardMarkup( inline_keyboard=[ [ @@ -1611,11 +1599,7 @@ class MonitoringService: from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup - extend_callback = ( - f'se:{subscription.id}' - if settings.is_multi_tariff_enabled() - else 'subscription_extend' - ) + extend_callback = f'se:{subscription.id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' keyboard = InlineKeyboardMarkup( inline_keyboard=[ @@ -1707,11 +1691,7 @@ class MonitoringService: from aiogram.types import InlineKeyboardButton, InlineKeyboardMarkup - extend_callback = ( - f'se:{subscription.id}' - if settings.is_multi_tariff_enabled() - else 'subscription_extend' - ) + extend_callback = f'se:{subscription.id}' if settings.is_multi_tariff_enabled() else 'subscription_extend' keyboard = InlineKeyboardMarkup( inline_keyboard=[ diff --git a/app/services/recurrent_payment_service.py b/app/services/recurrent_payment_service.py index 028f3a6f..2b8739f7 100644 --- a/app/services/recurrent_payment_service.py +++ b/app/services/recurrent_payment_service.py @@ -55,9 +55,7 @@ _daily_guard = _DailyGuard() def _build_extend_keyboard(texts, subscription_id: int | None = None) -> InlineKeyboardMarkup: """Клавиатура с кнопкой продления подписки для уведомлений.""" extend_callback = ( - f'se:{subscription_id}' - if settings.is_multi_tariff_enabled() and subscription_id - else 'subscription_extend' + f'se:{subscription_id}' if settings.is_multi_tariff_enabled() and subscription_id else 'subscription_extend' ) return InlineKeyboardMarkup( inline_keyboard=[ diff --git a/app/services/remnawave_service.py b/app/services/remnawave_service.py index dfb7560f..45fdf4c8 100644 --- a/app/services/remnawave_service.py +++ b/app/services/remnawave_service.py @@ -2161,7 +2161,9 @@ class RemnaWaveService: create_kwargs['external_squad_uuid'] = sub.tariff.external_squad_uuid # Определяем UUID для обновления - panel_uuid = sub.remnawave_uuid if settings.is_multi_tariff_enabled() else user.remnawave_uuid + panel_uuid = ( + sub.remnawave_uuid if settings.is_multi_tariff_enabled() else user.remnawave_uuid + ) # Если нет UUID в базе, ищем пользователя по telegram_id в панели if not panel_uuid and user.telegram_id: diff --git a/app/services/remnawave_webhook_service.py b/app/services/remnawave_webhook_service.py index 8e1697ba..ac456dcb 100644 --- a/app/services/remnawave_webhook_service.py +++ b/app/services/remnawave_webhook_service.py @@ -413,8 +413,7 @@ class RemnaWaveWebhookService: # Fallback 2: all lookups exhausted logger.warning( - 'Webhook: подписка не найдена ни по одному методу поиска, ' - 'возвращаем (user, None)', + 'Webhook: подписка не найдена ни по одному методу поиска, возвращаем (user, None)', remnawave_uuid=remnawave_uuid, user_id=user.id, ) @@ -447,9 +446,7 @@ class RemnaWaveWebhookService: texts = get_texts(user.language) button_text = texts.get('WEBHOOK_RENEW_BUTTON', 'Renew subscription') extend_callback = ( - f'se:{subscription_id}' - if settings.is_multi_tariff_enabled() and subscription_id - else 'subscription_extend' + f'se:{subscription_id}' if settings.is_multi_tariff_enabled() and subscription_id else 'subscription_extend' ) return InlineKeyboardMarkup( inline_keyboard=[ @@ -928,13 +925,17 @@ class RemnaWaveWebhookService: await self._notify_user( user, 'WEBHOOK_SUB_DELETED', - reply_markup=self._get_renew_keyboard(user, getattr(subscription, 'id', None) if subscription else None), + reply_markup=self._get_renew_keyboard( + user, getattr(subscription, 'id', None) if subscription else None + ), ) else: await self._notify_user( user, 'WEBHOOK_SUB_DELETED', - reply_markup=self._get_renew_keyboard(user, getattr(subscription, 'id', None) if subscription else None), + reply_markup=self._get_renew_keyboard( + user, getattr(subscription, 'id', None) if subscription else None + ), ) async def _attempt_panel_recreation(self, db: AsyncSession, user: User, subscription: Subscription) -> bool: @@ -1046,7 +1047,9 @@ class RemnaWaveWebhookService: self, db: AsyncSession, user: User, subscription: Subscription | None, data: dict ) -> None: sub_id = getattr(subscription, 'id', None) if subscription else None - await self._notify_user(user, 'WEBHOOK_SUB_EXPIRED_24H_AGO', reply_markup=self._get_renew_keyboard(user, sub_id)) + await self._notify_user( + user, 'WEBHOOK_SUB_EXPIRED_24H_AGO', reply_markup=self._get_renew_keyboard(user, sub_id) + ) async def _handle_first_connected( self, db: AsyncSession, user: User, subscription: Subscription | None, data: dict diff --git a/app/services/subscription_auto_purchase_service.py b/app/services/subscription_auto_purchase_service.py index 2021dee9..8706298e 100644 --- a/app/services/subscription_auto_purchase_service.py +++ b/app/services/subscription_auto_purchase_service.py @@ -1748,8 +1748,7 @@ async def _auto_add_traffic( subscription = await get_subscription_by_id_for_user(db, parsed_sub_id, user.id) if parsed_sub_id else None if subscription is None and parsed_sub_id: logger.warning( - 'Автопокупка трафика: subscription_id из корзины не найден у пользователя, ' - 'НЕ используем эвристику', + 'Автопокупка трафика: subscription_id из корзины не найден у пользователя, НЕ используем эвристику', saved_subscription_id=parsed_sub_id, user_id=user.id, ) @@ -2081,11 +2080,7 @@ async def try_auto_extend_expired_after_topup( from app.database.crud.subscription import get_all_subscriptions_by_user_id all_subs = await get_all_subscriptions_by_user_id(db, user.id) - expired_subs = [ - s - for s in all_subs - if s.status == SubscriptionStatus.EXPIRED.value and not s.is_trial - ] + expired_subs = [s for s in all_subs if s.status == SubscriptionStatus.EXPIRED.value and not s.is_trial] if not expired_subs: subscription = None else: @@ -2180,10 +2175,7 @@ async def try_auto_extend_expired_after_topup( # modified in the last 60 seconds (indicates a concurrent renewal just landed). try: await db.refresh(subscription, attribute_names=['updated_at']) - if ( - subscription.updated_at - and (datetime.now(UTC) - subscription.updated_at) < timedelta(seconds=60) - ): + if subscription.updated_at and (datetime.now(UTC) - subscription.updated_at) < timedelta(seconds=60): logger.info( '🔄 Автопродление expired: пропуск — подписка обновлена секунд назад', format_user_id=_format_user_id(user), @@ -2524,10 +2516,7 @@ async def try_resume_disabled_daily_after_topup( # was modified in the last 60 seconds (indicates a concurrent charge just landed). try: await db.refresh(subscription, attribute_names=['updated_at']) - if ( - subscription.updated_at - and (datetime.now(UTC) - subscription.updated_at) < timedelta(seconds=60) - ): + if subscription.updated_at and (datetime.now(UTC) - subscription.updated_at) < timedelta(seconds=60): logger.info( '🔄 Авто-возобновление daily: пропуск — подписка обновлена секунд назад', format_user_id=_format_user_id(user), diff --git a/app/services/user_cart_service.py b/app/services/user_cart_service.py index a75d7fc7..62b87181 100644 --- a/app/services/user_cart_service.py +++ b/app/services/user_cart_service.py @@ -355,9 +355,7 @@ class UserCartService: global_cart = await self.get_user_cart(user_id) if global_cart and global_cart.get('subscription_id') is not None: sub_id = global_cart['subscription_id'] - already_covered = any( - c.get('subscription_id') == sub_id for c in results - ) + already_covered = any(c.get('subscription_id') == sub_id for c in results) if not already_covered: results.append(global_cart) except Exception as e: diff --git a/app/services/user_service.py b/app/services/user_service.py index 8f1a4c27..d0ac4a46 100644 --- a/app/services/user_service.py +++ b/app/services/user_service.py @@ -758,7 +758,9 @@ class UserService: logger.info( '✅ RemnaWave подписка восстановлена при разблокировке', subscription_id=sub.id, - remnawave_uuid=sub.remnawave_uuid if settings.is_multi_tariff_enabled() else user.remnawave_uuid, + remnawave_uuid=sub.remnawave_uuid + if settings.is_multi_tariff_enabled() + else user.remnawave_uuid, ) except Exception as e: logger.error(