def data_to_query(data): """ Transforms a view dict into a Livestatus query. The passed dict represents a stored (in userdata) custom view, it has the same structure as a forms set in custom_edit. """ d = {} d['datasource'] = data['metadata'][0]['data_source'] d['columns'] = [x['name'] for x in data['columns'] if x['name']] # we have to add columns which are in d['sorts'], otherwise the data # postprocessor can't do its job #sorts = [x['column'] for x in data['sorts']] add_sorts = [x['column'] for x in data['sorts'] if x not in d['columns']] d['columns'] = ' '.join(d['columns'] + add_sorts) if d['columns']: d['columns'] = 'Columns: ' + d['columns'] + '\n' d['stats'] = ''.join(['Stats: %(column)s = %(value)s\n' % x for x in data['stats']]) d['filters'] = ''.join([str(custom_filters.get_filter(d['datasource'], x['column'])(x)) for x in data['filters'] if x['column']]) query = ('GET %(datasource)s\n' '%(columns)s' '%(filters)s' '%(stats)s') % d # Remove unneeded linebreaks at the end: query = query.strip() return query
def __init__(self, *args, **kwargs): super(FiltersForm, self).__init__(*args, **kwargs) self.fields['column'] = forms.ChoiceField( choices=_get_columns_names(datasource=self.datasource), ) # let's get the value of this particular column if kwargs.get('initial', False): # GET try: column = kwargs['initial']['column'] except KeyError: column = None else: # POST try: column = kwargs['data'][kwargs['prefix'] + '-column'] except KeyError: column = None if column: self.fields.update(custom_filters.get_filter(self.datasource, column)().get_fields())
def __init__(self, *args, **kwargs): super(FiltersForm, self).__init__(*args, **kwargs) self.fields['column'] = forms.ChoiceField( choices=_get_columns_names(datasource=self.datasource), ) # let's get the value of this particular column if kwargs.get('initial', False): # GET try: column = kwargs['initial']['column'] except KeyError: column = None else: # POST try: column = kwargs['data'][kwargs['prefix'] + '-column'] except KeyError: column = None if column: self.fields.update( custom_filters.get_filter(self.datasource, column)().get_fields())