Browse Source

Considera apagados pelo usuário como já migrados

migracao
Marcio Mazza 6 years ago
parent
commit
894f8f91d2
  1. 47
      sapl/legacy/migracao_dados.py

47
sapl/legacy/migracao_dados.py

@ -25,6 +25,7 @@ from django.core.management.commands.flush import Command as FlushCommand
from django.db import connections, transaction from django.db import connections, transaction
from django.db.models import Max, Q from django.db.models import Max, Q
from pyaml import UnsafePrettyYAMLDumper from pyaml import UnsafePrettyYAMLDumper
from reversion.models import Version
from unipath import Path from unipath import Path
from sapl.base.models import AppConfig as AppConf from sapl.base.models import AppConfig as AppConf
@ -908,6 +909,9 @@ def do_flush():
def migrar_dados(flush=False, apagar_do_legado=False): def migrar_dados(flush=False, apagar_do_legado=False):
try: try:
# limpa tudo antes de migrar
_cached_get_all_ids_from_model.cache_clear()
get_pk_legado.cache_clear()
ocorrencias.clear() ocorrencias.clear()
ocorrencias.default_factory = list ocorrencias.default_factory = list
@ -1015,9 +1019,13 @@ def migrar_model(model, apagar_do_legado):
ids_ja_migrados = get_all_ids_from_model(model) ids_ja_migrados = get_all_ids_from_model(model)
apagados_pelo_usuario = [
int(v.object_id)
for v in Version.objects.get_deleted(model)]
def ja_esta_migrado(old): def ja_esta_migrado(old):
id = get_id_do_legado(old) id = get_id_do_legado(old)
return id in ids_ja_migrados return id in ids_ja_migrados or id in apagados_pelo_usuario
ultima_pk_legado = model_legado.objects.all().aggregate( ultima_pk_legado = model_legado.objects.all().aggregate(
Max('pk'))['pk__max'] or 0 Max('pk'))['pk__max'] or 0
@ -1029,20 +1037,33 @@ def migrar_model(model, apagar_do_legado):
get_id_do_legado = None get_id_do_legado = None
renames = field_renames[model] renames = field_renames[model]
campos_velhos_p_novos = {v: k for k, v in renames.items()} campos_velhos_p_novos = {v: k
for k, v in renames.items()}
if model_legado == Numeracao:
# nao usamos cod_numeracao no 3.1 => apelamos p todos os campos
campos_chave = ['cod_materia', 'tip_materia', 'num_materia',
'ano_materia', 'dat_materia']
else:
campos_chave = campos_pk_legado
def sem_sufixo_id(k):
return k[:-3] if k.endswith('_id') else k
apagados_pelo_usuario = Version.objects.get_deleted(model)
apagados_pelo_usuario = [
{sem_sufixo_id(k): v for k, v in version.field_dict.items()}
for version in apagados_pelo_usuario]
campos_chave_novos = {campos_velhos_p_novos[c] for c in campos_chave}
apagados_pelo_usuario = [
{k: v for k, v in apagado.items() if k in campos_chave_novos}
for apagado in apagados_pelo_usuario]
def ja_esta_migrado(old): def ja_esta_migrado(old):
if model_legado == Numeracao:
# nao usamos cod_numeracao no 3.1 => apelamos p todos os campos
campos_chave = [
'cod_materia', 'tip_materia', 'num_materia',
'ano_materia', 'dat_materia']
else:
campos_chave = campos_pk_legado
chave = {campos_velhos_p_novos[c]: getattr(old, c) chave = {campos_velhos_p_novos[c]: getattr(old, c)
for c in campos_chave} for c in campos_chave}
return model.objects.filter(**chave).exists() return (chave in apagados_pelo_usuario
or model.objects.filter(**chave).exists())
ultima_pk_legado = model_legado.objects.count() ultima_pk_legado = model_legado.objects.count()
ajuste_antes_salvar = AJUSTE_ANTES_SALVAR.get(model) ajuste_antes_salvar = AJUSTE_ANTES_SALVAR.get(model)
@ -1478,11 +1499,13 @@ yaml.add_constructor(u'!time', time_constructor)
TAG_MARCO = 'marco' TAG_MARCO = 'marco'
def gravar_marco(nome_dir='marco'): def gravar_marco(nome_dir='dados', pula_se_ja_existe=False):
"""Grava um dump de todos os dados como arquivos yaml no repo de marco """Grava um dump de todos os dados como arquivos yaml no repo de marco
""" """
# prepara ou localiza repositorio # prepara ou localiza repositorio
dir_dados = Path(REPO.working_dir, nome_dir) dir_dados = Path(REPO.working_dir, nome_dir)
if pula_se_ja_existe and dir_dados.exists():
return
# limpa todo o conteúdo antes # limpa todo o conteúdo antes
dir_dados.rmtree() dir_dados.rmtree()
dir_dados.mkdir() dir_dados.mkdir()

Loading…
Cancel
Save