예제 #1
0
 def initialize(self):
     self.lista_model = ListaModel()
     self.opcao_edita_a_lista = "listas-publicas-edita-a-lista/"
     self.opcao_edita_um_item = "listas-publicas-edita-um-item/"
     self.opcao_edita_um_item_regex = r"/listas-publicas-edita-um-item/([0-9]+)/$"
     self.opcao_deleta_todos_os_itens = "listas-publicas-deleta-todos-os-itens/"
     self.opcao_deleta_a_lista = "listas-publicas-deleta-a-lista/"
     self.opcao_deleta_um_item = "listas-publicas-deleta-um-item/"
     self.opcao_deleta_um_item_regex = r"/listas-publicas-deleta-um-item/([0-9]+)/$"
     self.session = session.TornadoSession(self.application.session_manager, self)
     self.fgm = FacebookGraphMixin()
예제 #2
0
class ListasHandler(tornado.web.RequestHandler):
    def initialize(self):
        self.lista_model = ListaModel()
        self.opcao_edita_a_lista = "listas-publicas-edita-a-lista/"
        self.opcao_edita_um_item = "listas-publicas-edita-um-item/"
        self.opcao_edita_um_item_regex = r"/listas-publicas-edita-um-item/([0-9]+)/$"
        self.opcao_deleta_todos_os_itens = "listas-publicas-deleta-todos-os-itens/"
        self.opcao_deleta_a_lista = "listas-publicas-deleta-a-lista/"
        self.opcao_deleta_um_item = "listas-publicas-deleta-um-item/"
        self.opcao_deleta_um_item_regex = r"/listas-publicas-deleta-um-item/([0-9]+)/$"
        self.session = session.TornadoSession(self.application.session_manager, self)
        self.fgm = FacebookGraphMixin()

    def __get_slug__(self, slug):
        while slug.count("//") > 0 and slug.count("  ") > 0:
            slug = slug.replace("//", "/")
            slug = slug.replace("  ", " ")
        slug = slug.replace(" ", "-")
        slug = slug.lower()
        if not slug.endswith("/"):
            slug = slug + "/"
        return slug

    def __get_slugs__(self, slug_lista):
        """ Retorna o slug atual (última parte) e uma lista com o slug e o href para cada pai do slug atual """
        slugs_pais = []
        href = "/"
        slugs = slug_lista.split("/")
        slug_atual = slugs[-2] + "/"
        slug_pai_list = slugs[0:-2]
        for slug in slug_pai_list:
            slug += "/"
            href += slug
            slugs_pais.append({"href": href, "slug": slug})

        return (slug_atual, slugs_pais)

    def __get_lista_id__(self, slug_lista):
        return int(self.lista_model.get_lista(slug_lista)["id"])

    def get_lista_info(self, slug_lista):
        """ Com o slug da lista, acha todas as informacoes da lista, assim como as suas sublistas e os seus itens """
        slug_lista = self.__get_slug__(slug_lista)
        lista = self.lista_model.get_lista(slug_lista)
        sublistas = self.lista_model.get_sublistas(lista["id"]) if lista else []
        itens = self.lista_model.get_itens(lista["id"]) if lista else []
        return (lista, sublistas, itens, slug_lista)

    def call_template_listas(self, lista, sublistas, itens):
        nome_lista = lista["nome"]
        title = u"Listas Públicas: %s" % nome_lista
        slug_atual, slugs_pais = self.__get_slugs__(lista["slug"])
        options = {"title": title, "lista": lista, "itens": itens, "sublistas": sublistas, "slug_atual": slug_atual, "slugs_pais": slugs_pais,
                   "user_events": self.session["user_events"] if "user_events" in self.session else None,
                    "opcao_deleta_todos_os_itens": self.opcao_deleta_todos_os_itens,
                    "opcao_deleta_a_lista": self.opcao_deleta_a_lista,
                    "opcao_deleta_um_item": self.opcao_deleta_um_item,
                    "opcao_edita_a_lista": self.opcao_edita_a_lista,
                    "opcao_edita_um_item": self.opcao_edita_um_item
        }
        result = render_template("listas.html", options)
        self.write(result)

    def get(self, slug_lista):
        """ Quando a página /slug_lista carregar """

        if slug_lista == "":
            raise tornado.web.HTTPError(404) # Listas não podem vir com o nome vazio
        else:
            slug_lista_real = self.__get_slug__(slug_lista)
            if slug_lista_real != slug_lista:
                self.redirect('/' + slug_lista_real) # Vai pro GET com o slug correto
            else:
                lista, sublistas, itens, slug_lista = self.get_lista_info(slug_lista)

                if lista:
                    #Chama o templa listas.html que mostra o nome da lista, suas sublistas e os seus itens
                    self.call_template_listas(lista, sublistas, itens)
                else:
                    #Adiciona a nova lista
                    self.lista_model.cria_nova_lista(slug_lista)

                    #Chama o templa listas.html que mostra o nome da lista, suas sublistas e os seus itens
                    lista, sublistas, itens, slug_lista = self.get_lista_info(slug_lista)
                    self.call_template_listas(lista, sublistas, itens)

    def post(self, slug_lista):
        """ Quando a página /slug_lista pedir para inserir novos itens """

        lista, sublistas, itens, slug_lista = self.get_lista_info(slug_lista)

        if lista:
            # Adiciona novos itens a lista
            lista_id = lista["id"]
            novos_itens_nomes = self.get_argument("novos_itens")
            novos_itens_nomes = novos_itens_nomes.split("\n")
            atuais_itens_nomes = [item["nome"] for item in itens]
            self.lista_model.add_itens(atuais_itens_nomes, novos_itens_nomes, lista_id)
            self.redirect('/' + slug_lista) # Vai pro GET
        else:
            raise tornado.web.HTTPError(404) # Não se adiciona itens numa lista inexistente


    def put(self, slug_lista):
        """ Quando a página /slug_lista pedir para editar listas/itens """

        if slug_lista.endswith(self.opcao_edita_a_lista):
            slug_lista = slug_lista.replace(self.opcao_edita_a_lista, "")
            lista_id = self.__get_lista_id__(slug_lista)
            novo_valor = self.get_argument("novo_valor")
            self.lista_model.altera_nome_lista(lista_id, novo_valor)
        else:
            m_obj = re.search(self.opcao_edita_um_item_regex, slug_lista)
            if m_obj:
                item_id = int(m_obj.group(1))
                novo_valor = self.get_argument("novo_valor")
                self.lista_model.altera_item(item_id, novo_valor)
            else:
                raise tornado.web.HTTPError(404)

    def delete(self, slug_lista):
        """ Quando a página /slug_lista pedir para deletar listas/itens """

        if slug_lista.endswith(self.opcao_deleta_todos_os_itens):
            slug_lista = slug_lista.replace(self.opcao_deleta_todos_os_itens, "")
            lista_id = self.__get_lista_id__(slug_lista)
            self.lista_model.deleta_todos_itens_da_lista(lista_id)
        elif slug_lista.endswith(self.opcao_deleta_a_lista):
            slug_lista = slug_lista.replace(self.opcao_deleta_a_lista, "")
            lista_id = self.__get_lista_id__(slug_lista)
            self.lista_model.deleta_lista(lista_id)
        else:
            m_obj = re.search(self.opcao_deleta_um_item_regex, slug_lista)
            if m_obj:
                item_id = int(m_obj.group(1))
                self.lista_model.deleta_item(item_id)
            else:
                raise tornado.web.HTTPError(404)