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
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)