Browse Source

Corrige caminhos de arquivos na migração de docs

pull/1914/head
Marcio Mazza 7 years ago
parent
commit
1cf2f35def
  1. 6
      sapl/legacy/migracao.py
  2. 134
      sapl/legacy/migracao_documentos.py

6
sapl/legacy/migracao.py

@ -14,12 +14,6 @@ def migrar(interativo=False):
migrar_documentos()
# fonte: https://stackoverflow.com/a/17081026/1877490
def make_tarfile(output_filename, source_dir):
with tarfile.open(output_filename, "w:gz") as tar:
tar.add(source_dir, arcname=os.path.basename(source_dir))
def gerar_pacote():
banco = settings.DATABASES['legacy']['NAME']

134
sapl/legacy/migracao_documentos.py

@ -1,12 +1,12 @@
import mimetypes
import os
import re
from glob import glob
import yaml
from django.db import transaction
from sapl.base.models import CasaLegislativa
from sapl.legacy.migracao_dados import exec_legado, warn
from sapl.legacy.migracao_dados import exec_legado
from sapl.materia.models import (DocumentoAcessorio, MateriaLegislativa,
Proposicao)
from sapl.norma.models import NormaJuridica
@ -16,88 +16,26 @@ from sapl.protocoloadm.models import (DocumentoAcessorioAdministrativo,
from sapl.sessao.models import SessaoPlenaria
from sapl.settings import MEDIA_ROOT
# MIGRAÇÃO DE DOCUMENTOS ###################################################
def get_ano(obj):
return [obj.ano]
def ___(obj):
return []
DOCS = {
CasaLegislativa: [
('logotipo',
'props_sapl/{}.*',
'public/casa/logotipo/',
___)
],
Parlamentar: [
('fotografia',
'parlamentar/fotos/{}_foto_parlamentar',
'public/parlamentar/{0}/',
___)
],
MateriaLegislativa: [
('texto_original',
'materia/{}_texto_integral',
'public/materialegislativa/{1}/{0}/',
get_ano)
],
DocumentoAcessorio: [
('arquivo',
'materia/{}',
'public/documentoacessorio/{1}/{0}/',
lambda obj: [obj.materia.ano])
],
NormaJuridica: [
('texto_integral',
'norma_juridica/{}_texto_integral',
'public/normajuridica/{1}/{0}/',
get_ano)
],
SessaoPlenaria: [
('upload_pauta',
'pauta_sessao/{}_pauta_sessao',
'public/sessaoplenaria/{0}/pauta/',
___),
('upload_ata',
'ata_sessao/{}_ata_sessao',
'public/sessaoplenaria/{0}/ata/',
___),
('upload_anexo',
'anexo_sessao/{}_texto_anexado',
'public/sessaoplenaria/{0}/anexo/',
___)
],
Proposicao: [
('texto_original',
'proposicao/{}',
'private/proposicao/{0}/',
get_ano)
],
DocumentoAdministrativo: [
('texto_integral',
'administrativo/{}_texto_integral',
'private/documentoadministrativo/{0}/',
get_ano)
],
DocumentoAcessorioAdministrativo: [
('arquivo',
'administrativo/{}',
'private/documentoacessorioadministrativo/{0}/',
___)
],
CasaLegislativa: [('logotipo', 'props_sapl/{}.*')],
Parlamentar: [('fotografia', 'parlamentar/fotos/{}_foto_parlamentar')],
MateriaLegislativa: [('texto_original', 'materia/{}_texto_integral')],
DocumentoAcessorio: [('arquivo', 'materia/{}')],
NormaJuridica: [('texto_integral', 'norma_juridica/{}_texto_integral')],
SessaoPlenaria: [('upload_pauta', 'pauta_sessao/{}_pauta_sessao'),
('upload_ata', 'ata_sessao/{}_ata_sessao'),
('upload_anexo', 'anexo_sessao/{}_texto_anexado')],
Proposicao: [('texto_original', 'proposicao/{}')],
DocumentoAdministrativo: [('texto_integral',
'administrativo/{}_texto_integral')],
DocumentoAcessorioAdministrativo: [('arquivo', 'administrativo/{}')],
}
DOCS = {model: [(campo,
os.path.join('sapl_documentos', origem),
os.path.join('sapl', destino),
get_extra_args)
for campo, origem, destino, get_extra_args in campos]
DOCS = {model: [(campo, os.path.join('sapl_documentos', origem))
for campo, origem, in campos]
for model, campos in DOCS.items()}
@ -141,11 +79,13 @@ def migrar_propriedades_da_casa():
[(casa.municipio, casa.uf)] = exec_legado(sql_localidade)
print('.... Migrando logotipo da casa ....')
[(_, origem, destino, __)] = DOCS[CasaLegislativa]
[(campo, origem)] = DOCS[CasaLegislativa]
# a extensão do logo pode ter sido ajustada pelo tipo real do arquivo
id_logo = os.path.splitext(propriedades['id_logo'])[0]
[origem] = glob(em_media(origem.format(id_logo)))
destino = os.path.join(destino, os.path.basename(origem))
destino = os.path.join(
CasaLegislativa._meta.get_field(campo).upload_to,
os.path.basename(origem))
mover_documento(origem, destino)
casa.logotipo = destino
casa.save()
@ -153,36 +93,36 @@ def migrar_propriedades_da_casa():
def migrar_docs_por_ids(model):
for campo, base_origem, base_destino, get_extra_args in DOCS[model]:
for campo, base_origem in DOCS[model]:
print('#### Migrando {} de {} ####'.format(campo, model.__name__))
dir_origem, nome_origem = os.path.split(em_media(base_origem))
nome_origem = nome_origem.format('(\d+)')
pat = re.compile('^{}\.\w+$'.format(nome_origem))
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:
matches = [pat.match(arq) for arq in os.listdir(dir_origem)]
ids_origens = [(int(m.group(1)),
os.path.join(dir_origem, m.group(0)))
for m in matches if m]
objetos = {obj.id: obj for obj in model.objects.all()}
upload_to = model._meta.get_field(campo).upload_to
with transaction.atomic():
for id, origem in ids_origens:
# associa documento ao objeto
origem = os.path.join(dir_origem, match.group(0))
id = match.group(1)
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:
destino = os.path.join(
base_destino.format(id, *get_extra_args(obj)),
os.path.basename(origem))
obj = objetos.get(id)
if obj:
destino = upload_to(obj, os.path.basename(origem))
mover_documento(origem, destino)
setattr(obj, campo, destino)
obj.save()
else:
msg = ' {} (pk={}) não encontrado para documento em [{}]'
print(msg.format(model.__name__, id, origem))
def migrar_documentos():
@ -215,5 +155,3 @@ def migrar_documentos():
print('\n#### Encerrado ####\n\n'
'{} documentos sobraram sem ser migrados!!!'.format(
len(sobrando)))
for doc in sobrando:
print(' {}'. format(doc))

Loading…
Cancel
Save