From 26cefd3ba12d1727d1930526475cc84b4df86fe8 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Sat, 18 Mar 2017 10:35:41 -0300 Subject: [PATCH] =?UTF-8?q?Move=20migracao=20de=20documentos=20para=20m?= =?UTF-8?q?=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)