From e207477d0fe99d6b9853fe4fda3bfc561c465e02 Mon Sep 17 00:00:00 2001 From: mamoep <26142342+mamoep@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:26:15 +0200 Subject: [PATCH 1/2] fix: replace zero-arg super() with explicit form in LDAPControlPanel.save() Zero-arg super() relies on a compile-time __class__ cell that becomes stale once @plumbing(CSRFProtectionBehavior) creates a new class object. This caused a TypeError at runtime when the control panel view was rendered. Explicit super(LDAPControlPanel, self) resolves the class from the module namespace at call time instead. --- src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py b/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py index cb8adff..a794a17 100644 --- a/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py +++ b/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py @@ -46,6 +46,6 @@ def save(self, widget, data): widget (Widget): Widget instance data (Data): Data extracted from the form """ - super().save(widget, data) + super(LDAPControlPanel, self).save(widget, data) messages = IStatusMessage(self.request) messages.addStatusMessage(_("LDAP Settings saved."), type="info") From 0a4c946a7049bedba5e4619d848201a671588ebb Mon Sep 17 00:00:00 2001 From: mamoep <26142342+mamoep@users.noreply.github.com> Date: Fri, 24 Jul 2026 13:38:46 +0200 Subject: [PATCH 2/2] fix: ruff linter --- src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py b/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py index a794a17..9fc64c4 100644 --- a/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py +++ b/src/pas/plugins/ldap/plonecontrolpanel/controlpanel.py @@ -46,6 +46,13 @@ def save(self, widget, data): widget (Widget): Widget instance data (Data): Data extracted from the form """ - super(LDAPControlPanel, self).save(widget, data) + # NOTE: Explicit super() call is required here. The zero-argument + # form relies on a compile-time __class__ cell, which becomes stale + # because @plumbing(CSRFProtectionBehavior) replaces this class with + # a new class object rather than patching it in place. Using + # super() (zero-arg) causes: + # TypeError: super(type, obj): obj ... is not an instance or + # subtype of type (LDAPControlPanel) + super(LDAPControlPanel, self).save(widget, data) # noqa: UP008 messages = IStatusMessage(self.request) messages.addStatusMessage(_("LDAP Settings saved."), type="info")