From 5b5cf7424c027e2d6f7ba429203da944e3a7e95a Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 16 Mar 2017 16:42:43 -0300 Subject: [PATCH 01/17] Simplifica upload_to da logo da CasaLegislativa --- sapl/base/migrations/0001_initial.py | 2 +- sapl/base/models.py | 10 +--------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/sapl/base/migrations/0001_initial.py b/sapl/base/migrations/0001_initial.py index bcd9ae29d..dd61fdcf5 100644 --- a/sapl/base/migrations/0001_initial.py +++ b/sapl/base/migrations/0001_initial.py @@ -66,7 +66,7 @@ class Migration(migrations.Migration): ('uf', models.CharField(choices=[('AC', 'Acre'), ('AL', 'Alagoas'), ('AP', 'Amapá'), ('AM', 'Amazonas'), ('BA', 'Bahia'), ('CE', 'Ceará'), ('DF', 'Distrito Federal'), ('ES', 'Espírito Santo'), ('GO', 'Goiás'), ('MA', 'Maranhão'), ('MT', 'Mato Grosso'), ('MS', 'Mato Grosso do Sul'), ('MG', 'Minas Gerais'), ('PR', 'Paraná'), ('PB', 'Paraíba'), ('PA', 'Pará'), ('PE', 'Pernambuco'), ('PI', 'Piauí'), ('RJ', 'Rio de Janeiro'), ('RN', 'Rio Grande do Norte'), ('RS', 'Rio Grande do Sul'), ('RO', 'Rondônia'), ('RR', 'Roraima'), ('SC', 'Santa Catarina'), ('SE', 'Sergipe'), ('SP', 'São Paulo'), ('TO', 'Tocantins'), ('EX', 'Exterior')], max_length=100, verbose_name='UF')), ('telefone', models.CharField(blank=True, max_length=100, verbose_name='Telefone')), ('fax', models.CharField(blank=True, max_length=100, verbose_name='Fax')), - ('logotipo', models.ImageField(blank=True, upload_to=sapl.base.models.get_casa_media_path, verbose_name='Logotipo')), + ('logotipo', models.ImageField(blank=True, upload_to='sapl/casa/logotipo/', verbose_name='Logotipo')), ('endereco_web', models.URLField(blank=True, max_length=100, verbose_name='HomePage')), ('email', models.EmailField(blank=True, max_length=100, verbose_name='E-mail')), ('informacao_geral', models.TextField(blank=True, max_length=100, verbose_name='Informação Geral')), diff --git a/sapl/base/models.py b/sapl/base/models.py index 640bb7d52..8825ea2a4 100644 --- a/sapl/base/models.py +++ b/sapl/base/models.py @@ -13,14 +13,6 @@ SEQUENCIA_NUMERACAO = (('A', _('Sequencial por ano')), ('U', _('Sequencial único'))) -def get_sessao_media_path(instance, subpath, filename): - return './sapl/casa/%s/%s' % (subpath, filename) - - -def get_casa_media_path(instance, filename): - return get_sessao_media_path(instance, 'Logotipo', filename) - - @reversion.register() class CasaLegislativa(models.Model): # TODO ajustar todos os max_length !!!! @@ -41,7 +33,7 @@ class CasaLegislativa(models.Model): max_length=100, blank=True, verbose_name=_('Fax')) logotipo = models.ImageField( blank=True, - upload_to=get_casa_media_path, + upload_to='sapl/casa/logotipo/', verbose_name=_('Logotipo')) endereco_web = models.URLField( max_length=100, blank=True, verbose_name=_('HomePage')) From 2281c05f87b8f64153b38d604d2869384dce965e Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 17 Mar 2017 09:35:40 -0300 Subject: [PATCH 02/17] Migra logotipo da Casa --- sapl/legacy/migration.py | 43 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 379ac13ad..23cdec286 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -1,3 +1,4 @@ +import os import re from datetime import date from subprocess import PIPE, call @@ -16,6 +17,7 @@ from django.db.models.base import ModelBase from model_mommy import mommy from model_mommy.mommy import foreign_key_required, make +from sapl.base import CasaLegislativa from sapl.base.models import Autor, ProblemaMigracao from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.legacy.models import Protocolo as ProtocoloLegado @@ -27,7 +29,7 @@ from sapl.norma.models import (AssuntoNorma, NormaJuridica, from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo from sapl.sessao.models import ExpedienteMateria, OrdemDia, SessaoPlenaria -from sapl.settings import PROJECT_DIR +from sapl.settings import MEDIA_ROOT, PROJECT_DIR from sapl.utils import normalize # BASE ###################################################################### @@ -732,3 +734,42 @@ def make_with_log(model, _quantity=None, make_m2m=False, **attrs): return stub make_with_log.required = foreign_key_required + +# MIGRAÇÃO DE DOCUMENTOS ################################################### + +DOCS = {'logotipo': ('props_sapl/logo_casa.gif', + 'casa/logotipo/logo_casa.gif')} + +DOCS = {k: (os.path.join('sapl_documentos', origem), + os.path.join('sapl', destino)) + for k, (origem, destino) in DOCS.items()} + + +def em_media(caminho): + return os.path.join(MEDIA_ROOT, caminho) + + +def mover_documento(origem, destino): + origem, destino = map(em_media, (origem, destino)) + os.makedirs(os.path.dirname(destino), exist_ok=True) + os.rename(origem, destino) + + +def migrar_docs_logo(): + origem, destino = DOCS['logotipo'] + props_sapl = os.path.dirname(origem) + # a pasta props_sapl deve conter apenas o origem e metadatas! + assert set(os.listdir(em_media(props_sapl))) == { + 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata'} + mover_documento(origem, destino) + casa = CasaLegislativa.objects.first() + casa.logotipo = destino + casa.save() + + +def migrar_documentos(): + # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT + # com o conteúdo da pasta de mesmo nome do zope + # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será + # apagada + migrar_docs_logo() From 50e44c5545bb7edb31117d696ff8e6f3d88d37a2 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 17 Mar 2017 16:47:51 -0300 Subject: [PATCH 03/17] =?UTF-8?q?Retorna=20settings=20de=20migra=C3=A7?= =?UTF-8?q?=C3=A3o=20para=20o=20modo=20DEBUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy_migration_settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sapl/legacy_migration_settings.py b/sapl/legacy_migration_settings.py index 2b7366fc2..b9d2cefc2 100644 --- a/sapl/legacy_migration_settings.py +++ b/sapl/legacy_migration_settings.py @@ -23,7 +23,7 @@ if DATABASE_NAME_OVERRIDE: DATABASE_ROUTERS = ['sapl.legacy.router.LegacyRouter', ] -DEBUG = False +DEBUG = True MOMMY_CUSTOM_FIELDS_GEN = { 'django.db.models.ForeignKey': 'sapl.legacy.migration.make_with_log' From 6be75a03b247c186a4e0ca988506dbb68865dcc5 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 17 Mar 2017 18:08:16 -0300 Subject: [PATCH 04/17] Migra fotos dos parlamentares --- sapl/legacy/migration.py | 43 +++++++++++++++++++++++++++++++++------- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 23cdec286..86cd48793 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -1,6 +1,7 @@ import os import re from datetime import date +from glob import glob from subprocess import PIPE, call import pkg_resources @@ -737,12 +738,21 @@ make_with_log.required = foreign_key_required # MIGRAÇÃO DE DOCUMENTOS ################################################### -DOCS = {'logotipo': ('props_sapl/logo_casa.gif', - 'casa/logotipo/logo_casa.gif')} +DOCS = { + CasaLegislativa: ( + 'logotipo', + 'props_sapl/logo_casa.gif', + 'casa/logotipo/logo_casa.gif'), + Parlamentar: ( + 'fotografia', + 'parlamentar/fotos/{}_foto_parlamentar', + 'parlamentar/{0}/{0}_foto_parlamentar'), +} -DOCS = {k: (os.path.join('sapl_documentos', origem), - os.path.join('sapl', destino)) - for k, (origem, destino) in DOCS.items()} +DOCS = {tipo: (campo, + os.path.join('sapl_documentos', origem), + os.path.join('sapl', destino)) + for tipo, (campo, origem, destino) in DOCS.items()} def em_media(caminho): @@ -750,13 +760,14 @@ def em_media(caminho): def mover_documento(origem, destino): - origem, destino = map(em_media, (origem, destino)) + origem, destino = [em_media(c) if not os.path.isabs(c) else c + for c in (origem, destino)] os.makedirs(os.path.dirname(destino), exist_ok=True) os.rename(origem, destino) def migrar_docs_logo(): - origem, destino = DOCS['logotipo'] + _, origem, destino = DOCS[CasaLegislativa] props_sapl = os.path.dirname(origem) # a pasta props_sapl deve conter apenas o origem e metadatas! assert set(os.listdir(em_media(props_sapl))) == { @@ -767,9 +778,27 @@ def migrar_docs_logo(): casa.save() +def migrar_docs_por_ids(tipo): + campo, base_origem, base_destino = DOCS[tipo] + origens = glob.glob(em_media(base_origem.format('*'))) + + def get_id(caminho): + match = re.match('.*/' + base_origem.format('(\d+)'), caminho) + return int(match.group(1)) + + for origem in origens: + id = get_id(origem) + destino = base_destino.format(id) + mover_documento(origem, destino) + obj = tipo.objects.get(pk=id) + setattr(obj, campo, destino) + obj.save() + + def migrar_documentos(): # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT # com o conteúdo da pasta de mesmo nome do zope # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será # apagada migrar_docs_logo() + migrar_docs_por_ids(Parlamentar) From 26cefd3ba12d1727d1930526475cc84b4df86fe8 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 18 Mar 2017 10:35:41 -0300 Subject: [PATCH 05/17] =?UTF-8?q?Move=20migracao=20de=20documentos=20para?= =?UTF-8?q?=20m=C3=B3dulo=20=C3=A0=20parte?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 74 ++++++++++++++++++++++++++++++ sapl/legacy/migration.py | 72 +---------------------------- 2 files changed, 75 insertions(+), 71 deletions(-) create mode 100644 sapl/legacy/migracao_documentos.py diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py new file mode 100644 index 000000000..d9cb3c086 --- /dev/null +++ b/sapl/legacy/migracao_documentos.py @@ -0,0 +1,74 @@ +import os +import re +from glob import glob + +from sapl.base.models import CasaLegislativa +from sapl.parlamentares.models import Parlamentar +from sapl.settings import MEDIA_ROOT + +# MIGRAÇÃO DE DOCUMENTOS ################################################### + +DOCS = { + CasaLegislativa: ( + 'logotipo', + 'props_sapl/logo_casa.gif', + 'casa/logotipo/logo_casa.gif'), + Parlamentar: ( + 'fotografia', + 'parlamentar/fotos/{}_foto_parlamentar', + 'parlamentar/{0}/{0}_foto_parlamentar'), +} + +DOCS = {tipo: (campo, + os.path.join('sapl_documentos', origem), + os.path.join('sapl', destino)) + for tipo, (campo, origem, destino) in DOCS.items()} + + +def em_media(caminho): + return os.path.join(MEDIA_ROOT, caminho) + + +def mover_documento(origem, destino): + origem, destino = [em_media(c) if not os.path.isabs(c) else c + for c in (origem, destino)] + os.makedirs(os.path.dirname(destino), exist_ok=True) + os.rename(origem, destino) + + +def migrar_docs_logo(): + _, origem, destino = DOCS[CasaLegislativa] + props_sapl = os.path.dirname(origem) + # a pasta props_sapl deve conter apenas o origem e metadatas! + assert set(os.listdir(em_media(props_sapl))) == { + 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata'} + mover_documento(origem, destino) + casa = CasaLegislativa.objects.first() + casa.logotipo = destino + casa.save() + + +def migrar_docs_por_ids(tipo): + campo, base_origem, base_destino = DOCS[tipo] + origens = glob.glob(em_media(base_origem.format('*'))) + + def get_id(caminho): + match = re.match('.*/' + base_origem.format('(\d+)'), caminho) + return int(match.group(1)) + + for origem in origens: + id = get_id(origem) + destino = base_destino.format(id) + mover_documento(origem, destino) + obj = tipo.objects.get(pk=id) + setattr(obj, campo, destino) + obj.save() + + +def migrar_documentos(): + # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT + # com o conteúdo da pasta de mesmo nome do zope + # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será + # apagada + migrar_docs_logo() + migrar_docs_por_ids(Parlamentar) diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 86cd48793..379ac13ad 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -1,7 +1,5 @@ -import os import re from datetime import date -from glob import glob from subprocess import PIPE, call import pkg_resources @@ -18,7 +16,6 @@ from django.db.models.base import ModelBase from model_mommy import mommy from model_mommy.mommy import foreign_key_required, make -from sapl.base import CasaLegislativa from sapl.base.models import Autor, ProblemaMigracao from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.legacy.models import Protocolo as ProtocoloLegado @@ -30,7 +27,7 @@ from sapl.norma.models import (AssuntoNorma, NormaJuridica, from sapl.parlamentares.models import Parlamentar from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo from sapl.sessao.models import ExpedienteMateria, OrdemDia, SessaoPlenaria -from sapl.settings import MEDIA_ROOT, PROJECT_DIR +from sapl.settings import PROJECT_DIR from sapl.utils import normalize # BASE ###################################################################### @@ -735,70 +732,3 @@ def make_with_log(model, _quantity=None, make_m2m=False, **attrs): return stub make_with_log.required = foreign_key_required - -# MIGRAÇÃO DE DOCUMENTOS ################################################### - -DOCS = { - CasaLegislativa: ( - 'logotipo', - 'props_sapl/logo_casa.gif', - 'casa/logotipo/logo_casa.gif'), - Parlamentar: ( - 'fotografia', - 'parlamentar/fotos/{}_foto_parlamentar', - 'parlamentar/{0}/{0}_foto_parlamentar'), -} - -DOCS = {tipo: (campo, - os.path.join('sapl_documentos', origem), - os.path.join('sapl', destino)) - for tipo, (campo, origem, destino) in DOCS.items()} - - -def em_media(caminho): - return os.path.join(MEDIA_ROOT, caminho) - - -def mover_documento(origem, destino): - origem, destino = [em_media(c) if not os.path.isabs(c) else c - for c in (origem, destino)] - os.makedirs(os.path.dirname(destino), exist_ok=True) - os.rename(origem, destino) - - -def migrar_docs_logo(): - _, origem, destino = DOCS[CasaLegislativa] - props_sapl = os.path.dirname(origem) - # a pasta props_sapl deve conter apenas o origem e metadatas! - assert set(os.listdir(em_media(props_sapl))) == { - 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata'} - mover_documento(origem, destino) - casa = CasaLegislativa.objects.first() - casa.logotipo = destino - casa.save() - - -def migrar_docs_por_ids(tipo): - campo, base_origem, base_destino = DOCS[tipo] - origens = glob.glob(em_media(base_origem.format('*'))) - - def get_id(caminho): - match = re.match('.*/' + base_origem.format('(\d+)'), caminho) - return int(match.group(1)) - - for origem in origens: - id = get_id(origem) - destino = base_destino.format(id) - mover_documento(origem, destino) - obj = tipo.objects.get(pk=id) - setattr(obj, campo, destino) - obj.save() - - -def migrar_documentos(): - # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT - # com o conteúdo da pasta de mesmo nome do zope - # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será - # apagada - migrar_docs_logo() - migrar_docs_por_ids(Parlamentar) From c0fe1794f8d45a6ea57ba5eaeba0e6a55bd9d16c Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 18 Mar 2017 10:50:51 -0300 Subject: [PATCH 06/17] =?UTF-8?q?Cria=20CasaLegislativa=20se=20necess?= =?UTF-8?q?=C3=A1rio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index d9cb3c086..5d03b47d3 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -36,6 +36,15 @@ def mover_documento(origem, destino): os.rename(origem, destino) +def get_casa_legislativa(): + casa = CasaLegislativa.objects.first() + if not casa: + casa = CasaLegislativa.objects.create(**{k: 'PREENCHER...' for k in [ + 'codigo', 'nome', 'sigla', 'endereco', 'cep', 'municipio', 'uf', + ]}) + return casa + + def migrar_docs_logo(): _, origem, destino = DOCS[CasaLegislativa] props_sapl = os.path.dirname(origem) @@ -43,14 +52,14 @@ def migrar_docs_logo(): assert set(os.listdir(em_media(props_sapl))) == { 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata'} mover_documento(origem, destino) - casa = CasaLegislativa.objects.first() + casa = get_casa_legislativa() casa.logotipo = destino casa.save() def migrar_docs_por_ids(tipo): campo, base_origem, base_destino = DOCS[tipo] - origens = glob.glob(em_media(base_origem.format('*'))) + origens = glob(em_media(base_origem.format('*'))) def get_id(caminho): match = re.match('.*/' + base_origem.format('(\d+)'), caminho) From 899838a096308bf6380c7ba16a32e1d2cacbab66 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 21 Mar 2017 11:49:31 -0300 Subject: [PATCH 07/17] =?UTF-8?q?Migra=20texto=20integral=20de=20Mat=C3=A9?= =?UTF-8?q?ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 41 +++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 5d03b47d3..a81196e2f 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -1,12 +1,28 @@ +import mimetypes import os import re from glob import glob +import magic + from sapl.base.models import CasaLegislativa +from sapl.materia.models import MateriaLegislativa from sapl.parlamentares.models import Parlamentar from sapl.settings import MEDIA_ROOT # MIGRAÇÃO DE DOCUMENTOS ################################################### +EXTENSOES = { + 'application/msword': '.doc', + 'application/pdf': '.pdf', + 'application/vnd.oasis.opendocument.text': '.odt', + 'application/vnd.openxmlformats-' + 'officedocument.wordprocessingml.document': '.docx', + 'application/xml': '.xml', + 'application/zip': '.zip', + 'image/jpeg': '.jpeg', + 'image/png': '.png', + 'text/html': '.html', +} DOCS = { CasaLegislativa: ( @@ -16,7 +32,12 @@ DOCS = { Parlamentar: ( 'fotografia', 'parlamentar/fotos/{}_foto_parlamentar', - 'parlamentar/{0}/{0}_foto_parlamentar'), + 'parlamentar/{0}/{0}_foto_parlamentar{1}'), + MateriaLegislativa: ( + 'texto_original', + 'materia/{}_texto_integral', + 'materialegislativa/{0}/{0}_texto_integral{1}', + ) } DOCS = {tipo: (campo, @@ -57,6 +78,19 @@ def migrar_docs_logo(): casa.save() +def get_extensao(caminho): + mime = magic.from_file(caminho, mime=True) + try: + return EXTENSOES[mime] + except KeyError as e: + raise Exception('\n'.join([ + 'Extensão não conhecida. Algumas possibilidades são:', ] + + [" '{}': '{}',".format(mime, ext) + for ext in mimetypes.guess_all_extensions(mime)] + + ['Atualize o código do dicionário EXTENSOES!'] + )) from e + + def migrar_docs_por_ids(tipo): campo, base_origem, base_destino = DOCS[tipo] origens = glob(em_media(base_origem.format('*'))) @@ -66,8 +100,8 @@ def migrar_docs_por_ids(tipo): return int(match.group(1)) for origem in origens: - id = get_id(origem) - destino = base_destino.format(id) + id, extensao = get_id(origem), get_extensao(origem) + destino = base_destino.format(id, extensao) mover_documento(origem, destino) obj = tipo.objects.get(pk=id) setattr(obj, campo, destino) @@ -81,3 +115,4 @@ def migrar_documentos(): # apagada migrar_docs_logo() migrar_docs_por_ids(Parlamentar) + migrar_docs_por_ids(MateriaLegislativa) From eab4eac7094bb322de864d384baf6460d9c28fc6 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 21 Mar 2017 13:31:59 -0300 Subject: [PATCH 08/17] Adiciona folhas XSLT usadas em documentos --- sapl/static/XSLT/HTML/.objects | 11 +++ sapl/static/XSLT/HTML/estilo.css | 95 +++++++++++++++++++++ sapl/static/XSLT/HTML/indicacao.xsl | 51 ++++++++++++ sapl/static/XSLT/HTML/mocao.xsl | 41 +++++++++ sapl/static/XSLT/HTML/mocao2.xsl | 45 ++++++++++ sapl/static/XSLT/HTML/parecer.xsl | 41 +++++++++ sapl/static/XSLT/HTML/pedido.xsl | 47 +++++++++++ sapl/static/XSLT/HTML/pedido2.xsl | 53 ++++++++++++ sapl/static/XSLT/HTML/pl.xsl | 105 ++++++++++++++++++++++++ sapl/static/XSLT/HTML/pl2.xsl | 100 ++++++++++++++++++++++ sapl/static/XSLT/HTML/requerimento.xsl | 52 ++++++++++++ sapl/static/XSLT/HTML/requerimento2.xsl | 57 +++++++++++++ sapl/urls.py | 4 + 13 files changed, 702 insertions(+) create mode 100644 sapl/static/XSLT/HTML/.objects create mode 100644 sapl/static/XSLT/HTML/estilo.css create mode 100644 sapl/static/XSLT/HTML/indicacao.xsl create mode 100644 sapl/static/XSLT/HTML/mocao.xsl create mode 100644 sapl/static/XSLT/HTML/mocao2.xsl create mode 100644 sapl/static/XSLT/HTML/parecer.xsl create mode 100644 sapl/static/XSLT/HTML/pedido.xsl create mode 100644 sapl/static/XSLT/HTML/pedido2.xsl create mode 100644 sapl/static/XSLT/HTML/pl.xsl create mode 100644 sapl/static/XSLT/HTML/pl2.xsl create mode 100644 sapl/static/XSLT/HTML/requerimento.xsl create mode 100644 sapl/static/XSLT/HTML/requerimento2.xsl diff --git a/sapl/static/XSLT/HTML/.objects b/sapl/static/XSLT/HTML/.objects new file mode 100644 index 000000000..ca1ce01f2 --- /dev/null +++ b/sapl/static/XSLT/HTML/.objects @@ -0,0 +1,11 @@ +estilo.css:DTML Method +indicacao.xsl:File +mocao.xsl:File +mocao2.xsl:File +parecer.xsl:File +pedido.xsl:File +pedido2.xsl:File +pl.xsl:File +pl2.xsl:File +requerimento.xsl:File +requerimento2.xsl:File diff --git a/sapl/static/XSLT/HTML/estilo.css b/sapl/static/XSLT/HTML/estilo.css new file mode 100644 index 000000000..aac85f176 --- /dev/null +++ b/sapl/static/XSLT/HTML/estilo.css @@ -0,0 +1,95 @@ + body { + font-family: Times; + text-align: justify; + font-size: 12 pt; + margin: 5px 1cm 20px 2cm; +} + + p, + .p{ + font-family: Times; + text-align: justify; + font-size: 12pt; + text-indent: 1.5cm; + margin: 40px 0 20px 0; + } + + .pequeno { + font-family: Times; + text-align: left; + font-size: 13pt; + margin: 0px 0 0px 0; + } + + .cabecalho { + font-family: Times; + font-weight:bold; + text-align: left; + font-size: 15pt; + margin: 10px 0 0px 0; + } + + .texto { + font-family: Times; + text-align: justify; + font-size: 12pt; + margin: 0px 0px 0px 0px; + } + + .data { + text-align: right; + } + + .autor { + text-align: center; + } + + .center { + text-align: center; + } + + .semrecuo { + text-indent: 0; + } + + .ementa { + text-align: justify; + margin-left: 50%; + text-indent: 0; + } + + .titulos1 { + text-align: center; + margin: 10px 0 0px 0; + } + + .titulos2 { + text-align: center; + margin: 0px 0 0px 0; + } + + p.artigo { + text-align: justify; + text-indent: 1cm; + margin: 10px 0 0px 0; +} + + +#imagem { + float:left; + } + +#autores + { + -moz-column-count:3; /* Firefox */ + -webkit-column-count:3; /* Safari and Chrome */ + width:50px; + + } + +#col1 { width: 33%; float: left; center: 10px; } +#col2 { width: 33%; float: left; center: 10px; } +#col3 { width: 33%; float: left; center: 10px; } + + + diff --git a/sapl/static/XSLT/HTML/indicacao.xsl b/sapl/static/XSLT/HTML/indicacao.xsl new file mode 100644 index 000000000..edb4575c7 --- /dev/null +++ b/sapl/static/XSLT/HTML/indicacao.xsl @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + +
+
+

