Repository: interlegis/sapl

Issue:
Redirecionar urls do sapl 2.5
* Redirecionar urls antigas do sapl 2.5 para as novas correspondentes.
* ~~Montar mecanismo de monitoramento de todas as urls não encontradas (HTTP 404) para corrigir lacunas nos redirecionamentos~~



Discussion:
Em conversa com @sesostris achamos por bem dispensar a ideia do log de urls não encontradas (HTTP 404) e focarmos em ser exaustivos no mapeamento de urls antigas.
@marciomazza OK.
Vou começar o mapeamento das URLs a partir de amanhã. 
A minha ideia do log de urls era mandar um status code(EX: 301 Moved Permanently) para que os usuários do legado possam se programar para substituir essas urls para o novo modelo.
Ótima ideia. Só veja durante o desenvolvimento se não te atrapalha. É possível que o browser guarde cache se usar o HTTP 301 e pare de fazer a requisição enquanto vc ainda precisa fazer ajustes no destino.
Talvez não aconteça, mas é bom ficar ligado.

No final, com certeza, usar 301.
@marciomazza, É só desabilitar o cache do browser igual é descrito [nesse tópico do Stack Overflow](http://stackoverflow.com/questions/5690269/disabling-chrome-cache-for-website-development).
@edwardoliveira ,
A parte de 'Documentos Administrativos' não existe mais ou não esta disponível para acesso público no SAPL31?
Essa url não está sendo redirecionada corretamente:
`consultas/comissao/composicao/composicao_index_html?cod_comissao=4&incluir=0`

Vamos se esta funcionalidade está a cobrindo todos os casos.
Vamos:
1) verificar se podemos analisar logs de acesso em busca de todos os padrões.
2) analisar o código do sapl 2.5 para ver se todos as "views" (os dtml's) estão pelo menos sendo tocados.
Reabrindo a issue, pois o padrão de url "consultas/comissao/composicao/" ainda não foi tratado.

Resolving patch:
diff --git a/sapl/redireciona_urls/urls.py b/sapl/redireciona_urls/urls.py
--- a/sapl/redireciona_urls/urls.py
+++ b/sapl/redireciona_urls/urls.py
@@ -2,20 +2,22 @@
 
 from .apps import AppConfig
 from .views import (RedirecionaAtasList, RedirecionaComissao,
+                    RedirecionaComposicaoComissao,
                     RedirecionaHistoricoTramitacoesList,
                     RedirecionaMateriaLegislativaDetail,
                     RedirecionaMateriaLegislativaList,
                     RedirecionaMateriasPorAnoAutorTipo,
                     RedirecionaMateriasPorAutor, RedirecionaMesaDiretoraView,
                     RedirecionaNormasJuridicasDetail,
-                    RedirecionaNormasJuridicasList, RedirecionaParlamentar,
-                    RedirecionaPautaSessao, RedirecionaPresencaParlamentares,
+                    RedirecionaNormasJuridicasList,
+                    RedirecionaNormasJuridicasTextoIntegral,
+                    RedirecionaParlamentar, RedirecionaPautaSessao,
+                    RedirecionaPresencaParlamentares,
                     RedirecionaRelatoriosList,
                     RedirecionaRelatoriosMateriasEmTramitacaoList,
                     RedirecionaSAPLIndex, RedirecionaSessaoPlenaria)
 
 app_name = AppConfig.name
-
 urlpatterns = [
     url(r'^default_index_html$',
         RedirecionaSAPLIndex.as_view(),
@@ -26,6 +28,9 @@
     url(r'^consultas/comissao/comissao_',
         RedirecionaComissao.as_view(),
         name='redireciona_comissao'),
+    url(r'^consultas/comissao/composicao/composicao_index_html',
+        RedirecionaComposicaoComissao.as_view(),
+        name='redireciona_composicaio_comissao'),
     url(r'^consultas/pauta_sessao/pauta_sessao_',
         RedirecionaPautaSessao.as_view(),
         name='redireciona_pauta_sessao_'),
@@ -44,6 +49,9 @@
     url(r'^consultas/norma_juridica/norma_juridica_mostrar_proc',
         RedirecionaNormasJuridicasDetail.as_view(),
         name='redireciona_norma_juridica_detail'),
+    url(r'^sapl_documentos/normajuridica/(?P<norma_id>[0-9]+)_texto_integral',
+        RedirecionaNormasJuridicasTextoIntegral.as_view(),
+        name='redireciona_norma_juridica_texto_integral'),
     url(r'^relatorios_administrativos/relatorios_administrativos_index_html$',
         RedirecionaRelatoriosList.as_view(),
         name='redireciona_relatorios_list'),
@@ -51,6 +59,9 @@
         RedirecionaRelatoriosMateriasEmTramitacaoList.as_view(),
         name='redireciona_relatorio_materia_por_tramitacao'),
     url(r'tramitacaoMaterias/materia_mostrar_proc$',
+        RedirecionaMateriaLegislativaDetail.as_view(),
+        name='redireciona_materialegislativa_detail_tramitacao'),
+    url(r'consultas/materia/materia_mostrar_proc$',
         RedirecionaMateriaLegislativaDetail.as_view(),
         name='redireciona_materialegislativa_detail'),
     url(r'^generico/materia_pesquisar_',
@@ -71,4 +82,4 @@
     url(r'propositurasAnoAutorTipo',
         RedirecionaMateriasPorAnoAutorTipo.as_view(),
         name='redireciona_materia_por_ano_autor_tipo_list'),
-]
+]
\ No newline at end of file
diff --git a/sapl/redireciona_urls/views.py b/sapl/redireciona_urls/views.py
--- a/sapl/redireciona_urls/views.py
+++ b/sapl/redireciona_urls/views.py
@@ -1,14 +1,14 @@
 from django.core.urlresolvers import NoReverseMatch, reverse
 from django.views.generic import RedirectView
 
+from sapl.audiencia.apps import AppConfig as audienciaConfig
 from sapl.base.apps import AppConfig as atasConfig
 from sapl.comissoes.apps import AppConfig as comissoesConfig
 from sapl.materia.apps import AppConfig as materiaConfig
 from sapl.norma.apps import AppConfig as normaConfig
+from sapl.norma.models import NormaJuridica
 from sapl.parlamentares.apps import AppConfig as parlamentaresConfig
 from sapl.sessao.apps import AppConfig as sessaoConfig
-from sapl.audiencia.apps import AppConfig as audienciaConfig
-
 from .exceptions import UnknownUrlNameError
 
 EMPTY_STRING = ''
@@ -142,6 +142,33 @@ def get_redirect_url(self):
         return url
 
 
+class RedirecionaComposicaoComissao(RedirectView):
+    permanent = True
+
+    def get_redirect_url(self):
+        url = EMPTY_STRING
+        pk_composicao = self.request.GET.get(
+            'cod_periodo_comp_sel', EMPTY_STRING)
+        pk_comissao = self.request.GET.get('cod_comissao', EMPTY_STRING)
+
+        if pk_comissao:
+            kwargs = {'pk': pk_comissao}
+
+            try:
+                url = reverse(comissao_detail, kwargs=kwargs)
+            except NoReverseMatch:
+                raise UnknownUrlNameError(comissao_detail)
+        else:
+            try:
+                url = reverse(comissao_list)
+            except NoReverseMatch:
+                raise UnknownUrlNameError(comissao_list)
+
+        url = has_iframe(url, self.request)
+
+        return url
+
+
 class RedirecionaPautaSessao(RedirectView):
     permanent = True
 
@@ -418,6 +445,24 @@ def get_redirect_url(self):
         return url
 
 
+class RedirecionaNormasJuridicasTextoIntegral(RedirectView):
+    permanent = False
+
+    def get_redirect_url(self, **kwargs):
+        # import ipdb;ipdb.set_trace()
+        url = EMPTY_STRING
+        try:
+            norma = NormaJuridica.objects.get(pk=kwargs['norma_id'])
+            if norma:
+                url = norma.texto_integral.url
+        except Exception as e:
+            raise e
+
+        url = has_iframe(url, self.request)
+
+        return url
+
+
 class RedirecionaNormasJuridicasList(RedirectView):
 
     permanent = True


Test patch:
diff --git a/sapl/test_urls.py b/sapl/test_urls.py
--- a/sapl/test_urls.py
+++ b/sapl/test_urls.py
@@ -278,25 +278,28 @@ def test_urlpatterns(url_item, admin_client):
     """ % (app_name, url)
 
     app_name = app_name[5:]
-
-    assert app_name in apps_url_patterns_prefixs_and_users, """
-        A app (%s) da url (%s) não consta na lista de prefixos do teste
-    """ % (app_name, url)
-
-    if app_name in apps_url_patterns_prefixs_and_users:
-        prefixs = apps_url_patterns_prefixs_and_users[app_name]['prefixs']
-
-        isvalid = False
-        for prefix in prefixs:
-            if url.startswith(prefix):
-                isvalid = True
-                break
-
-        assert isvalid, """
-            O prefixo da url (%s) não está no padrão de sua app (%s).
-            Os prefixos permitidos são:
-            %s
-            """ % (url, app_name, prefixs)
+    if app_name != 'redireciona_urls':
+        assert app_name in apps_url_patterns_prefixs_and_users, """
+            A app (%s) da url (%s) não consta na lista de prefixos do teste
+        """ % (app_name, url)
+
+        if app_name in apps_url_patterns_prefixs_and_users:
+            prefixs = apps_url_patterns_prefixs_and_users[app_name]['prefixs']
+
+            isvalid = False
+            for prefix in prefixs:
+                if url.startswith(prefix):
+                    isvalid = True
+                    break
+
+            assert isvalid, """
+                O prefixo da url (%s) não está no padrão de sua app (%s).
+                Os prefixos permitidos são:
+                %s
+                """ % (url, app_name, prefixs)
+    else:
+        # ignorando app de redirecionamento de urls no padrão do SAPL 2.5
+        pass
 
 
 urls_publicas_excecoes = {