def search(self): "redirect to bookmark search" form = forms.HomeForm() bbm_filter = bs_filters.BookmarkBukuFilter( all_keywords=False, deep=form.deep.data, regex=form.regex.data) op_text = bbm_filter.operation() values_combi = sorted(itertools.product([True, False], repeat=3)) for idx, (all_keywords, deep, regex) in enumerate(values_combi): if deep == form.deep.data and regex == form.regex.data and not all_keywords: choosen_idx = idx url_op_text = op_text.replace(', ', '_').replace(' ', ' ').replace(' ', '_') key = ''.join(['flt', str(choosen_idx), '_buku_', url_op_text]) kwargs = {key: form.keyword.data} url = url_for('bookmark.index_view', **kwargs) return redirect(url)
def scaffold_filters(self, name): res = [] if name == 'buku': values_combi = sorted(itertools.product([True, False], repeat=3)) for all_keywords, deep, regex in values_combi: res.append( bs_filters.BookmarkBukuFilter(all_keywords=all_keywords, deep=deep, regex=regex)) elif name == BookmarkField.ID.name.lower(): res.extend([ bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.EQUAL), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_EQUAL), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.IN_LIST), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_IN_LIST), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.GREATER), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.SMALLER), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.TOP_X), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.BOTTOM_X), ]) elif name == BookmarkField.URL.name.lower(): def netloc_match_func(query, value, index): return filter(lambda x: urlparse(x[index]).netloc == value, query) res.extend([ bs_filters.BookmarkBaseFilter(name, 'netloc match', netloc_match_func), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.EQUAL), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_EQUAL), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.IN_LIST), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_IN_LIST), ]) elif name == BookmarkField.TITLE.name.lower(): res.extend([ bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.EQUAL), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_EQUAL), bs_filters.BookmarkBaseFilter(name, filter_type=FilterType.IN_LIST), bs_filters.BookmarkBaseFilter( name, filter_type=FilterType.NOT_IN_LIST), ]) elif name == BookmarkField.TAGS.name.lower(): def tags_contain_func(query, value, index): for item in query: for tag in item[index].split(','): if tag and tag == value: yield item def tags_not_contain_func(query, value, index): for item in query: for tag in item[index].split(','): if tag and tag == value: yield item res.extend([ bs_filters.BookmarkBaseFilter(name, 'contain', tags_contain_func), bs_filters.BookmarkBaseFilter(name, 'not contain', tags_not_contain_func), bs_filters.BookmarkTagNumberEqualFilter(name, 'number equal'), bs_filters.BookmarkTagNumberNotEqualFilter( name, 'number not equal'), bs_filters.BookmarkTagNumberGreaterFilter( name, 'number greater than'), bs_filters.BookmarkTagNumberSmallerFilter( name, 'number smaller than'), ]) elif name in self.scaffold_list_columns(): pass else: return super().scaffold_filters(name) return res