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() 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(): def gerar_pacote():
banco = settings.DATABASES['legacy']['NAME'] banco = settings.DATABASES['legacy']['NAME']

134
sapl/legacy/migracao_documentos.py

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

Loading…
Cancel
Save