style: apply ruff format to payment integrations

CI ruff format --check failed on 13 files. Applied ruff format to bring
them in line with project formatting (line wrapping, trailing commas,
quote consistency). No functional changes.
This commit is contained in:
Fringg
2026-05-04 20:47:48 +03:00
parent cd8be32671
commit 17732a0370
13 changed files with 29 additions and 67 deletions
+2 -10
View File
@@ -2295,11 +2295,7 @@ class Settings(BaseSettings):
return html.escape(self.get_antilopay_sberpay_display_name()) return html.escape(self.get_antilopay_sberpay_display_name())
def is_jupiter_enabled(self) -> bool: def is_jupiter_enabled(self) -> bool:
return ( return self.JUPITER_ENABLED and self.JUPITER_TOKEN is not None and self.JUPITER_SECRET is not None
self.JUPITER_ENABLED
and self.JUPITER_TOKEN is not None
and self.JUPITER_SECRET is not None
)
def get_jupiter_display_name(self) -> str: def get_jupiter_display_name(self) -> str:
name = (self.JUPITER_DISPLAY_NAME or '').strip() name = (self.JUPITER_DISPLAY_NAME or '').strip()
@@ -2319,11 +2315,7 @@ class Settings(BaseSettings):
return html.escape(self.get_jupiter_sbp_display_name()) return html.escape(self.get_jupiter_sbp_display_name())
def is_donut_enabled(self) -> bool: def is_donut_enabled(self) -> bool:
return ( return self.DONUT_ENABLED and self.DONUT_TOKEN is not None and self.DONUT_SECRET is not None
self.DONUT_ENABLED
and self.DONUT_TOKEN is not None
and self.DONUT_SECRET is not None
)
def get_donut_display_name(self) -> str: def get_donut_display_name(self) -> str:
name = (self.DONUT_DISPLAY_NAME or '').strip() name = (self.DONUT_DISPLAY_NAME or '').strip()
+1 -3
View File
@@ -54,9 +54,7 @@ async def get_antilopay_payment_by_order_id(db: AsyncSession, order_id: str) ->
return result.scalar_one_or_none() return result.scalar_one_or_none()
async def get_antilopay_payment_by_invoice_id( async def get_antilopay_payment_by_invoice_id(db: AsyncSession, antilopay_payment_id: str) -> AntilopayPayment | None:
db: AsyncSession, antilopay_payment_id: str
) -> AntilopayPayment | None:
"""Получает платеж по ID от Antilopay.""" """Получает платеж по ID от Antilopay."""
result = await db.execute( result = await db.execute(
select(AntilopayPayment).where(AntilopayPayment.antilopay_payment_id == antilopay_payment_id) select(AntilopayPayment).where(AntilopayPayment.antilopay_payment_id == antilopay_payment_id)
+2 -6
View File
@@ -54,13 +54,9 @@ async def get_donut_payment_by_order_id(db: AsyncSession, order_id: str) -> Donu
return result.scalar_one_or_none() return result.scalar_one_or_none()
async def get_donut_payment_by_invoice_id( async def get_donut_payment_by_invoice_id(db: AsyncSession, donut_transaction_id: str) -> DonutPayment | None:
db: AsyncSession, donut_transaction_id: str
) -> DonutPayment | None:
"""Получает платёж по transaction_id, выданному Donut.""" """Получает платёж по transaction_id, выданному Donut."""
result = await db.execute( result = await db.execute(select(DonutPayment).where(DonutPayment.donut_transaction_id == donut_transaction_id))
select(DonutPayment).where(DonutPayment.donut_transaction_id == donut_transaction_id)
)
return result.scalar_one_or_none() return result.scalar_one_or_none()
+1 -3
View File
@@ -54,9 +54,7 @@ async def get_jupiter_payment_by_order_id(db: AsyncSession, order_id: str) -> Ju
return result.scalar_one_or_none() return result.scalar_one_or_none()
async def get_jupiter_payment_by_invoice_id( async def get_jupiter_payment_by_invoice_id(db: AsyncSession, jupiter_transaction_id: str) -> JupiterPayment | None:
db: AsyncSession, jupiter_transaction_id: str
) -> JupiterPayment | None:
"""Получает платёж по transaction_id, выданному Jupiter.""" """Получает платёж по transaction_id, выданному Jupiter."""
result = await db.execute( result = await db.execute(
select(JupiterPayment).where(JupiterPayment.jupiter_transaction_id == jupiter_transaction_id) select(JupiterPayment).where(JupiterPayment.jupiter_transaction_id == jupiter_transaction_id)
+1 -3
View File
@@ -56,9 +56,7 @@ async def get_lava_payment_by_order_id(db: AsyncSession, order_id: str) -> LavaP
async def get_lava_payment_by_invoice_id(db: AsyncSession, lava_invoice_id: str) -> LavaPayment | None: async def get_lava_payment_by_invoice_id(db: AsyncSession, lava_invoice_id: str) -> LavaPayment | None:
"""Получает платёж по invoice_id, выданному Lava.""" """Получает платёж по invoice_id, выданному Lava."""
result = await db.execute( result = await db.execute(select(LavaPayment).where(LavaPayment.lava_invoice_id == lava_invoice_id))
select(LavaPayment).where(LavaPayment.lava_invoice_id == lava_invoice_id)
)
return result.scalar_one_or_none() return result.scalar_one_or_none()
+3 -1
View File
@@ -1478,7 +1478,9 @@ class LavaPayment(Base):
return self.status in ['failed', 'expired', 'cancel', 'cancelled', 'amount_mismatch', 'error'] return self.status in ['failed', 'expired', 'cancel', 'cancelled', 'amount_mismatch', 'error']
def __repr__(self) -> str: # pragma: no cover - debug helper def __repr__(self) -> str: # pragma: no cover - debug helper
return f'<LavaPayment(id={self.id}, order_id={self.order_id}, amount={self.amount_rubles}₽, status={self.status})>' return (
f'<LavaPayment(id={self.id}, order_id={self.order_id}, amount={self.amount_rubles}₽, status={self.status})>'
)
class PromoGroup(Base): class PromoGroup(Base):
+1 -5
View File
@@ -2084,11 +2084,7 @@ def get_payment_methods_keyboard(amount_kopeks: int, language: str = DEFAULT_LAN
) )
has_direct_payment_methods = True has_direct_payment_methods = True
if ( if settings.is_lava_enabled() and not settings.is_lava_card_enabled() and not settings.is_lava_sbp_enabled():
settings.is_lava_enabled()
and not settings.is_lava_card_enabled()
and not settings.is_lava_sbp_enabled()
):
lava_name = settings.get_lava_display_name() lava_name = settings.get_lava_display_name()
keyboard.append( keyboard.append(
[ [
+1 -3
View File
@@ -199,9 +199,7 @@ class AuraPayService:
# Сортируем ключи по алфавиту и конкатенируем значения # Сортируем ключи по алфавиту и конкатенируем значения
# None → '' (PHP implode() converts null to empty string, not "None") # None → '' (PHP implode() converts null to empty string, not "None")
sorted_keys = sorted(payload.keys()) sorted_keys = sorted(payload.keys())
concatenated_values = ''.join( concatenated_values = ''.join(str(payload[key]) if payload[key] is not None else '' for key in sorted_keys)
str(payload[key]) if payload[key] is not None else '' for key in sorted_keys
)
expected = hmac.new( expected = hmac.new(
self.secret_key.encode('utf-8'), self.secret_key.encode('utf-8'),
+1 -3
View File
@@ -398,9 +398,7 @@ class AntilopayPaymentMixin:
) )
created_transaction = True created_transaction = True
await antilopay_crud.link_antilopay_payment_to_transaction( await antilopay_crud.link_antilopay_payment_to_transaction(db, payment=payment, transaction_id=transaction.id)
db, payment=payment, transaction_id=transaction.id
)
should_credit_balance = created_transaction or not balance_already_credited should_credit_balance = created_transaction or not balance_already_credited
+2 -8
View File
@@ -115,11 +115,7 @@ class DonutPaymentMixin:
transaction_id = api_result.get('transaction_id') transaction_id = api_result.get('transaction_id')
details = api_result.get('details') or {} details = api_result.get('details') or {}
payment_url = ( payment_url = api_result.get('redirect_url') or details.get('qrcode_url') or actual_return_url
api_result.get('redirect_url')
or details.get('qrcode_url')
or actual_return_url
)
logger.info( logger.info(
'Donut: получен ответ API', 'Donut: получен ответ API',
@@ -374,9 +370,7 @@ class DonutPaymentMixin:
) )
created_transaction = True created_transaction = True
await donut_crud.link_donut_payment_to_transaction( await donut_crud.link_donut_payment_to_transaction(db, payment=payment, transaction_id=transaction.id)
db, payment=payment, transaction_id=transaction.id
)
should_credit_balance = created_transaction or not balance_already_credited should_credit_balance = created_transaction or not balance_already_credited
+2 -6
View File
@@ -94,9 +94,7 @@ class JupiterPaymentMixin:
callback_url = self._build_jupiter_callback_url() callback_url = self._build_jupiter_callback_url()
customer_id = str(tg_id) if tg_id != 'guest' else f'guest-{order_id[-6:]}' customer_id = str(tg_id) if tg_id != 'guest' else f'guest-{order_id[-6:]}'
customer_name = ( customer_name = (
getattr(user, 'first_name', None) getattr(user, 'first_name', None) or getattr(user, 'username', None) or settings.JUPITER_FALLBACK_NAME
or getattr(user, 'username', None)
or settings.JUPITER_FALLBACK_NAME
) )
api_result = await jupiter_service.create_payment( api_result = await jupiter_service.create_payment(
@@ -366,9 +364,7 @@ class JupiterPaymentMixin:
) )
created_transaction = True created_transaction = True
await jupiter_crud.link_jupiter_payment_to_transaction( await jupiter_crud.link_jupiter_payment_to_transaction(db, payment=payment, transaction_id=transaction.id)
db, payment=payment, transaction_id=transaction.id
)
should_credit_balance = created_transaction or not balance_already_credited should_credit_balance = created_transaction or not balance_already_credited
+2 -6
View File
@@ -146,9 +146,7 @@ class LavaPaymentMixin:
) )
lifetime = settings.LAVA_PAYMENT_LIFETIME_MINUTES lifetime = settings.LAVA_PAYMENT_LIFETIME_MINUTES
expires_at = self._parse_lava_expired(expired_str) or ( expires_at = self._parse_lava_expired(expired_str) or (datetime.now(UTC) + timedelta(minutes=lifetime))
datetime.now(UTC) + timedelta(minutes=lifetime)
)
lava_crud = import_module('app.database.crud.lava') lava_crud = import_module('app.database.crud.lava')
local_payment = await lava_crud.create_lava_payment( local_payment = await lava_crud.create_lava_payment(
@@ -456,9 +454,7 @@ class LavaPaymentMixin:
) )
created_transaction = True created_transaction = True
await lava_crud.link_lava_payment_to_transaction( await lava_crud.link_lava_payment_to_transaction(db, payment=payment, transaction_id=transaction.id)
db, payment=payment, transaction_id=transaction.id
)
should_credit_balance = created_transaction or not balance_already_credited should_credit_balance = created_transaction or not balance_already_credited
+10 -10
View File
@@ -35,13 +35,15 @@ def _enable_apple_iap(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr( monkeypatch.setattr(
settings, settings,
'APPLE_IAP_PRODUCTS', 'APPLE_IAP_PRODUCTS',
json.dumps({ json.dumps(
'com.bitnet.vpnclient.topup.100': 10_000, {
'com.bitnet.vpnclient.topup.300': 30_000, 'com.bitnet.vpnclient.topup.100': 10_000,
'com.bitnet.vpnclient.topup.500': 50_000, 'com.bitnet.vpnclient.topup.300': 30_000,
'com.bitnet.vpnclient.topup.1000': 100_000, 'com.bitnet.vpnclient.topup.500': 50_000,
'com.bitnet.vpnclient.topup.3000': 300_000, 'com.bitnet.vpnclient.topup.1000': 100_000,
}), 'com.bitnet.vpnclient.topup.3000': 300_000,
}
),
raising=False, raising=False,
) )
@@ -297,9 +299,7 @@ class TestVerifyAndDecodeJWS:
def test_rejects_empty_x5c(self) -> None: def test_rejects_empty_x5c(self) -> None:
service = AppleIAPService() service = AppleIAPService()
header = ( header = base64.urlsafe_b64encode(json.dumps({'alg': 'ES256', 'x5c': []}).encode()).rstrip(b'=').decode()
base64.urlsafe_b64encode(json.dumps({'alg': 'ES256', 'x5c': []}).encode()).rstrip(b'=').decode()
)
payload = base64.urlsafe_b64encode(b'{}').rstrip(b'=').decode() payload = base64.urlsafe_b64encode(b'{}').rstrip(b'=').decode()
sig = base64.urlsafe_b64encode(b'sig').rstrip(b'=').decode() sig = base64.urlsafe_b64encode(b'sig').rstrip(b'=').decode()
assert service._verify_and_decode_jws(f'{header}.{payload}.{sig}') is None assert service._verify_and_decode_jws(f'{header}.{payload}.{sig}') is None