Browse Source

Corrige reportar ignorados na migração de docs

Fix #1280
pull/1493/head
Marcio Mazza 7 years ago
parent
commit
e6804c5c14
  1. 42
      sapl/legacy/migracao_documentos.py

42
sapl/legacy/migracao_documentos.py

@ -5,6 +5,7 @@ import re
import magic import magic
from sapl.base.models import CasaLegislativa from sapl.base.models import CasaLegislativa
from sapl.legacy.migration import warn
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa, from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
Proposicao) Proposicao)
from sapl.norma.models import NormaJuridica from sapl.norma.models import NormaJuridica
@ -21,6 +22,7 @@ EXTENSOES = {
'application/vnd.oasis.opendocument.text': '.odt', 'application/vnd.oasis.opendocument.text': '.odt',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '.docx', # noqa 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': '.docx', # noqa
'application/xml': '.xml', 'application/xml': '.xml',
'text/xml': '.xml',
'application/zip': '.zip', 'application/zip': '.zip',
'image/jpeg': '.jpeg', 'image/jpeg': '.jpeg',
'image/png': '.png', 'image/png': '.png',
@ -90,11 +92,11 @@ DOCS = {
], ],
} }
DOCS = {tipo: [(campo, DOCS = {model: [(campo,
os.path.join('sapl_documentos', origem), os.path.join('sapl_documentos', origem),
os.path.join('sapl', destino)) os.path.join('sapl', destino))
for campo, origem, destino in campos] for campo, origem, destino in campos]
for tipo, campos in DOCS.items()} for model, campos in DOCS.items()}
def em_media(caminho): def em_media(caminho):
@ -125,10 +127,14 @@ def migrar_docs_logo():
# a pasta props_sapl deve conter apenas o origem e metadatas! # a pasta props_sapl deve conter apenas o origem e metadatas!
# Edit: Aparentemente há diretório que contém properties ao invés de # Edit: Aparentemente há diretório que contém properties ao invés de
# metadata. O assert foi modificado para essa situação. # metadata. O assert foi modificado para essa situação.
assert set(os.listdir(em_media(props_sapl))) < { sobrando = set(os.listdir(em_media(props_sapl))) - {
'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata', 'logo_casa.gif', '.metadata', 'logo_casa.gif.metadata',
'.properties', 'logo_casa.gif.properties', '.objects'} '.properties', 'logo_casa.gif.properties', '.objects'}
if sobrando:
warn('Os seguintes arquivos da pasta props_sapl foram ignorados: ' +
', '.join(sobrando))
mover_documento(origem, destino) mover_documento(origem, destino)
casa = get_casa_legislativa() casa = get_casa_legislativa()
casa.logotipo = destino casa.logotipo = destino
@ -152,9 +158,9 @@ def get_extensao(caminho):
)) from e )) from e
def migrar_docs_por_ids(tipo): def migrar_docs_por_ids(model):
for campo, base_origem, base_destino in DOCS[tipo]: for campo, base_origem, base_destino in DOCS[model]:
print('#### Migrando {} de {} ####'.format(campo, tipo.__name__)) print('#### Migrando {} de {} ####'.format(campo, model.__name__))
dir_origem, nome_origem = os.path.split(em_media(base_origem)) dir_origem, nome_origem = os.path.split(em_media(base_origem))
pat = re.compile('^{}$'.format(nome_origem.format('(\d+)'))) pat = re.compile('^{}$'.format(nome_origem.format('(\d+)')))
@ -168,11 +174,15 @@ def migrar_docs_por_ids(tipo):
match = pat.match(arq) match = pat.match(arq)
if match: if match:
# associa documento ao objeto # associa documento ao objeto
try:
origem = os.path.join(dir_origem, match.group(0)) origem = os.path.join(dir_origem, match.group(0))
id = match.group(1) id = match.group(1)
obj = tipo.objects.get(pk=id) try:
obj = model.objects.get(pk=id)
except model.DoesNotExist:
msg = ' {} (pk={}) não encontrado para documento em [{}]'
print(msg.format(
model.__name__, id, origem))
else:
extensao = get_extensao(origem) extensao = get_extensao(origem)
if hasattr(obj, "ano"): if hasattr(obj, "ano"):
destino = base_destino.format(id, extensao, obj.ano) destino = base_destino.format(id, extensao, obj.ano)
@ -185,19 +195,19 @@ def migrar_docs_por_ids(tipo):
setattr(obj, campo, destino) setattr(obj, campo, destino)
obj.save() obj.save()
except tipo.DoesNotExist:
msg = ' {} (pk={}) não encontrado para documento em [{}]'
print(msg.format(
tipo.__name__, id, destino))
def migrar_documentos(): def migrar_documentos():
# aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT # aqui supomos que uma pasta chamada sapl_documentos está em MEDIA_ROOT
# com o conteúdo da pasta de mesmo nome do zope # 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á # Os arquivos da pasta serão MOVIDOS para a nova estrutura e a pasta será
# apagada # apagada
#
# Isto significa que para rodar novamente esta função é preciso
# restaurar a pasta sapl_documentos ao estado inicial
migrar_docs_logo() migrar_docs_logo()
for tipo in [ for model in [
Parlamentar, Parlamentar,
MateriaLegislativa, MateriaLegislativa,
DocumentoAcessorio, DocumentoAcessorio,
@ -207,7 +217,7 @@ def migrar_documentos():
DocumentoAdministrativo, DocumentoAdministrativo,
DocumentoAcessorioAdministrativo, DocumentoAcessorioAdministrativo,
]: ]:
migrar_docs_por_ids(tipo) migrar_docs_por_ids(model)
sobrando = [os.path.join(dir, file) sobrando = [os.path.join(dir, file)
for (dir, _, files) in os.walk(em_media('sapl_documentos')) for (dir, _, files) in os.walk(em_media('sapl_documentos'))

Loading…
Cancel
Save