コード例 #1
0
ファイル: views.py プロジェクト: ye-man/Buku
 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)
コード例 #2
0
    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