Univention Bugzilla – Attachment 6978 Details for
Bug 38743
Allow override of widget<->syntax-class mapping
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
38743.patch (text/plain), 3.51 KB, created by
Florian Best
on 2015-06-22 18:30:54 CEST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Florian Best
Created:
2015-06-22 18:30:54 CEST
Size:
3.51 KB
patch
obsolete
>diff --git a/ucs-4.0-2/management/univention-management-console-module-udm/umc/python/udm/syntax.py b/ucs-4.0-2/management/univention-management-console-module-udm/umc/python/udm/syntax.py >index d27afeb..2f967d3 100644 >--- a/ucs-4.0-2/management/univention-management-console-module-udm/umc/python/udm/syntax.py >+++ b/ucs-4.0-2/management/univention-management-console-module-udm/umc/python/udm/syntax.py >@@ -37,11 +37,12 @@ > import univention.admin.syntax as udm_syntax > > from ...log import MODULE >+from ...config import ucr > > > class Widget(object): > >- '''Describes a widget for the new web frontend''' >+ '''Describes a widget for the web frontend''' > > def __init__(self, name, syntax_classes, default_value, subclasses=True, widget_func=None): > self._name = name >@@ -67,7 +68,69 @@ def name(self, syntax, udm_property): > def default_value(self): > return self._default_value > >-__widgets = ( >+ def __repr__(self): >+ if isinstance(self._syntax_classes, (list, tuple)): >+ syntax = ','.join(getattr(x, 'name', str(x)) for x in self._syntax_classes) >+ else: >+ syntax = self._syntax_classes.name >+ return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value) >+ >+ >+class _UCRWidget(Widget): >+ >+ def __init__(self, syntax_classes, default, subclasses, widget_func): >+ super(_UCRWidget, self).__init__(None, syntax_classes, default, subclasses, widget_func) >+ self._syntax_classes_names = syntax_classes >+ >+ def __contains__(self, syntax): >+ # in case a syntax-reload has been done we need to reuse the newly ones >+ self._syntax_classes = tuple(filter(None, (getattr(udm_syntax, s, None) for s in self._syntax_classes_names))) >+ return super(_UCRWidget, self).__contains__(syntax) >+ >+ @classmethod >+ def load(cls): >+ identifier = 'directory/manager/web/widget/' >+ syntaxes = {} >+ for key, val in ucr.items(): >+ if not key.startswith(identifier): >+ continue >+ key = key[len(identifier):] >+ try: >+ name, key = key.split('/', 1) >+ except ValueError: >+ continue >+ syntaxes.setdefault(name, {}).setdefault(key, val) >+ >+ widgets = [] >+ for name, props in syntaxes.iteritems(): >+ try: >+ widget = props['widget'] >+ except KeyError: >+ MODULE.warn('Ignoring syntax-widget overwrite: %s (does not define widget)' % (name,)) >+ continue >+ >+ default = props.get('default') >+ subclasses = ucr.is_true(None, props.get('subclasses', 'false'), False) >+ syntax_classes = [] >+ for syntax in props.get('syntax', '').split(','): >+ if not syntax: >+ continue >+ if not hasattr(udm_syntax, syntax): >+ MODULE.warn('Ignoring unknown syntax class: %s' % (syntax,)) >+ continue >+ syntax_classes.append(syntax) >+ >+ def widget_func(syntax_, property_): >+ return props.get('%s/property/%s' % (syntax_.name, property_['id']), widget) >+ >+ widgets.append(cls(syntax_classes, default, subclasses, widget_func)) >+ MODULE.info('Added widget definition: %r' % (widgets[-1],)) >+ >+ return widgets >+ >+ >+__widgets = _UCRWidget.load() >+__widgets.extend([ > Widget('CheckBox', (udm_syntax.OkOrNot, udm_syntax.TrueFalseUp, udm_syntax.boolean), False), > Widget('PasswordInputBox', (udm_syntax.passwd, udm_syntax.userPasswd), ''), > Widget('DateBox', (udm_syntax.iso8601Date, udm_syntax.date), '1970-01-01'), >@@ -86,7 +149,7 @@ def default_value(self): > Widget('TextArea', udm_syntax.TextArea, ''), > Widget('TextBox', udm_syntax.simple, '*'), > Widget(None, udm_syntax.complex, None, widget_func=lambda syn, prop: prop['multivalue'] and 'MultiInput' or 'ComplexInput'), >-) >+]) > > > def choices(syntax, udm_property):
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 38743
: 6978