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
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"])
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'])
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 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