diff --git a/app/eventyay/config/settings.py b/app/eventyay/config/settings.py index 41d727f8fb..e1a55f0fb7 100644 --- a/app/eventyay/config/settings.py +++ b/app/eventyay/config/settings.py @@ -11,9 +11,12 @@ """ import configparser +import importlib +import importlib_metadata import importlib.util import os import sys +from collections import OrderedDict from importlib.metadata import entry_points from pathlib import Path from urllib.parse import urlparse @@ -208,10 +211,52 @@ def instance_name(request): ) ) -PLUGINS = [] -for entry_point in entry_points(group='pretalx.plugin'): - PLUGINS.append(entry_point.module) - # INSTALLED_APPS += tuple(entry_point.module) +raw_exclude = config.get('eventyay', 'plugins_exclude', fallback='') +PLUGINS_EXCLUDE = [m.strip() for m in raw_exclude.split(',') if m.strip()] + +eps = importlib_metadata.entry_points() + +# Pretix plugins +pretix_plugins = [ + ep.module + for ep in eps.select(group='pretix.plugin') + if ep.module not in PLUGINS_EXCLUDE +] + +# Pretalx plugins +pretalx_plugins = [ + ep.module + for ep in eps.select(group='pretalx.plugin') + if ep.module not in PLUGINS_EXCLUDE +] + +ALL_PLUGINS = sorted(pretix_plugins + pretalx_plugins) + + +# --------------------------- +# TODO: Adjust import paths for pretix_venueless, pretix_downstream, pretalx_pages +# Once ready, remove below 2 lines of code and just add Pretix plugins to INSTALLED_APPS like: +# INSTALLED_APPS += tuple(pretix_plugins) +SAFE_PRETIX_PLUGINS = [ + m for m in pretix_plugins if m not in {'pretix_venueless', 'pretix_pages'} +] +INSTALLED_APPS += tuple(SAFE_PRETIX_PLUGINS) + +# --------------------------- +# TODO: Adjust import paths for pretalx_venueless, pretalx_downstream, pretalx_pages +# Once ready, uncomment the following line to add Pretalx plugins to INSTALLED_APPS +# INSTALLED_APPS += tuple(pretalx_plugins) + +# Optional: Dynamic Import +LOADED_PLUGINS = OrderedDict() +for module_name in ALL_PLUGINS: + try: + module = importlib.import_module(module_name) + LOADED_PLUGINS[module_name] = module + except ModuleNotFoundError as e: + print(f"Plugin not found: {module_name} ({e})") + except ImportError as e: + print(f"Failed to import plugin {module_name}: {e}") _LIBRARY_MIDDLEWARES = ( 'corsheaders.middleware.CorsMiddleware', diff --git a/app/eventyay/control/forms/global_settings.py b/app/eventyay/control/forms/global_settings.py index 9902e9e915..e940487e30 100644 --- a/app/eventyay/control/forms/global_settings.py +++ b/app/eventyay/control/forms/global_settings.py @@ -281,6 +281,48 @@ def __init__(self, *args, **kwargs): ] ) + self.field_groups = [ + ('basics', _('Basics'), [ + 'footer_text', 'footer_link', 'banner_message', 'banner_message_detail', + ]), + ('localization', _('Localization'), [ + 'region', + ]), + ('email', _('Email'), [ + 'mail_from', 'email_vendor', 'send_grid_api_key', + 'smtp_host', 'smtp_port', 'smtp_username', 'smtp_password', + 'smtp_use_tls', 'smtp_use_ssl', + ]), + ('payment_gateways', _('Payment Gateways'), [ + # PayPal + 'payment_paypal_connect_client_id', + 'payment_paypal_connect_secret_key', + 'payment_paypal_connect_endpoint', + + # Stripe + 'payment_stripe_connect_client_id', + 'payment_stripe_connect_secret_key', + 'payment_stripe_connect_publishable_key', + 'payment_stripe_connect_test_secret_key', + 'payment_stripe_connect_test_publishable_key', + 'payment_stripe_connect_app_fee_percent', + 'payment_stripe_connect_app_fee_max', + 'payment_stripe_connect_app_fee_min', + + 'payment_stripe_secret_key', + 'payment_stripe_publishable_key', + 'payment_stripe_test_secret_key', + 'payment_stripe_test_publishable_key', + 'stripe_webhook_secret_key', + ]), + ('ticket_fee', _('Ticket fee'), [ + 'ticket_fee_percentage', + ]), + ('maps', _('Maps'), [ + 'opencagedata_apikey', 'mapquest_apikey', 'leaflet_tiles', 'leaflet_tiles_attribution', + ]), + ] + class UpdateSettingsForm(SettingsForm): update_check_perform = forms.BooleanField( diff --git a/app/eventyay/control/templates/pretixcontrol/global_settings.html b/app/eventyay/control/templates/pretixcontrol/global_settings.html index 2824ef2888..96151d9c94 100644 --- a/app/eventyay/control/templates/pretixcontrol/global_settings.html +++ b/app/eventyay/control/templates/pretixcontrol/global_settings.html @@ -1,6 +1,7 @@ {% extends "pretixcontrol/global_settings_base.html" %} {% load i18n %} {% load bootstrap3 %} +{% load getitem %} {% load static %} {% block custom_header %} @@ -11,10 +12,55 @@
diff --git a/app/pyproject.toml b/app/pyproject.toml index df383bf89d..6ce4c25ec5 100644 --- a/app/pyproject.toml +++ b/app/pyproject.toml @@ -97,8 +97,8 @@ dependencies = [ "elementpath>=4.7.0", "emoji>=2.14.1", "et-xmlfile>=2.0.0", - "eventyay-paypal @ git+https://github.com/fossasia/eventyay-tickets-paypal.git@4728e6733d971edb4db6df4ebfe12caefd371d55", - "eventyay-stripe @ git+https://github.com/fossasia/eventyay-tickets-stripe.git@1d461de9ac7ef743cb2e6ddbace3434ba5ec6fcc", + "eventyay-paypal @ git+https://github.com/fossasia/eventyay-tickets-paypal.git@1765e5b1aa31da570e16a09a076e96ab623436d1", + "eventyay-stripe @ git+https://github.com/fossasia/eventyay-tickets-stripe.git@a76e42f537666a19ac57072ffd32cd44353b8032", "execnet>=2.1.1", "faker>=37.3.0", "fakeredis>=2.26.2", diff --git a/app/uv.lock b/app/uv.lock index 20bd2fb877..1c70c4eb41 100644 --- a/app/uv.lock +++ b/app/uv.lock @@ -1353,12 +1353,12 @@ wheels = [ [[package]] name = "eventyay-paypal" version = "1.0.0" -source = { git = "https://github.com/fossasia/eventyay-tickets-paypal.git?rev=4728e6733d971edb4db6df4ebfe12caefd371d55#4728e6733d971edb4db6df4ebfe12caefd371d55" } +source = { git = "https://github.com/fossasia/eventyay-tickets-paypal.git?rev=1765e5b1aa31da570e16a09a076e96ab623436d1#1765e5b1aa31da570e16a09a076e96ab623436d1" } [[package]] name = "eventyay-stripe" version = "1.0.1" -source = { git = "https://github.com/fossasia/eventyay-tickets-stripe.git?rev=1d461de9ac7ef743cb2e6ddbace3434ba5ec6fcc#1d461de9ac7ef743cb2e6ddbace3434ba5ec6fcc" } +source = { git = "https://github.com/fossasia/eventyay-tickets-stripe.git?rev=a76e42f537666a19ac57072ffd32cd44353b8032#a76e42f537666a19ac57072ffd32cd44353b8032" } dependencies = [ { name = "stripe" }, ] @@ -1691,8 +1691,8 @@ requires-dist = [ { name = "elementpath", specifier = ">=4.7.0" }, { name = "emoji", specifier = ">=2.14.1" }, { name = "et-xmlfile", specifier = ">=2.0.0" }, - { name = "eventyay-paypal", git = "https://github.com/fossasia/eventyay-tickets-paypal.git?rev=4728e6733d971edb4db6df4ebfe12caefd371d55" }, - { name = "eventyay-stripe", git = "https://github.com/fossasia/eventyay-tickets-stripe.git?rev=1d461de9ac7ef743cb2e6ddbace3434ba5ec6fcc" }, + { name = "eventyay-paypal", git = "https://github.com/fossasia/eventyay-tickets-paypal.git?rev=1765e5b1aa31da570e16a09a076e96ab623436d1" }, + { name = "eventyay-stripe", git = "https://github.com/fossasia/eventyay-tickets-stripe.git?rev=a76e42f537666a19ac57072ffd32cd44353b8032" }, { name = "execnet", specifier = ">=2.1.1" }, { name = "faker", specifier = ">=37.3.0" }, { name = "fakeredis", specifier = ">=2.26.2" },