def test_composite_and_group_missing_db_field(self):
     """
     Failing to pass a db field to a compsite and field should result in
     no comparison for that field.
     """
     qs = MockQuerySet()
     filt = CompositeAndFilter({
         'a': MatchFilter('b'),
         'c': NoFilter()})
     result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'b': 'bbb'})
     self.assert_filters_equals([Q(aaa='b')], result.filters)
     result = apply_filter_to_queryset(qs, filt, {'b', 'bbb'})
     self.assert_filters_equals([], result.filters)
 def test_composite_and_group_none(self):
     """Falsey branches of CompositeAndFilter should not compare."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({
         'a': MatchFilter('b'),
         'c': NoFilter()})
     result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'})
     self.assert_filters_equals([Q(aaa='b')], result.filters)
 def test_or_group(self):
     """Or group should result in or'ed comparisons."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(
             qs,
             OrGroupFilter([MatchFilter('a'), MatchFilter('b')]),
             'zz')
     self.assert_filters_equals([Q(zz='a') | Q(zz='b')], result.filters)
 def test_date_after(self):
     """Test date's after given."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(
         qs,
         DateRangeFilter([datetime(2009, 12, 1), None]),
         'zz')
     self.assert_filters_equals(
         [Q(zz__gte=datetime(2009, 12, 1))],
         result.filters)
Example #5
0
    def filter_query_set(self, qs):
        qs = apply_filter_to_queryset(
            qs,
            self.date_time,
            'date_time')
        qs = apply_filter_to_queryset(
            qs,
            self.communication_type,
            'contact_type')
        qs = apply_filter_to_queryset(
            qs,
            self.tags,
            'tags', '__name__iexact')

        if self.locations or self.contact or self.contact_tags:
            contact_qs = Contact.objects.all()
            contact_qs = apply_filter_to_queryset(
                contact_qs,
                self.locations,
                {
                    'city': 'locations__city__iexact',
                    'state': 'locations__state__iexact',
                })
            contact_qs = apply_filter_to_queryset(
                contact_qs,
                self.contact,
                'pk')
            contact_qs = apply_filter_to_queryset(
                contact_qs,
                self.contact_tags,
                'tags', '__name__iexact')

            contact_qs = contact_qs.distinct()

            qs = qs.filter(contact=contact_qs)

        if self.partner or self.partner_tags:
            partner_qs = Partner.objects.all()

            partner_qs = apply_filter_to_queryset(
                partner_qs,
                self.partner,
                'pk')
            partner_qs = apply_filter_to_queryset(
                partner_qs,
                self.partner_tags,
                'tags', '__name__iexact')

            partner_qs = partner_qs.distinct()

            qs = qs.filter(partner=partner_qs)

        return qs
 def test_date_before(self):
     """Test date's before given."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(
         qs,
         DateRangeFilter([None, datetime(2009, 12, 2)]),
         'zz')
     self.assert_filters_equals(
         [Q(zz__lte=datetime(2009, 12, 3))],
         result.filters)
 def test_composite_and_group(self):
     """CompositeAndFilter should result in and'ed Q."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({
         'a': MatchFilter('b'),
         'c': OrGroupFilter([MatchFilter('d'), MatchFilter('e')])})
     result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'})
     self.assert_filters_equals([
         Q(aaa='b') & (Q(ccc='d') | Q(ccc='e')),
         ], result.filters)
Example #8
0
    def filter_partners(self, company):
        qs = Partner.objects.filter(owner=company)
        qs = (
            qs
            .filter(approval_status__code__iexact=Status.APPROVED)
            .filter(archived_on__isnull=True))

        qs = apply_filter_to_queryset(
            qs,
            self.date,
            'last_action_time')

        qs = apply_filter_to_queryset(
            qs,
            self.data_source,
            'data_source__iexact')

        qs = apply_filter_to_queryset(
            qs,
            self.uri,
            'uri__iexact')

        qs = apply_filter_to_queryset(
            qs,
            self.tags,
            'tags', '__name__iexact')

        if self.locations:
            contact_qs = Contact.objects.all()

            contact_qs = apply_filter_to_queryset(
                contact_qs,
                self.locations,
                {
                    'city': 'locations__city__iexact',
                    'state': 'locations__state__iexact',
                })

            contact_qs.distinct()
            qs = qs.filter(primary_contact=contact_qs)

        return qs
    def test_date_range(self):
        """Test date ranges

        The range end should have an extra day added.
        """
        qs = MockQuerySet()
        result = apply_filter_to_queryset(
            qs, DateRangeFilter([datetime(2009, 12, 1),
                                 datetime(2009, 12, 2)]), 'zz')
        self.assert_filters_equals(
            [Q(zz__range=(datetime(2009, 12, 1), datetime(2009, 12, 3)))],
            result.filters)
Example #10
0
    def filter_query_set(self, qs):
        """Apply the filter described by this instance to a query set.

        qs: the query set to receive the filter
        """
        qs = apply_filter_to_queryset(
            qs,
            self.date,
            'last_action_time')

        qs = apply_filter_to_queryset(
            qs,
            self.tags,
            'tags', '__name__iexact')

        qs = apply_filter_to_queryset(
            qs,
            self.locations,
            {
                'city': 'locations__city__iexact',
                'state': 'locations__state__iexact',
            })

        if self.partner or self.partner_tags:
            partner_qs = Partner.objects.all()

            partner_qs = apply_filter_to_queryset(
                partner_qs,
                self.partner,
                'pk')
            partner_qs = apply_filter_to_queryset(
                partner_qs,
                self.partner_tags,
                'tags', '__name__iexact')

            partner_qs = partner_qs.distinct()

            qs = qs.filter(partner=partner_qs)

        return qs
 def test_composite_and_group(self):
     """CompositeAndFilter should result in and'ed Q."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({
         'a':
         MatchFilter('b'),
         'c':
         OrGroupFilter([MatchFilter('d'),
                        MatchFilter('e')])
     })
     result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'})
     self.assert_filters_equals([
         Q(aaa='b') & (Q(ccc='d') | Q(ccc='e')),
     ], result.filters)
    def test_date_range(self):
        """Test date ranges

        The range end should have an extra day added.
        """
        qs = MockQuerySet()
        result = apply_filter_to_queryset(
                qs,
                DateRangeFilter([
                    datetime(2009, 12, 1),
                    datetime(2009, 12, 2)]),
                'zz')
        self.assert_filters_equals(
            [Q(zz__range=(datetime(2009, 12, 1), datetime(2009, 12, 3)))],
            result.filters)
 def test_and_group(self):
     """And group should result in a series of comparisons."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(
         qs,
         AndGroupFilter([
             OrGroupFilter([MatchFilter('f')]),
             OrGroupFilter([MatchFilter('g'),
                            MatchFilter('h')]),
             MatchFilter('i')
         ]), 'z')
     self.assert_filters_equals([
         Q(z='f'),
         Q(z='g') | Q(z='h'),
         Q(z='i'),
     ], result.filters)
 def test_and_group(self):
     """And group should result in a series of comparisons."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(
         qs,
         AndGroupFilter([
             OrGroupFilter([MatchFilter('f')]),
             OrGroupFilter([
                 MatchFilter('g'),
                 MatchFilter('h')]),
             MatchFilter('i')]),
         'z')
     self.assert_filters_equals([
         Q(z='f'),
         Q(z='g') | Q(z='h'),
         Q(z='i'),
         ], result.filters)
