Browse Source

Move migracao de documentos para módulo à parte

pull/978/head
Marcio Mazza 8 years ago
parent
commit
26cefd3ba1
  1. 74
      sapl/legacy/migracao_documentos.py
  2. 72
      sapl/legacy/migration.py

74
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)

72
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)

Loading…
Cancel
Save