Exemplo n.º 1
0
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 = []
Exemplo n.º 2
0
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
Exemplo n.º 3
0
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
Exemplo n.º 4
0
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 = []
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
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
Exemplo n.º 8
0
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