예제 #1
0
파일: __init__.py 프로젝트: whausen/part
def drop(entity_type, instance):
    '''
    Drop all documents for *entity_type* from solr. If *instance* is
    given, only the documents for the given instance are removed.

    *entity_type*
       A content model class
    *instance*
       An :class:`adhocracy.model.Instance` object
    '''
    if entity_type is None and instance is None:
        drop_all()
        return
    connection = index.get_sunburnt_connection()
    q = query.sunburnt_query(entity_type, instance, connection=connection)
    connection.delete(queries=q)
    connection.commit()
예제 #2
0
def drop(entity_type, instance):
    '''
    Drop all documents for *entity_type* from solr. If *instance* is
    given, only the documents for the given instance are removed.

    *entity_type*
       A content model class
    *instance*
       An :class:`adhocracy.model.Instance` object
    '''
    if entity_type is None and instance is None:
        drop_all()
        return
    connection = index.get_sunburnt_connection()
    q = query.sunburnt_query(entity_type, instance, connection=connection)
    connection.delete(queries=q)
    connection.commit()
예제 #3
0
    def __init__(self, name, itemfunc, entity_type=None, extra_filter=None,
                 initial_size=20, size=None, sorts=None,
                 enable_sorts=True, enable_pages=True, facets=tuple(),
                 wildcard_queries=None):
        self.name = name
        self.itemfunc = itemfunc
        self.enable_pages = enable_pages
        self.extra_filter = extra_filter
        self.facets = [Facet(self.name, request) for Facet in facets]
        self.wildcard_queries = wildcard_queries or {}
        self.initial_size = initial_size
        if size is not None:
            self.size = size
        elif c.user and c.user.page_size:
            self.size = c.user.page_size
        else:
            self.size = initial_size
        self.size = self._get_size()

        self.enable_sorts = enable_sorts
        self.sorts = sorts
        self.sorts.set_pager(pager=self)
        if self.sorts:
            self.selected_sort = self.sorts.selected().value

        self.page = self._get_page()

        ## build the query
        query = sunburnt_query(entity_type)
        if self.extra_filter:
            query = query.filter(**self.extra_filter)
        for field, string in self.wildcard_queries.items():
            query = add_wildcard_query(query, field, string)

        # Add facets
        counts_query = query
        counts_query = counts_query.paginate(rows=0)
        query.faceter.update(limit='65000')
        counts_query.faceter.update(limit='65000')
        for facet in self.facets:
            query, counts_query = facet.add_to_queries(query, counts_query)

        # Add pagination and sorting
        if enable_pages:
            query = query.paginate(start=self.offset, rows=self.size)

        if self.selected_sort is not None:
            query = query.sort_by(self.selected_sort)

        # query solr and calculate values from it
        self.response = query.execute()
        self.counts_response = counts_query.execute()
        # if we are out of the page range do a permanent redirect
        # to the last page
        if (self.pages > 0) and (self.page > self.pages):
            new_url = self.build_url(page=self.pages)
            redirect(new_url, code=301)

        for facet in self.facets:
            facet.update(self.response, self.counts_response)
        self.items = self._items_from_response(self.response)
예제 #4
0
    def __init__(self,
                 name,
                 itemfunc,
                 entity_type=None,
                 extra_filter=None,
                 initial_size=20,
                 size=None,
                 sorts=None,
                 enable_sorts=True,
                 enable_pages=True,
                 facets=tuple(),
                 wildcard_queries=None):
        self.name = name
        self.itemfunc = itemfunc
        self.enable_pages = enable_pages
        self.extra_filter = extra_filter
        self.facets = [Facet(self.name, request) for Facet in facets]
        self.wildcard_queries = wildcard_queries or {}
        self.initial_size = initial_size
        if size is not None:
            self.size = size
        elif c.user and c.user.page_size:
            self.size = c.user.page_size
        else:
            self.size = initial_size
        self.size = self._get_size()

        self.enable_sorts = enable_sorts
        self.sorts = sorts
        self.sorts.set_pager(pager=self)
        if self.sorts:
            self.selected_sort = self.sorts.selected().value

        self.page = self._get_page()

        ## build the query
        query = sunburnt_query(entity_type)
        if self.extra_filter:
            query = query.filter(**self.extra_filter)
        for field, string in self.wildcard_queries.items():
            query = add_wildcard_query(query, field, string)

        # Add facets
        counts_query = query
        counts_query = counts_query.paginate(rows=0)
        query.faceter.update(limit='65000')
        counts_query.faceter.update(limit='65000')
        for facet in self.facets:
            query, counts_query = facet.add_to_queries(query, counts_query)

        # Add pagination and sorting
        if enable_pages:
            query = query.paginate(start=self.offset, rows=self.size)

        if self.selected_sort is not None:
            query = query.sort_by(self.selected_sort)

        # query solr and calculate values from it
        self.response = query.execute()
        self.counts_response = counts_query.execute()
        # if we are out of the page range do a permanent redirect
        # to the last page
        if (self.pages > 0) and (self.page > self.pages):
            new_url = self.build_url(page=self.pages)
            redirect(new_url, code=301)

        for facet in self.facets:
            facet.update(self.response, self.counts_response)
        self.items = self._items_from_response(self.response)