def get_context(self, **kwargs):
        """
        Get the context for this view.
        """
        query = kwargs.pop('query')
        if not self.page_size:
            context = {'list': query}
        else:
            cursor = self.request.GET.get('cursor')
            offset = self.request.GET.get('offset')
            if cursor:
                cursor = Cursor(urlsafe=cursor)
                # TODO: 05.06.12 wooyek named tyiple seems to be empty in template, ivestigate
#            paginator = namedtuple('paginator', 'list cursor more')
            list, cursor, more = query.fetch_page(self.page_size, start_cursor=cursor)
            if cursor:
                cursor = cursor.urlsafe()
            offset = int(offset) + self.page_size if offset else 1
            context = {
                'list': list,
                'paginator': {'cursor': cursor, 'more': more, 'offset': offset},
            }
        context.update(kwargs)
        return context
Beispiel #2
0
def index(_write_tmpl, pagina_origem=1, direcao_busca='FRENTE',
          cursor_urlsafe='None', pagina_destino=1):
    BUSCA_FRENTE = 'FRENTE'
    BUSCA_TRAS = 'TRAS'
    #tranformacao e calculo de parametros
    pagina_origem = int(pagina_origem)
    pagina_destino = int(pagina_destino)
    TAMANHO_DA_PAGINA = 2
    nova_direcao_busca = BUSCA_TRAS if (pagina_destino - pagina_origem) < 0 else BUSCA_FRENTE

    if cursor_urlsafe == 'None':
        cursor_urlsafe = None
    cursor = Cursor(urlsafe=cursor_urlsafe)

    # Funcao para definir se o usuario esta decrementando ou incrimentando a pagina
    def direcao_pesquisa_mudou():
        return direcao_busca != nova_direcao_busca

    #Calculo do offset de acordo com mudanca de direcao na busca
    offset = 0
    if cursor_urlsafe is not None:
        offset = abs(pagina_destino - pagina_origem)
        offset = offset if direcao_pesquisa_mudou() else max(offset - 1, 0)
        offset *= TAMANHO_DA_PAGINA

    #Funcao de pesquisa de usuarios
    def pesquisar_usuarios(query, cursor, offset):
        if direcao_pesquisa_mudou() and cursor:
            cursor = cursor.reversed()
        return query.fetch_page_async(TAMANHO_DA_PAGINA,
                                      offset=offset,
                                      start_cursor=cursor)

    #Pesquisa assincrona de usuarios de acordo com direcao da busca
    if nova_direcao_busca == BUSCA_TRAS:
        query = Usuario.query().order(-Usuario.nome)
        usuarios_future = pesquisar_usuarios(query, cursor, offset)
    else:
        query = Usuario.query().order(Usuario.nome)
        usuarios_future = pesquisar_usuarios(query, cursor, offset)

    #Setup de numeração de páginas
    pagina_inicial = max(1, pagina_destino - 2)
    pagina_final = pagina_inicial + 4
    pagina_anterior = max(pagina_inicial, pagina_destino - 1)

    #Construção de parâmetros a serem renderizados pelo template
    dct = {'adicionar_usuario_google_path': router.to_path(google),
           'adicionar_usuario_face_path': router.to_path(face),
           'pagina_atual': pagina_destino,
           'pagina_inicial': pagina_inicial,
           'pagina_final': pagina_final,
           'pagina_anterior': pagina_anterior,
           'pagina_posterior': pagina_destino + 1}

    usuarios, cursor, mais_resultados = usuarios_future.get_result()

    # revertando resultado para manter ordem crescente na visualizacao de busca
    if nova_direcao_busca == BUSCA_TRAS:
        usuarios.reverse()

    cursor_urlsafe = cursor.urlsafe() if cursor else 'None'
    dct['home_path'] = router.to_path(index,
                                      pagina_destino,
                                      nova_direcao_busca, cursor_urlsafe)
    dct['usuarios'] = usuarios
    _write_tmpl("/templates/usuario_home.html", dct)