Univention Bugzilla – Bug 48494
Allow override of widget<->syntax-class mapping is broken
Last modified: 2019-02-20 14:52:13 CET
+++ This bug was initially created as a clone of Bug #39041 +++ This is currently broken because function "__repr__" of class "_UCRWidget" in syntax.py is recursive. ''' return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value) ''' self._name is a method of _UCRWidget, python tries to print that as "<bound method _UCRWidget.bar of _UCRWidget>" which means __repr__ is called recursively in this case Afaik this is needed for in8
patch: -» » return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value) +» » return '<Widget(%s, syntax=%s, default=%r)>' % (self._name.__name__ if callable(self._name) else self._name, syntax, self._default_value)
[4.3-3 f8e59deb42] Bug #48494: test UCRWidgets [4.3-3 12284d44e7] Bug #48494: fix UCRWidgets [4.3-3 ec385e9e15] Bug #48494: yaml [4.3-3 ec08ab9d9d] Bug #48494: yaml version Package: univention-management-console-module-udm Version: 8.0.5-30A~4.3.0.201902111113 Branch: ucs_4.3-0 Scope: errata4.3-3 [4.4-0 04922531ff] Bug #48494: test UCRWidgets [4.4-0 512a179914] Bug #48494: fix UCRWidgets Package: univention-management-console-module-udm Version: 9.0.1-4A~4.4.0.201902111116 Branch: ucs_4.4-0
OK: reproduced ucr set directory/manager/web/widget/foo/{syntax=Foo,widget=CheckBox,default=1} Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/univention/management/console/protocol/modserver.py", line 101, in _load_module self.__module = __import__(file_, [], [], modname) File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/__init__.py", line 71, in <module> from .udm_ldap import ( File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/udm_ldap.py", line 58, in <module> from univention.management.console.modules.udm.syntax import widget, default_value File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 145, in <module> __widgets = _UCRWidget.load() File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 140, in load MODULE.info('Added widget definition: %r' % (widgets[-1],)) File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 90, in __repr__ return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value) … File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 90, in __repr__ return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value) File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 87, in __repr__ syntax = ','.join(getattr(x, 'name', str(x)) for x in self._syntax_classes) File "/usr/lib/pymodules/python2.7/univention/management/console/modules/udm/syntax.py", line 87, in <genexpr> syntax = ','.join(getattr(x, 'name', str(x)) for x in self._syntax_classes) RuntimeError: maximum recursion depth exceeded while calling a Python object OK: problem fixed OK: code review ~OK: I improved the YAML description OK: merge to UCS 4.4
<http://errata.software-univention.de/ucs/4.3/430.html>