+


+

Câmara Municipal de Agudo

+

Estado do Rio Grande do Sul





+
+

+ +
+ +

+
+ + +

+
+ + +

+ +
+ +

+
+ + +

+
+ +
diff --git a/sapl/static/XSLT/HTML/mocao.xsl b/sapl/static/XSLT/HTML/mocao.xsl new file mode 100644 index 000000000..adb7ef3c9 --- /dev/null +++ b/sapl/static/XSLT/HTML/mocao.xsl @@ -0,0 +1,41 @@ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sapl/static/XSLT/HTML/mocao2.xsl b/sapl/static/XSLT/HTML/mocao2.xsl new file mode 100644 index 000000000..14f71c982 --- /dev/null +++ b/sapl/static/XSLT/HTML/mocao2.xsl @@ -0,0 +1,45 @@ + + + + + + + + + + +
+
+ +


+

Câmara Municipal de Agudo

+

Estado do Rio Grande do Sul





+
+ + + +
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ +
\ No newline at end of file diff --git a/sapl/static/XSLT/HTML/parecer.xsl b/sapl/static/XSLT/HTML/parecer.xsl new file mode 100644 index 000000000..14100320e --- /dev/null +++ b/sapl/static/XSLT/HTML/parecer.xsl @@ -0,0 +1,41 @@ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sapl/static/XSLT/HTML/pedido.xsl b/sapl/static/XSLT/HTML/pedido.xsl new file mode 100644 index 000000000..9e5002d01 --- /dev/null +++ b/sapl/static/XSLT/HTML/pedido.xsl @@ -0,0 +1,47 @@ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sapl/static/XSLT/HTML/pedido2.xsl b/sapl/static/XSLT/HTML/pedido2.xsl new file mode 100644 index 000000000..facc154c6 --- /dev/null +++ b/sapl/static/XSLT/HTML/pedido2.xsl @@ -0,0 +1,53 @@ + + + + + + + + + + +
+
+ +


