Fix payment plugin launch validation

This commit is contained in:
2026-04-10 17:33:04 +02:00
parent 610fd6d748
commit 489c6ce75b
2 changed files with 36 additions and 16 deletions

View File

@@ -19,13 +19,39 @@ def _is_dummy_payment_app(app_label: str) -> bool:
return "payment_dummy" in parts or normalized == "payment_dummy"
def _load_config_payload() -> dict:
config_path = Path(__file__).resolve().parent / "ocyan.json"
if not config_path.exists():
return {}
with config_path.open("r", encoding="utf-8") as handle:
return json.load(handle)
def get_declared_plugins() -> list[str]:
payload = _load_config_payload()
return [str(plugin) for plugin in payload.get("ocyan_plugins", [])]
def get_declared_payment_apps(installed_apps: list[str] | None = None) -> list[str]:
declared_plugins = [plugin for plugin in get_declared_plugins() if "payment" in plugin.lower()]
if declared_plugins:
return declared_plugins
installed_apps = installed_apps or list(settings.INSTALLED_APPS)
return [app for app in installed_apps if "payment" in app.lower()]
def get_checkout_apps() -> list[str]:
return [app for app in settings.INSTALLED_APPS if "checkout" in app.lower()]
def validate_payment_provider_config() -> None:
installed_apps = list(settings.INSTALLED_APPS)
payment_apps = [app for app in installed_apps if "payment" in app.lower()]
checkout_apps = [app for app in installed_apps if "checkout" in app.lower()]
payment_apps = get_declared_payment_apps(installed_apps)
checkout_apps = get_checkout_apps()
config_plugins = get_declared_plugins()
if not payment_apps:
raise CommandError("No payment app found in INSTALLED_APPS.")
raise CommandError("No payment app declared for this project.")
if not checkout_apps:
raise CommandError("No checkout app found in INSTALLED_APPS.")
if not any("oscar_checkout" in app.lower() for app in checkout_apps):
@@ -34,9 +60,9 @@ def validate_payment_provider_config() -> None:
raise CommandError(
"Demo data plugin detected in INSTALLED_APPS. Remove all demodata plugins before launch."
)
if any(_is_dummy_payment_app(app) for app in payment_apps):
if any(_is_dummy_payment_app(app) for app in config_plugins):
raise CommandError(
"Dummy payment app detected in INSTALLED_APPS. Use a real provider plugin before production launch."
"Dummy payment app is declared in ocyan.json. Use a real provider plugin before production launch."
)
if any("mollie" in app.lower() for app in payment_apps):
@@ -58,11 +84,7 @@ def validate_payment_provider_config() -> None:
"Mollie key must be a live key for production launch (expected prefix 'live_')."
)
config_path = Path(__file__).resolve().parent / "ocyan.json"
if config_path.exists():
with config_path.open("r", encoding="utf-8") as handle:
config_payload = json.load(handle)
config_plugins = [str(plugin) for plugin in config_payload.get("ocyan_plugins", [])]
if config_plugins:
if any(_is_demo_data(plugin) for plugin in config_plugins):
raise CommandError(
"Demo data plugin detected in ocyan.json. Remove it before launch."

View File

@@ -17,7 +17,8 @@ from mandelstudio.idea_marketplace import (
SHORT_DESCRIPTION_ATTRIBUTE_CODE,
)
from mandelstudio.launch_validation import (
_is_dummy_payment_app,
get_checkout_apps,
get_declared_payment_apps,
validate_payment_provider_config,
)
@@ -38,11 +39,8 @@ class Command(BaseCommand):
validate_payment_provider_config()
installed_apps = list(settings.INSTALLED_APPS)
if any(_is_dummy_payment_app(app) for app in installed_apps):
raise CommandError(
"Dummy payment app detected in INSTALLED_APPS. Use a real provider plugin before production launch."
)
payment_apps = get_declared_payment_apps(installed_apps)
checkout_apps = get_checkout_apps()
config_path = Path(__file__).resolve().parents[2] / "ocyan.json"
if config_path.exists():
with config_path.open("r", encoding="utf-8") as handle: