fix: catch init fiat providers (#3281)

This commit is contained in:
dni ⚡ 2025-07-17 13:58:03 +02:00 committed by GitHub
parent 851c952c6d
commit 133afff8ee
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 4 deletions

View file

@ -176,6 +176,11 @@ async def test_connection(provider: str) -> SimpleStatus:
This function should be called when setting up or testing the Stripe integration. This function should be called when setting up or testing the Stripe integration.
""" """
fiat_provider = await get_fiat_provider(provider) fiat_provider = await get_fiat_provider(provider)
if not fiat_provider:
return SimpleStatus(
success=False,
message=f"Fiat provider '{provider}' not found.",
)
status = await fiat_provider.status() status = await fiat_provider.status()
if status.error_message: if status.error_message:
return SimpleStatus( return SimpleStatus(

View file

@ -136,6 +136,9 @@ async def create_fiat_invoice(
internal_payment = await create_wallet_invoice(wallet_id, invoice_data) internal_payment = await create_wallet_invoice(wallet_id, invoice_data)
fiat_provider = await get_fiat_provider(fiat_provider_name) fiat_provider = await get_fiat_provider(fiat_provider_name)
if not fiat_provider:
raise InvoiceError("No fiat provider found.", status="failed")
fiat_invoice = await fiat_provider.create_invoice( fiat_invoice = await fiat_provider.create_invoice(
amount=invoice_data.amount, amount=invoice_data.amount,
payment_hash=internal_payment.payment_hash, payment_hash=internal_payment.payment_hash,

View file

@ -3,6 +3,8 @@ from __future__ import annotations
import importlib import importlib
from enum import Enum from enum import Enum
from loguru import logger
from lnbits.fiat.base import FiatProvider from lnbits.fiat.base import FiatProvider
from lnbits.settings import settings from lnbits.settings import settings
@ -15,7 +17,7 @@ class FiatProviderType(Enum):
stripe = "StripeWallet" stripe = "StripeWallet"
async def get_fiat_provider(name: str) -> FiatProvider: async def get_fiat_provider(name: str) -> FiatProvider | None:
if name not in FiatProviderType.__members__: if name not in FiatProviderType.__members__:
raise ValueError(f"Fiat provider '{name}' is not supported.") raise ValueError(f"Fiat provider '{name}' is not supported.")
@ -27,13 +29,18 @@ async def get_fiat_provider(name: str) -> FiatProvider:
del fiat_providers[name] del fiat_providers[name]
else: else:
return fiat_provider return fiat_provider
fiat_providers[name] = _init_fiat_provider(FiatProviderType[name]) _provider = _init_fiat_provider(FiatProviderType[name])
if not _provider:
return None
fiat_providers[name] = _provider
return fiat_providers[name] return fiat_providers[name]
def _init_fiat_provider(fiat_provider: FiatProviderType) -> FiatProvider: def _init_fiat_provider(fiat_provider: FiatProviderType) -> FiatProvider | None:
if not settings.is_fiat_provider_enabled(fiat_provider.name): if not settings.is_fiat_provider_enabled(fiat_provider.name):
raise ValueError(f"Fiat provider '{fiat_provider.name}' not enabled.") logger.warning(f"Fiat provider '{fiat_provider.name}' not enabled.")
return None
provider_constructor = getattr(fiat_module, fiat_provider.value) provider_constructor = getattr(fiat_module, fiat_provider.value)
return provider_constructor() return provider_constructor()