+

Câmara Municipal de Agudo

+

Estado do Rio Grande do Sul





+
+ + + +
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ +
\ No newline at end of file diff --git a/sapl/static/XSLT/HTML/pl.xsl b/sapl/static/XSLT/HTML/pl.xsl new file mode 100644 index 000000000..0da6eddb4 --- /dev/null +++ b/sapl/static/XSLT/HTML/pl.xsl @@ -0,0 +1,105 @@ + + + + + + + + <xsl:value-of select="@id"/> + + + + + + + + + +
+

PROPOSIÇÃO

+
+ +
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +

+ +

+
+ +
+

JUSTIFICATIVA

+
+

+ +

+
+ +
+

MENSAGEM

+
+

+ +

+
+
\ No newline at end of file diff --git a/sapl/static/XSLT/HTML/pl2.xsl b/sapl/static/XSLT/HTML/pl2.xsl new file mode 100644 index 000000000..f68506f95 --- /dev/null +++ b/sapl/static/XSLT/HTML/pl2.xsl @@ -0,0 +1,100 @@ + + + + + + + + + + +
+
+ +


+

Câmara Municipal de Agudo

+

Estado do Rio Grande do Sul





+
+ + + + +
+ + +

+
+ + +

+
+ + +

+
+ + +

+

+
+ + +

