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 import re
from datetime import date from datetime import date
from glob import glob
from subprocess import PIPE, call from subprocess import PIPE, call
import pkg_resources import pkg_resources
@ -18,7 +16,6 @@ from django.db.models.base import ModelBase
from model_mommy import mommy from model_mommy import mommy
from model_mommy.mommy import foreign_key_required, make from model_mommy.mommy import foreign_key_required, make
from sapl.base import CasaLegislativa
from sapl.base.models import Autor, ProblemaMigracao from sapl.base.models import Autor, ProblemaMigracao
from sapl.comissoes.models import Comissao, Composicao, Participacao from sapl.comissoes.models import Comissao, Composicao, Participacao
from sapl.legacy.models import Protocolo as ProtocoloLegado 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.parlamentares.models import Parlamentar
from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo from sapl.protocoloadm.models import Protocolo, StatusTramitacaoAdministrativo
from sapl.sessao.models import ExpedienteMateria, OrdemDia, SessaoPlenaria 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 from sapl.utils import normalize
# BASE ###################################################################### # BASE ######################################################################
@ -735,70 +732,3 @@ def make_with_log(model, _quantity=None, make_m2m=False, **attrs):
return stub return stub
make_with_log.required = foreign_key_required 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