Example #15
0
    def filter_query_set(self, qs):
        qs = apply_filter_to_queryset(qs, self.date_time, 'date_time')
        qs = apply_filter_to_queryset(qs, self.communication_type,
                                      'contact_type')
        qs = apply_filter_to_queryset(qs, self.tags, 'tags', '__name__iexact')

        if self.locations or self.contact or self.contact_tags:
            contact_qs = Contact.objects.all()
            contact_qs = apply_filter_to_queryset(
                contact_qs, self.locations, {
                    'city': 'locations__city__iexact',
                    'state': 'locations__state__iexact',
                })
            contact_qs = apply_filter_to_queryset(contact_qs, self.contact,
                                                  'pk')
            contact_qs = apply_filter_to_queryset(contact_qs,
                                                  self.contact_tags, 'tags',
                                                  '__name__iexact')

            contact_qs = contact_qs.distinct()

            qs = qs.filter(contact=contact_qs)

        if self.partner or self.partner_tags:
            partner_qs = Partner.objects.all()

            partner_qs = apply_filter_to_queryset(partner_qs, self.partner,
                                                  'pk')
            partner_qs = apply_filter_to_queryset(partner_qs,
                                                  self.partner_tags, 'tags',
                                                  '__name__iexact')

            partner_qs = partner_qs.distinct()

            qs = qs.filter(partner=partner_qs)

        return qs
 def test_match_empty(self):
     """Empty string match filter."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter(''), 'z')
     self.assert_filters_equals([], result.filters)
 def test_composite_and_group_empty(self):
     """Empty CompositeAndFilter should result in no comparisons."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({})
     result = apply_filter_to_queryset(qs, filt, {})
     self.assert_filters_equals([], result.filters)
 def test_no_filter(self):
     """NoFilter should evaluate falsey and not result in a comparison."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, NoFilter(), 'zz')
     self.assertEqual(False, bool(NoFilter()))
     self.assert_filters_equals([], result.filters)
 def test_and_group_empty(self):
     """Empty And group should result in no comparisons."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, AndGroupFilter([]), 'z')
     self.assert_filters_equals([], result.filters)
 def test_match_filter(self):
     """Match filter does basic comparison."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter('yy'), 'zz')
     self.assert_filters_equals([Q(zz='yy')], result.filters)
 def test_no_filter(self):
     """NoFilter should evaluate falsey and not result in a comparison."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, NoFilter(), 'zz')
     self.assertEqual(False, bool(NoFilter()))
     self.assert_filters_equals([], result.filters)
 def test_composite_and_group_none(self):
     """Falsey branches of CompositeAndFilter should not compare."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({'a': MatchFilter('b'), 'c': NoFilter()})
     result = apply_filter_to_queryset(qs, filt, {'a': 'aaa', 'c': 'ccc'})
     self.assert_filters_equals([Q(aaa='b')], result.filters)
 def test_match_empty(self):
     """Empty string match filter."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter(''), 'z')
     self.assert_filters_equals([], result.filters)
 def test_unlinked(self):
     """Unlinked filter should compare with None."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, UnlinkedFilter(), 'z')
     self.assert_filters_equals([{'z': None}], result.filters)
 def test_daterange_none(self):
     """Test dates with no range given."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, DateRangeFilter(None), 'zz')
     self.assert_filters_equals([], result.filters)
 def test_and_group_empty(self):
     """Empty And group should result in no comparisons."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, AndGroupFilter([]), 'z')
     self.assert_filters_equals([], result.filters)
 def test_unlinked(self):
     """Unlinked filter should compare with None."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, UnlinkedFilter(), 'z')
     self.assert_filters_equals([{'z': None}], result.filters)
 def test_composite_and_group_empty(self):
     """Empty CompositeAndFilter should result in no comparisons."""
     qs = MockQuerySet()
     filt = CompositeAndFilter({})
     result = apply_filter_to_queryset(qs, filt, {})
     self.assert_filters_equals([], result.filters)
 def test_match_filter(self):
     """Match filter does basic comparison."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter('yy'), 'zz')
     self.assert_filters_equals([Q(zz='yy')], result.filters)
 def test_match_none(self):
     """Empty match filter."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter(None), 'z')
     self.assert_filters_equals([], result.filters)
 def test_daterange_none(self):
     """Test dates with no range given."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, DateRangeFilter(None), 'zz')
     self.assert_filters_equals([], result.filters)
 def test_match_none(self):
     """Empty match filter."""
     qs = MockQuerySet()
     result = apply_filter_to_queryset(qs, MatchFilter(None), 'z')
     self.assert_filters_equals([], result.filters)