+

+
+ + +

+

+
+ + +

+

+
+ + +

+

+
+ + +

+

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ +
\ No newline at end of file diff --git a/sapl/static/XSLT/HTML/requerimento.xsl b/sapl/static/XSLT/HTML/requerimento.xsl new file mode 100644 index 000000000..58f202b09 --- /dev/null +++ b/sapl/static/XSLT/HTML/requerimento.xsl @@ -0,0 +1,52 @@ + + + + + + + + +
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/sapl/static/XSLT/HTML/requerimento2.xsl b/sapl/static/XSLT/HTML/requerimento2.xsl new file mode 100644 index 000000000..3d63f6cf8 --- /dev/null +++ b/sapl/static/XSLT/HTML/requerimento2.xsl @@ -0,0 +1,57 @@ + + + + + + + + + + +
+
+ +


+

Câmara Municipal de Agudo

+

Estado do Rio Grande do Sul





+
+ + + +
+ + +

+
+ + +

+
+ + +

+
+ + +

+
+ + +

+ +
+ +

+ +
+ +

+
+ + +

+
+ +
\ No newline at end of file diff --git a/sapl/urls.py b/sapl/urls.py index 58deafa3a..fe6bcc71e 100644 --- a/sapl/urls.py +++ b/sapl/urls.py @@ -57,6 +57,10 @@ urlpatterns = [ url(r'^favicon\.ico$', RedirectView.as_view( url='/static/img/favicon.ico', permanent=True)), + + # Folhas XSLT e extras referenciadas por documentos migrados do sapl 2.5 + url(r'^XSLT/HTML/(?P.*)$', RedirectView.as_view( + url='/static/XSLT/HTML/%(path)s', permanent=False)), ] From a0eb77d197575f894a472e952a2e785053528cd9 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 21 Mar 2017 15:17:15 -0300 Subject: [PATCH 09/17] =?UTF-8?q?Migra=20documentos=20acess=C3=B3rios=20de?= =?UTF-8?q?=20mat=C3=A9ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 35 +++++++++++++++++------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index a81196e2f..778e2d52c 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -1,12 +1,11 @@ import mimetypes import os import re -from glob import glob import magic from sapl.base.models import CasaLegislativa -from sapl.materia.models import MateriaLegislativa +from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.parlamentares.models import Parlamentar from sapl.settings import MEDIA_ROOT @@ -36,8 +35,11 @@ DOCS = { MateriaLegislativa: ( 'texto_original', 'materia/{}_texto_integral', - 'materialegislativa/{0}/{0}_texto_integral{1}', - ) + 'materialegislativa/{0}/{0}_texto_integral{1}'), + DocumentoAcessorio: ( + 'arquivo', + 'materia/{}', + 'documentoacessorio/{0}/{0}{1}'), } DOCS = {tipo: (campo, @@ -93,19 +95,21 @@ def get_extensao(caminho): def migrar_docs_por_ids(tipo): campo, base_origem, base_destino = DOCS[tipo] - origens = glob(em_media(base_origem.format('*'))) - def get_id(caminho): - match = re.match('.*/' + base_origem.format('(\d+)'), caminho) - return int(match.group(1)) + dir_origem, nome_origem = os.path.split(em_media(base_origem)) + pat = re.compile('^{}$'.format(nome_origem.format('(\d+)'))) + for arq in os.listdir(dir_origem): + match = pat.match(arq) + if match: + origem = os.path.join(dir_origem, match.group(0)) + id = match.group(1) + extensao = get_extensao(origem) + destino = base_destino.format(id, extensao) + mover_documento(origem, destino) - for origem in origens: - id, extensao = get_id(origem), get_extensao(origem) - destino = base_destino.format(id, extensao) - mover_documento(origem, destino) - obj = tipo.objects.get(pk=id) - setattr(obj, campo, destino) - obj.save() + obj = tipo.objects.get(pk=id) + setattr(obj, campo, destino) + obj.save() def migrar_documentos(): @@ -116,3 +120,4 @@ def migrar_documentos(): migrar_docs_logo() migrar_docs_por_ids(Parlamentar) migrar_docs_por_ids(MateriaLegislativa) + migrar_docs_por_ids(DocumentoAcessorio) From 51623e8b130f6779677a02035de0ab60186d8d56 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Wed, 22 Mar 2017 17:53:11 -0300 Subject: [PATCH 10/17] =?UTF-8?q?Migra=20texto=20integral=20de=20norma=20j?= =?UTF-8?q?ur=C3=ADdica?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 778e2d52c..148f2a03d 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -6,6 +6,7 @@ import magic from sapl.base.models import CasaLegislativa from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa +from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar from sapl.settings import MEDIA_ROOT @@ -14,13 +15,17 @@ EXTENSOES = { 'application/msword': '.doc', 'application/pdf': '.pdf', 'application/vnd.oasis.opendocument.text': '.odt', - 'application/vnd.openxmlformats-' - 'officedocument.wordprocessingml.document': '.docx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '.docx', # noqa 'application/xml': '.xml', 'application/zip': '.zip', 'image/jpeg': '.jpeg', 'image/png': '.png', 'text/html': '.html', + 'text/rtf': '.rtf', + + # sem extensao + 'application/octet-stream': '', # binário + 'inode/x-empty': '', # vazio } DOCS = { @@ -40,6 +45,10 @@ DOCS = { 'arquivo', 'materia/{}', 'documentoacessorio/{0}/{0}{1}'), + NormaJuridica: ( + 'texto_original', + 'norma_juridica/{}_texto_integral', + 'normajuridica/{0}/{0}_texto_integral{1}'), } DOCS = {tipo: (campo, @@ -86,7 +95,11 @@ def get_extensao(caminho): return EXTENSOES[mime] except KeyError as e: raise Exception('\n'.join([ - 'Extensão não conhecida. Algumas possibilidades são:', ] + + 'Extensão não conhecida para o arquivo:', + caminho, + 'E mimetype:', + mime, + ' Algumas possibilidades são:', ] + [" '{}': '{}',".format(mime, ext) for ext in mimetypes.guess_all_extensions(mime)] + ['Atualize o código do dicionário EXTENSOES!'] @@ -121,3 +134,4 @@ def migrar_documentos(): migrar_docs_por_ids(Parlamentar) migrar_docs_por_ids(MateriaLegislativa) migrar_docs_por_ids(DocumentoAcessorio) + migrar_docs_por_ids(NormaJuridica) From 8572fa44694b6a449d055d10526a193553d0cd08 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Fri, 24 Mar 2017 11:12:58 -0300 Subject: [PATCH 11/17] =?UTF-8?q?Migra=20ata=20de=20sess=C3=A3o=20plen?= =?UTF-8?q?=C3=A1ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 148f2a03d..b1360c6cc 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -8,6 +8,7 @@ from sapl.base.models import CasaLegislativa from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar +from sapl.sessao.models import SessaoPlenaria from sapl.settings import MEDIA_ROOT # MIGRAÇÃO DE DOCUMENTOS ################################################### @@ -49,6 +50,10 @@ DOCS = { 'texto_original', 'norma_juridica/{}_texto_integral', 'normajuridica/{0}/{0}_texto_integral{1}'), + SessaoPlenaria: ( + 'upload_ata', + 'ata_sessao/{}_ata_sessao', + 'sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'), } DOCS = {tipo: (campo, @@ -135,3 +140,4 @@ def migrar_documentos(): migrar_docs_por_ids(MateriaLegislativa) migrar_docs_por_ids(DocumentoAcessorio) migrar_docs_por_ids(NormaJuridica) + migrar_docs_por_ids(SessaoPlenaria) From 56e6bf0c09084602a5e03c531ab1c9e3f4c019c2 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 28 Mar 2017 14:43:06 -0300 Subject: [PATCH 12/17] =?UTF-8?q?Ignora=20objeto=20n=C3=A3o=20existente=20?= =?UTF-8?q?para=20documento?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index b1360c6cc..b2c008fa1 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -125,9 +125,15 @@ def migrar_docs_por_ids(tipo): destino = base_destino.format(id, extensao) mover_documento(origem, destino) - obj = tipo.objects.get(pk=id) - setattr(obj, campo, destino) - obj.save() + # associa documento ao objeto + try: + obj = tipo.objects.get(pk=id) + setattr(obj, campo, destino) + obj.save() + except tipo.DoesNotExist: + msg = 'Objeto do tipo {} não encontrado para documento em [{}]' + print(msg.format( + tipo.__name__, destino)) def migrar_documentos(): From e588862a0255cd231c851e5446fe679277d5b0d3 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 28 Mar 2017 14:57:09 -0300 Subject: [PATCH 13/17] =?UTF-8?q?Migra=20texto=20original=20de=20Proposi?= =?UTF-8?q?=C3=A7=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index b2c008fa1..e259a55cd 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -5,7 +5,8 @@ import re import magic from sapl.base.models import CasaLegislativa -from sapl.materia.models import DocumentoAcessorio, MateriaLegislativa +from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, + Proposicao) from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar from sapl.sessao.models import SessaoPlenaria @@ -54,6 +55,10 @@ DOCS = { 'upload_ata', 'ata_sessao/{}_ata_sessao', 'sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'), + Proposicao: ( + 'texto_original', + 'proposicao/{}', + 'proposicao/{0}/{0}{1}'), } DOCS = {tipo: (campo, @@ -147,3 +152,4 @@ def migrar_documentos(): migrar_docs_por_ids(DocumentoAcessorio) migrar_docs_por_ids(NormaJuridica) migrar_docs_por_ids(SessaoPlenaria) + migrar_docs_por_ids(Proposicao) From eced69037f4706d77e5d27decb3256fb8c5ad516 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 28 Mar 2017 15:13:46 -0300 Subject: [PATCH 14/17] Migra texto integral de Documento Administrativo --- sapl/legacy/migracao_documentos.py | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index e259a55cd..58833e6a4 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -9,6 +9,7 @@ from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, Proposicao) from sapl.norma.models import NormaJuridica from sapl.parlamentares.models import Parlamentar +from sapl.protocoloadm.models import DocumentoAdministrativo from sapl.sessao.models import SessaoPlenaria from sapl.settings import MEDIA_ROOT @@ -24,6 +25,7 @@ EXTENSOES = { 'image/png': '.png', 'text/html': '.html', 'text/rtf': '.rtf', + 'text/x-python': '.py', # sem extensao 'application/octet-stream': '', # binário @@ -59,6 +61,10 @@ DOCS = { 'texto_original', 'proposicao/{}', 'proposicao/{0}/{0}{1}'), + DocumentoAdministrativo: ( + 'texto_integral', + 'administrativo/{}_texto_integral', + 'documentoadministrativo/{0}/{0}_texto_integral{1}'), } DOCS = {tipo: (campo, @@ -136,9 +142,9 @@ def migrar_docs_por_ids(tipo): setattr(obj, campo, destino) obj.save() except tipo.DoesNotExist: - msg = 'Objeto do tipo {} não encontrado para documento em [{}]' + msg = '{} (pk={}) não encontrado para documento em [{}]' print(msg.format( - tipo.__name__, destino)) + tipo.__name__, id, destino)) def migrar_documentos(): @@ -147,9 +153,13 @@ def migrar_documentos(): # Os arquivos da pasta serão movidos para a nova estrutura e a pasta será # apagada migrar_docs_logo() - migrar_docs_por_ids(Parlamentar) - migrar_docs_por_ids(MateriaLegislativa) - migrar_docs_por_ids(DocumentoAcessorio) - migrar_docs_por_ids(NormaJuridica) - migrar_docs_por_ids(SessaoPlenaria) - migrar_docs_por_ids(Proposicao) + for tipo in [ + Parlamentar, + MateriaLegislativa, + DocumentoAcessorio, + NormaJuridica, + SessaoPlenaria, + Proposicao, + DocumentoAdministrativo, + ]: + migrar_docs_por_ids(tipo) From 682a3cbb96a6b3ac0c93d40851ac646ce7a1a818 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 28 Mar 2017 15:37:33 -0300 Subject: [PATCH 15/17] =?UTF-8?q?Melhora=20feedback=20da=20migra=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20documentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 58833e6a4..63091171a 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -94,10 +94,11 @@ def get_casa_legislativa(): def migrar_docs_logo(): + print('Migrando logotipo da casa') _, origem, destino = DOCS[CasaLegislativa] props_sapl = os.path.dirname(origem) # a pasta props_sapl deve conter apenas o origem e metadatas! - assert set(os.listdir(em_media(props_sapl))) == { + assert set(os.listdir(em_media(props_sapl))) < { 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata'} mover_documento(origem, destino) casa = get_casa_legislativa() @@ -124,6 +125,7 @@ def get_extensao(caminho): def migrar_docs_por_ids(tipo): campo, base_origem, base_destino = DOCS[tipo] + print('Migrando {} de {}'.format(campo, tipo.__name__)) dir_origem, nome_origem = os.path.split(em_media(base_origem)) pat = re.compile('^{}$'.format(nome_origem.format('(\d+)'))) @@ -163,3 +165,12 @@ def migrar_documentos(): DocumentoAdministrativo, ]: migrar_docs_por_ids(tipo) + + sobrando = [os.path.join(dir, file) + for (dir, _, files) in os.walk(em_media('sapl_documentos')) + for file in files] + if sobrando: + print('{} documentos sobraram sem ser migrados!!!'.format( + len(sobrando))) + for doc in sobrando: + print(' {}'. format(doc)) From 6fa7f206e6f21b1d14a0bb4ba090c1dbbeb492df Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 28 Mar 2017 16:43:47 -0300 Subject: [PATCH 16/17] =?UTF-8?q?Migra=20anexo=20de=20sess=C3=A3o=20plen?= =?UTF-8?q?=C3=A1ria?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sapl/legacy/migracao_documentos.py | 110 ++++++++++++++++------------- 1 file changed, 61 insertions(+), 49 deletions(-) diff --git a/sapl/legacy/migracao_documentos.py b/sapl/legacy/migracao_documentos.py index 63091171a..4d9877fa7 100644 --- a/sapl/legacy/migracao_documentos.py +++ b/sapl/legacy/migracao_documentos.py @@ -33,44 +33,49 @@ EXTENSOES = { } DOCS = { - CasaLegislativa: ( + CasaLegislativa: [( 'logotipo', 'props_sapl/logo_casa.gif', - 'casa/logotipo/logo_casa.gif'), - Parlamentar: ( + 'casa/logotipo/logo_casa.gif')], + Parlamentar: [( 'fotografia', 'parlamentar/fotos/{}_foto_parlamentar', - 'parlamentar/{0}/{0}_foto_parlamentar{1}'), - MateriaLegislativa: ( + 'parlamentar/{0}/{0}_foto_parlamentar{1}')], + MateriaLegislativa: [( 'texto_original', 'materia/{}_texto_integral', - 'materialegislativa/{0}/{0}_texto_integral{1}'), - DocumentoAcessorio: ( + 'materialegislativa/{0}/{0}_texto_integral{1}')], + DocumentoAcessorio: [( 'arquivo', 'materia/{}', - 'documentoacessorio/{0}/{0}{1}'), - NormaJuridica: ( + 'documentoacessorio/{0}/{0}{1}')], + NormaJuridica: [( 'texto_original', 'norma_juridica/{}_texto_integral', - 'normajuridica/{0}/{0}_texto_integral{1}'), - SessaoPlenaria: ( - 'upload_ata', - 'ata_sessao/{}_ata_sessao', - 'sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'), - Proposicao: ( + 'normajuridica/{0}/{0}_texto_integral{1}')], + SessaoPlenaria: [ + ('upload_ata', + 'ata_sessao/{}_ata_sessao', + 'sessaoplenaria/{0}/ata/{0}_ata_sessao{1}'), + ('upload_anexo', + 'anexo_sessao/{}_texto_anexado', + 'sessaoplenaria/{0}/anexo/{0}_texto_anexado{1}') + ], + Proposicao: [( 'texto_original', 'proposicao/{}', - 'proposicao/{0}/{0}{1}'), - DocumentoAdministrativo: ( + 'proposicao/{0}/{0}{1}')], + DocumentoAdministrativo: [( 'texto_integral', 'administrativo/{}_texto_integral', - 'documentoadministrativo/{0}/{0}_texto_integral{1}'), + 'documentoadministrativo/{0}/{0}_texto_integral{1}')], } -DOCS = {tipo: (campo, - os.path.join('sapl_documentos', origem), - os.path.join('sapl', destino)) - for tipo, (campo, origem, destino) in DOCS.items()} +DOCS = {tipo: [(campo, + os.path.join('sapl_documentos', origem), + os.path.join('sapl', destino)) + for campo, origem, destino in campos] + for tipo, campos in DOCS.items()} def em_media(caminho): @@ -94,8 +99,8 @@ def get_casa_legislativa(): def migrar_docs_logo(): - print('Migrando logotipo da casa') - _, origem, destino = DOCS[CasaLegislativa] + print('#### Migrando logotipo da casa ####') + [(_, origem, destino)] = DOCS[CasaLegislativa] props_sapl = os.path.dirname(origem) # a pasta props_sapl deve conter apenas o origem e metadatas! assert set(os.listdir(em_media(props_sapl))) < { @@ -124,29 +129,35 @@ def get_extensao(caminho): def migrar_docs_por_ids(tipo): - campo, base_origem, base_destino = DOCS[tipo] - print('Migrando {} de {}'.format(campo, tipo.__name__)) - - dir_origem, nome_origem = os.path.split(em_media(base_origem)) - pat = re.compile('^{}$'.format(nome_origem.format('(\d+)'))) - for arq in os.listdir(dir_origem): - match = pat.match(arq) - if match: - origem = os.path.join(dir_origem, match.group(0)) - id = match.group(1) - extensao = get_extensao(origem) - destino = base_destino.format(id, extensao) - mover_documento(origem, destino) - - # associa documento ao objeto - try: - obj = tipo.objects.get(pk=id) - setattr(obj, campo, destino) - obj.save() - except tipo.DoesNotExist: - msg = '{} (pk={}) não encontrado para documento em [{}]' - print(msg.format( - tipo.__name__, id, destino)) + for campo, base_origem, base_destino in DOCS[tipo]: + print('#### Migrando {} de {} ####'.format(campo, tipo.__name__)) + + dir_origem, nome_origem = os.path.split(em_media(base_origem)) + pat = re.compile('^{}$'.format(nome_origem.format('(\d+)'))) + + if not os.path.isdir(dir_origem): + print(' >>> O diretório {} não existe! Abortado.'.format( + dir_origem)) + continue + + for arq in os.listdir(dir_origem): + match = pat.match(arq) + if match: + origem = os.path.join(dir_origem, match.group(0)) + id = match.group(1) + extensao = get_extensao(origem) + destino = base_destino.format(id, extensao) + mover_documento(origem, destino) + + # associa documento ao objeto + try: + obj = tipo.objects.get(pk=id) + setattr(obj, campo, destino) + obj.save() + except tipo.DoesNotExist: + msg = ' {} (pk={}) não encontrado para documento em [{}]' + print(msg.format( + tipo.__name__, id, destino)) def migrar_documentos(): @@ -170,7 +181,8 @@ def migrar_documentos(): for (dir, _, files) in os.walk(em_media('sapl_documentos')) for file in files] if sobrando: - print('{} documentos sobraram sem ser migrados!!!'.format( - len(sobrando))) + print('\n#### Encerrado ####\n\n' + '{} documentos sobraram sem ser migrados!!!'.format( + len(sobrando))) for doc in sobrando: print(' {}'. format(doc)) From 985a6eb3796ae92fdf8316b4e62d5be1983d0292 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Thu, 30 Mar 2017 15:55:24 -0300 Subject: [PATCH 17/17] =?UTF-8?q?Adiciona=20command=20para=20migra=C3=A7?= =?UTF-8?q?=C3=A3o=20de=20documentos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legacy/management/commands/migracao_documentos.py | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 sapl/legacy/management/commands/migracao_documentos.py diff --git a/sapl/legacy/management/commands/migracao_documentos.py b/sapl/legacy/management/commands/migracao_documentos.py new file mode 100644 index 000000000..c096e2905 --- /dev/null +++ b/sapl/legacy/management/commands/migracao_documentos.py @@ -0,0 +1,11 @@ +from django.core.management.base import BaseCommand + +from sapl.legacy.migracao_documentos import migrar_documentos + + +class Command(BaseCommand): + + help = u'Migração documentos do SAPL 2.5 para o SAPL 3.1' + + def handle(self, *args, **options): + migrar_documentos()