Пример #1
0
class EmptySearchQuerySetTestCase(TestCase):
    def setUp(self):
        super(EmptySearchQuerySetTestCase, self).setUp()
        self.esqs = EmptySearchQuerySet()
    
    def test_get_count(self):
        self.assertEqual(self.esqs.count(), 0)
        self.assertEqual(len(self.esqs.all()), 0)
    
    def test_filter(self):
        sqs = self.esqs.filter(content='foo')
        self.assert_(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
    
    def test_exclude(self):
        sqs = self.esqs.exclude(content='foo')
        self.assert_(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
    
    def test_slice(self):
        sqs = self.esqs.filter(content='foo')
        self.assert_(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
        self.assertEqual(sqs[:10], [])
        
        try:
            sqs[4]
            self.fail()
        except IndexError:
            pass
Пример #2
0
class EmptySearchQuerySetTestCase(TestCase):
    def setUp(self):
        super(EmptySearchQuerySetTestCase, self).setUp()
        self.esqs = EmptySearchQuerySet()

    def test_get_count(self):
        self.assertEqual(self.esqs.count(), 0)
        self.assertEqual(len(self.esqs.all()), 0)

    def test_filter(self):
        sqs = self.esqs.filter(content="foo")
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)

    def test_exclude(self):
        sqs = self.esqs.exclude(content="foo")
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)

    def test_slice(self):
        sqs = self.esqs.filter(content="foo")
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
        self.assertEqual(sqs[:10], [])

        try:
            sqs[4]
            self.fail()
        except IndexError:
            pass

    def test_dictionary_lookup(self):
        """
        Ensure doing a dictionary lookup raises a TypeError so
        EmptySearchQuerySets can be used in templates.
        """
        self.assertRaises(TypeError, lambda: self.esqs["count"])
Пример #3
0
class EmptySearchQuerySetTestCase(TestCase):
    def setUp(self):
        super(EmptySearchQuerySetTestCase, self).setUp()
        self.esqs = EmptySearchQuerySet()

    def test_get_count(self):
        self.assertEqual(self.esqs.count(), 0)
        self.assertEqual(len(self.esqs.all()), 0)

    def test_filter(self):
        sqs = self.esqs.filter(content='foo')
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)

    def test_exclude(self):
        sqs = self.esqs.exclude(content='foo')
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)

    def test_slice(self):
        sqs = self.esqs.filter(content='foo')
        self.assertTrue(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
        self.assertEqual(sqs[:10], [])

        try:
            sqs[4]
            self.fail()
        except IndexError:
            pass

    def test_dictionary_lookup(self):
        """
        Ensure doing a dictionary lookup raises a TypeError so
        EmptySearchQuerySets can be used in templates.
        """
        self.assertRaises(TypeError, lambda: self.esqs['count'])
Пример #4
0
class EmptySearchQuerySetTestCase(TestCase):
    def setUp(self):
        super(EmptySearchQuerySetTestCase, self).setUp()
        self.esqs = EmptySearchQuerySet()
    
    def test_get_count(self):
        self.assertEqual(self.esqs.count(), 0)
        self.assertEqual(len(self.esqs.all()), 0)
    
    def test_filter(self):
        sqs = self.esqs.filter(content='foo')
        self.assert_(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
    
    def test_exclude(self):
        sqs = self.esqs.exclude(content='foo')
        self.assert_(isinstance(sqs, EmptySearchQuerySet))
        self.assertEqual(len(sqs), 0)
Пример #5
0
    def search(self):
        sqs = EmptySearchQuerySet()
        user_sqs = EmptySearchQuerySet()
        image_sqs = EmptySearchQuerySet()
        gear_sqs = EmptySearchQuerySet()

        if not self.is_valid():
            return EmptySearchQuerySet()

        if self.cleaned_data['q'] == '':
            sqs = SearchQuerySet().models(User, Image, Gear).all()
            user_sqs = SearchQuerySet().models(User).all()
            image_sqs = SearchQuerySet().models(Image).all()
            gear_sqs = SearchQuerySet().models(Gear).all()
            if self.load_all:
                sqs = sqs.load_all()
                user_sqs = user_sqs.load_all()
                image_sqs = image_sqs.load_all()
                gear_sqs = gear_sqs.load_all()
        else:
            sqs = super(AdvancedSearchForm,
                        self).search().models(User, Image, Gear)
            user_sqs = super(AdvancedSearchForm, self).search().models(User)
            image_sqs = super(AdvancedSearchForm, self).search().models(Image)
            gear_sqs = super(AdvancedSearchForm, self).search().models(Gear)

        # This section deals with properties common to all the search indexes.
        if self.cleaned_data['start_date']:
            sqs = sqs.filter(
                last_acquisition_date__gte=self.cleaned_data['start_date'])
            user_sqs = user_sqs.filter(
                last_acquisition_date__gte=self.cleaned_data['start_date'])
            image_sqs = image_sqs.filter(
                last_acquisition_date__gte=self.cleaned_data['start_date'])

        if self.cleaned_data['end_date']:
            sqs = sqs.filter(
                first_acquisition_date__lte=self.cleaned_data['end_date'])
            user_sqs = user_sqs.filter(
                first_acquisition_date__lte=self.cleaned_data['end_date'])
            image_sqs = image_sqs.filter(
                first_acquisition_date__lte=self.cleaned_data['end_date'])

        if self.cleaned_data[
                'telescope_type'] and 'any' not in self.cleaned_data[
                    'telescope_type']:
            filters = reduce(operator.or_, [
                SQ(**{'telescope_types': x})
                for x in self.cleaned_data['telescope_type']
            ])
            sqs = sqs.filter(filters)
            user_sqs = user_sqs.filter(filters)
            image_sqs = image_sqs.filter(filters)
        elif not self.cleaned_data['telescope_type']:
            sqs = EmptySearchQuerySet()
            user_sqs = EmptySearchQuerySet()
            image_sqs = EmptySearchQuerySet()

        if self.cleaned_data['camera_type'] and 'any' not in self.cleaned_data[
                'camera_type']:
            filters = reduce(operator.or_, [
                SQ(**{'camera_types': x})
                for x in self.cleaned_data['camera_type']
            ])
            sqs = sqs.filter(filters)
            user_sqs = user_sqs.filter(filters)
            image_sqs = image_sqs.filter(filters)
        elif not self.cleaned_data['camera_type']:
            sqs = EmptySearchQuerySet()
            user_sqs = EmptySearchQuerySet()
            image_sqs = EmptySearchQuerySet()

        if self.cleaned_data['aperture_min'] is not None:
            sqs = sqs.filter(
                min_aperture__gte=self.cleaned_data['aperture_min'])
            user_sqs = user_sqs.filter(
                min_aperture__gte=self.cleaned_data['aperture_min'])
            image_sqs = image_sqs.filter(
                min_aperture__gte=self.cleaned_data['aperture_min'])

        if self.cleaned_data['aperture_max'] is not None:
            sqs = sqs.filter(
                max_aperture__lte=self.cleaned_data['aperture_max'])
            user_sqs = user_sqs.filter(
                max_aperture__lte=self.cleaned_data['aperture_max'])
            image_sqs = image_sqs.filter(
                max_aperture__lte=self.cleaned_data['aperture_max'])

        if self.cleaned_data['pixel_size_min'] is not None:
            sqs = sqs.filter(
                min_pixel_size__gte=self.cleaned_data['pixel_size_min'])
            user_sqs = user_sqs.filter(
                min_pixel_size__gte=self.cleaned_data['pixel_size_min'])
            image_sqs = image_sqs.filter(
                min_pixel_size__gte=self.cleaned_data['pixel_size_min'])

        if self.cleaned_data['pixel_size_max'] is not None:
            sqs = sqs.filter(
                max_pixel_size__lte=self.cleaned_data['pixel_size_max'])
            user_sqs = user_sqs.filter(
                max_pixel_size__lte=self.cleaned_data['pixel_size_max'])
            image_sqs = image_sqs.filter(
                max_pixel_size__lte=self.cleaned_data['pixel_size_max'])

        if self.cleaned_data['integration_min']:
            sqs = sqs.filter(
                integration__gte=int(self.cleaned_data['integration_min'] *
                                     3600))
            user_sqs = user_sqs.filter(
                integration__gte=int(self.cleaned_data['integration_min'] *
                                     3600))
            image_sqs = image_sqs.filter(
                integration__gte=int(self.cleaned_data['integration_min'] *
                                     3600))

        if self.cleaned_data['integration_max']:
            sqs = sqs.filter(
                integration__lte=int(self.cleaned_data['integration_max'] *
                                     3600))
            user_sqs = user_sqs.filter(
                integration__lte=int(self.cleaned_data['integration_max'] *
                                     3600))
            image_sqs = image_sqs.filter(
                integration__lte=int(self.cleaned_data['integration_max'] *
                                     3600))

        if self.cleaned_data['moon_phase_min']:
            sqs = sqs.filter(
                moon_phase__gte=self.cleaned_data['moon_phase_min'])
            user_sqs = user_sqs.filter(
                moon_phase__gte=self.cleaned_data['moon_phase_min'])
            image_sqs = image_sqs.filter(
                moon_phase__gte=self.cleaned_data['moon_phase_min'])

        if self.cleaned_data['moon_phase_max']:
            sqs = sqs.filter(
                moon_phase__lte=self.cleaned_data['moon_phase_max'])
            user_sqs = user_sqs.filter(
                moon_phase__lte=self.cleaned_data['moon_phase_max'])
            image_sqs = image_sqs.filter(
                moon_phase__lte=self.cleaned_data['moon_phase_max'])

        # This section deals with properties of the Image search index:
        if self.cleaned_data['solar_system_main_subject']:
            image_sqs = image_sqs.filter(
                solar_system_main_subject=self.
                cleaned_data['solar_system_main_subject'])
            user_sqs = EmptySearchQuerySet()
            gear_sqs = EmptySearchQuerySet()
            sqs = EmptySearchQuerySet()

        if self.cleaned_data['license']:
            filters = reduce(
                operator.or_,
                [SQ(**{'license': x}) for x in self.cleaned_data['license']])
            image_sqs = image_sqs.filter(filters)
        else:
            image_sqs = EmptySearchQuerySet()

        # This section deals with properties of the User search index.
        # TODO

        # This section deals with properties of the Gear search index.
        # TODO

        search_type = self.cleaned_data['search_type']
        if search_type == '1':
            sqs = image_sqs
        elif search_type == '2':
            sqs = user_sqs
        elif search_type == '3':
            sqs = gear_sqs

        if self.cleaned_data['q'] == '' and self.cleaned_data[
                'solar_system_main_subject'] == None:
            sqs = SearchQuerySet().models(Image, User, Gear).all()
        elif self.cleaned_data['solar_system_main_subject']:
            sqs = image_sqs
        elif search_type == None:
            sqs = list(itertools.chain(sqs, user_sqs, image_sqs, gear_sqs))

        return sqs