def library_autocomplete(request): """ 'Live' search by name """ from search.helpers import package_query from elasticutils import F q = request.GET.get('q') limit = request.GET.get('limit') try: limit = int(limit) except: limit = settings.LIBRARY_AUTOCOMPLETE_LIMIT ids = (settings.MINIMUM_PACKAGE_ID, settings.MINIMUM_PACKAGE_ID - 1) notAddonKit = ~(F(id_number=ids[0]) | F(id_number=ids[1])) onlyMyPrivateLibs = (F(active=True) | F(author=request.user.id)) try: qs = (Package.search().query(or_=package_query(q)).filter(type='l') .filter(notAddonKit).filter(onlyMyPrivateLibs)) found = qs[:limit] except Exception, ex: log.exception('Library autocomplete error') found = []
def package_search(searchq='', user=None, score_on=None, **filters): """This provides some sane defaults to filter on when searching Packages""" # This is a filtered query, that says we want to do a query, but not have # to deal with version_text='initial' or 'copy' notInitialOrCopy = ~(F(version_name='initial') | F(version_name='copy')) qs = Package.search().filter(notInitialOrCopy, **filters) # Add type facet (minus any type filter) facetFilter = dict((k, v) for k, v in filters.items() if k != 'type') if facetFilter: facetFilter = notInitialOrCopy & F(**facetFilter) else: facetFilter = notInitialOrCopy qs = qs.facet(types={'terms': {'field': 'type'}, 'facet_filter': facetFilter.filters}) if searchq: qs = qs.query(or_=package_query(searchq)) if user and user.is_authenticated(): qs = qs.facet(author={'terms': { 'field': 'author', 'script':'term == %d ? true : false' % user.id} }) return qs
def package_search(searchq='', user=None, score_on=None, **filters): """This provides some sane defaults to filter on when searching Packages""" # This is a filtered query, that says we want to do a query, but not have # to deal with version_text='initial' or 'copy' notInitialOrCopy = ~(F(version_name='initial') | F(version_name='copy')) qs = Package.search().values_obj('copies_count','times_depended', 'activity','size').filter(notInitialOrCopy, **filters).filter(F(active=True)) # Add type facet (minus any type filter) facetFilter = dict((k, v) for k, v in filters.items() if k != 'type') if facetFilter: facetFilter = notInitialOrCopy & F(**facetFilter) else: facetFilter = notInitialOrCopy qs = qs.facet(types={'terms': {'field': 'type'}, 'facet_filter': facetFilter.filters}) if searchq: qs = qs.query(or_=package_query(searchq)) if user and user.is_authenticated(): qs = qs.facet(author={'terms': { 'field': 'author', 'script':'term == %d ? true : false' % user.id} }) return qs
def library_autocomplete(request): """ 'Live' search by name """ from search.helpers import package_query from elasticutils import F q = request.GET.get('q') limit = request.GET.get('limit') try: limit = int(limit) except: limit = settings.LIBRARY_AUTOCOMPLETE_LIMIT ids = (settings.MINIMUM_PACKAGE_ID, settings.MINIMUM_PACKAGE_ID - 1) notAddonKit = ~(F(id_number=ids[0]) | F(id_number=ids[1])) onlyMyPrivateLibs = (F(active=True) | F(author=request.user.id)) try: qs = (Package.search().query(or_=package_query(q)).filter( type='l').filter(notAddonKit).filter(onlyMyPrivateLibs)) found = qs[:limit] except Exception, ex: log.exception('Library autocomplete error') found = []
def test_times_depended_on(self): foo = create_library('foooooo') bar = create_addon('barrrr') bar.latest.dependency_add(foo.latest) self.es.refresh() qs = Package.search().filter(times_depended__gte=1) eq_(len(qs), 1) eq_(qs[0], foo)
def _get_average_activity(): average = cache.get(ACTIVITY_CACHE_KEY) if average: return average # TODO: ES has statistical facet that can provide average, but I couldn't # get it working. qs = Package.search().filter(activity__gt=0.001) values = qs.values('activity')[:qs.count()] num = len(values) if num > 0: average = sum(v[1] for v in values) / num else: average = 0.2 cache.set(ACTIVITY_CACHE_KEY, average, 60*60*24) return average