<% import splunk.appserver.mrsparkle.lib.i18n as i18n %> <%namespace name="m" file="//view/_helpers.html" import="*"/> <%def name="i18nText(text, format)"> <% output = '' if format in ['number', 'decimal', 'percent', 'date_short', 'date_medium', 'date_long', 'date_full']: if format == 'number': output = i18n.format_number(float(unicode(text))) elif format == 'percent': output = i18n.format_percent(float(unicode(text))) elif format == 'decimal': output = i18n.format_decimal(float(unicode(text))) elif format == 'date_short': output = i18n.format_date(text, 'short') elif format == 'date_medium': output = i18n.format_date(text, 'medium') elif format == 'date_long': output = i18n.format_date(text, 'long') elif format == 'date_full': output = i18n.format_date(text, 'full') %> ${output} <%def name="staticfields(items, formatter, wrapper=None, delimiter=None, options=None)"> <% import cgi if not delimiter: delimiter = '' delimiter = cgi.escape(delimiter) if not options: options = {} output = [] for field in items: tmp = [] labelFormat = field.get('labelFormat') label = field.get('label') if labelFormat: label = capture(self.i18nText, label, labelFormat) if field.get('value'): tmp.append(capture(formatter, label, field.get('value'), options)) else: tmp.append(capture(formatter, label, field.get('label'), options)) if wrapper: output.append(capture(wrapper, delimiter.join(tmp))) else: output.append(delimiter.join(tmp)) %>\ ${''.join(output)}\ <%def name="listobjfields(items, formatter, fields=None, wrapper=None, delimiter=None, options=None)"> <% import cgi import csv import re import logging logger = logging.getLogger('splunk.listobjfields') multi_field_match = re.compile(r'\%\((\w+)\)s') if not delimiter: delimiter = '' delimiter = cgi.escape(delimiter) if not options: options = {} def multiLabelToString(multiLabel, obj): '''We need to do this scanning to ensure that None values do not end up in the ui.''' label_fields = multi_field_match.findall(multiLabel) valid_label_fields = {} for label_field in label_fields: if label_field in obj and obj[label_field] != None: valid_label_fields[label_field] = obj[label_field] return multiLabel % valid_label_fields # For now, we hold the hand of the developer and only display one # inline error at a time. Perhaps there is a better way of doing this # for version 4.0.2 inlineError = None output = [] for obj in items: tmp = [] if not fields: for key, value in obj.items(): tmp.append(capture(formatter, key, value, options)) if wrapper: output.append(capture(wrapper, delimiter.join(tmp))) else: output.append(delimiter.join(tmp)) else: for field in fields: try: field_matches = None if field.get('match'): reader = csv.reader([field.get('match')]) for row in reader: field_matches = [match.strip() for match in row] label = field.get('label') labelFormat = field.get('labelFormat') multiLabel = field.get('multiLabel') multiLabelAlt = field.get('multiLabelAlt') label_text = '' if label and labelFormat: label_text = capture(self.i18nText, unicode(obj[label]), labelFormat) elif label: label_text = unicode(obj[label]) elif multiLabel: try: label_text = multiLabelToString(multiLabel, obj) except KeyError, e: if multiLabelAlt != None: try: label_text = multiLabelToString(multiLabelAlt, obj) except KeyError, e: # if the multiLabelAlt field failed, then copy it over to the multiLabel # value for error msg purposes multiLabel = multiLabelAlt raise e else: raise e if field.get('value'): try: if not field_matches or unicode(obj[field.get('value')]) in field_matches: tmp.append(capture(formatter, label_text, unicode(obj[field.get('value')]), options)) except KeyError: inlineError = capture(m.inlineMessage, 'error', _('Cannot find the value field "%(value)s" in one of the requested list objects.') % {'value': field.get('value')}) next else: if not field_matches or unicode(obj[field.get('label')]) in field_matches: tmp.append(capture(formatter, label_text, None, options)) except KeyError: if label: inlineError = capture(m.inlineMessage, 'error', _('Cannot find the label field "%(label)s" in one of the requested list objects.') % {'label': label}) elif multiLabel: inlineError = capture(m.inlineMessage, 'error', _('Cannot find the one of the fields in the multiLabel definition "%(label)s" in one of the requested list objects.') % {'label': multiLabel}) next if wrapper: output.append(capture(wrapper, delimiter.join(tmp))) else: output.append(delimiter.join(tmp)) %>\ % if inlineError != None: ${inlineError} % endif ${''.join(output)}\