View | Details | Raw Unified | Return to bug 38743
Collapse All | Expand All

(-)a/ucs-4.0-2/management/univention-management-console-module-udm/umc/python/udm/syntax.py (-3 / +66 lines)
 Lines 37-47    Link Here 
37
import univention.admin.syntax as udm_syntax
37
import univention.admin.syntax as udm_syntax
38
38
39
from ...log import MODULE
39
from ...log import MODULE
40
from ...config import ucr
40
41
41
42
42
class Widget(object):
43
class Widget(object):
43
44
44
	'''Describes a widget for the new web frontend'''
45
	'''Describes a widget for the web frontend'''
45
46
46
	def __init__(self, name, syntax_classes, default_value, subclasses=True, widget_func=None):
47
	def __init__(self, name, syntax_classes, default_value, subclasses=True, widget_func=None):
47
		self._name = name
48
		self._name = name
 Lines 67-73   def name(self, syntax, udm_property): Link Here 
67
	def default_value(self):
68
	def default_value(self):
68
		return self._default_value
69
		return self._default_value
69
70
70
__widgets = (
71
	def __repr__(self):
72
		if isinstance(self._syntax_classes, (list, tuple)):
73
			syntax = ','.join(getattr(x, 'name', str(x)) for x in self._syntax_classes)
74
		else:
75
			syntax = self._syntax_classes.name
76
		return '<Widget(%s, syntax=%s, default=%r)>' % (self._name, syntax, self._default_value)
77
78
79
class _UCRWidget(Widget):
80
81
	def __init__(self, syntax_classes, default, subclasses, widget_func):
82
		super(_UCRWidget, self).__init__(None, syntax_classes, default, subclasses, widget_func)
83
		self._syntax_classes_names = syntax_classes
84
85
	def __contains__(self, syntax):
86
		# in case a syntax-reload has been done we need to reuse the newly ones
87
		self._syntax_classes = tuple(filter(None, (getattr(udm_syntax, s, None) for s in self._syntax_classes_names)))
88
		return super(_UCRWidget, self).__contains__(syntax)
89
90
	@classmethod
91
	def load(cls):
92
		identifier = 'directory/manager/web/widget/'
93
		syntaxes = {}
94
		for key, val in ucr.items():
95
			if not key.startswith(identifier):
96
				continue
97
			key = key[len(identifier):]
98
			try:
99
				name, key = key.split('/', 1)
100
			except ValueError:
101
				continue
102
			syntaxes.setdefault(name, {}).setdefault(key, val)
103
104
		widgets = []
105
		for name, props in syntaxes.iteritems():
106
			try:
107
				widget = props['widget']
108
			except KeyError:
109
				MODULE.warn('Ignoring syntax-widget overwrite: %s (does not define widget)' % (name,))
110
				continue
111
112
			default = props.get('default')
113
			subclasses = ucr.is_true(None, props.get('subclasses', 'false'), False)
114
			syntax_classes = []
115
			for syntax in props.get('syntax', '').split(','):
116
				if not syntax:
117
					continue
118
				if not hasattr(udm_syntax, syntax):
119
					MODULE.warn('Ignoring unknown syntax class: %s' % (syntax,))
120
					continue
121
				syntax_classes.append(syntax)
122
123
			def widget_func(syntax_, property_):
124
				return props.get('%s/property/%s' % (syntax_.name, property_['id']), widget)
125
126
			widgets.append(cls(syntax_classes, default, subclasses, widget_func))
127
			MODULE.info('Added widget definition: %r' % (widgets[-1],))
128
129
		return widgets
130
131
132
__widgets = _UCRWidget.load()
133
__widgets.extend([
71
	Widget('CheckBox', (udm_syntax.OkOrNot, udm_syntax.TrueFalseUp, udm_syntax.boolean), False),
134
	Widget('CheckBox', (udm_syntax.OkOrNot, udm_syntax.TrueFalseUp, udm_syntax.boolean), False),
72
	Widget('PasswordInputBox', (udm_syntax.passwd, udm_syntax.userPasswd), ''),
135
	Widget('PasswordInputBox', (udm_syntax.passwd, udm_syntax.userPasswd), ''),
73
	Widget('DateBox', (udm_syntax.iso8601Date, udm_syntax.date), '1970-01-01'),
136
	Widget('DateBox', (udm_syntax.iso8601Date, udm_syntax.date), '1970-01-01'),
 Lines 86-92   def default_value(self): Link Here 
86
	Widget('TextArea', udm_syntax.TextArea, ''),
149
	Widget('TextArea', udm_syntax.TextArea, ''),
87
	Widget('TextBox', udm_syntax.simple, '*'),
150
	Widget('TextBox', udm_syntax.simple, '*'),
88
	Widget(None, udm_syntax.complex, None, widget_func=lambda syn, prop: prop['multivalue'] and 'MultiInput' or 'ComplexInput'),
151
	Widget(None, udm_syntax.complex, None, widget_func=lambda syn, prop: prop['multivalue'] and 'MultiInput' or 'ComplexInput'),
89
)
152
])
90
153
91
154
92
def choices(syntax, udm_property):
155
def choices(syntax, udm_property):

Return to bug 38743