From 2fb499fedf6e47e7af21b913f2861ccc6858f5f7 Mon Sep 17 00:00:00 2001 From: Marcio Mazza Date: Tue, 27 Feb 2018 07:16:35 -0300 Subject: [PATCH] Migra documento adm mesmo sem protocolo --- sapl/legacy/migracao_usuarios.py | 1 + sapl/legacy/migration.py | 36 +++++++++++++++++++------------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/sapl/legacy/migracao_usuarios.py b/sapl/legacy/migracao_usuarios.py index bd7d413e5..591f08b20 100644 --- a/sapl/legacy/migracao_usuarios.py +++ b/sapl/legacy/migracao_usuarios.py @@ -92,3 +92,4 @@ def migra_usuarios(): usuario.groups.add(PERFIL_LEGADO_PARA_NOVO[perfil]) # apaga arquivo (importante pois contém senhas) ARQUIVO_USUARIOS.remove() + print('Usuários migrados com sucesso.') diff --git a/sapl/legacy/migration.py b/sapl/legacy/migration.py index 1ab22da4c..b67501ab9 100644 --- a/sapl/legacy/migration.py +++ b/sapl/legacy/migration.py @@ -121,7 +121,9 @@ def warn(msg): class ForeignKeyFaltando(ObjectDoesNotExist): 'Uma FK aponta para um registro inexistente' - pass + + def __init__(self, msg=''): + self.msg = msg @lru_cache() @@ -697,10 +699,11 @@ class DataMigrator: self.populate_renamed_fields(new, old) if ajuste_antes_salvar: ajuste_antes_salvar(new, old) - except ForeignKeyFaltando: + except ForeignKeyFaltando as e: # tentamos preencher uma FK e o ojeto relacionado # não existe # então este é um objeo órfão: simplesmente ignoramos + warn(e.msg) continue else: if get_id_do_legado: @@ -749,19 +752,21 @@ def adjust_documentoadministrativo(new, old): protocolo = Protocolo.objects.filter( numero=old.num_protocolo, ano=new.ano) if not protocolo: + # tentamos encontrar o protocolo no ano seguinte protocolo = Protocolo.objects.filter( numero=old.num_protocolo, ano=new.ano + 1) - print('PROTOCOLO ENCONTRADO APENAS PARA O ANO SEGUINTE!!!!! ' - 'DocumentoAdministrativo: {}, numero_protocolo: {}, ' - 'ano doc adm: {}'.format( - old.cod_documento, old.num_protocolo, new.ano)) - if not protocolo: - raise ForeignKeyFaltando( - 'Protocolo {} faltando ' - '(referenciado no documento administrativo {}'.format( - old.num_protocolo, old.cod_documento)) - assert len(protocolo) == 1 - new.protocolo = protocolo[0] + if protocolo: + print('PROTOCOLO ENCONTRADO APENAS PARA O ANO SEGUINTE!!!!! ' + 'DocumentoAdministrativo: {}, numero_protocolo: {}, ' + 'ano doc adm: {}'.format( + old.cod_documento, old.num_protocolo, new.ano)) + else: + warn('Protocolo {} faltando ' + '(referenciado no documento administrativo {}'.format( + old.num_protocolo, old.cod_documento)) + if protocolo: + assert len(protocolo) == 1, 'mais de um protocolo encontrado' + [new.protocolo] = protocolo def adjust_mandato(new, old): @@ -954,8 +959,9 @@ def vincula_autor(new, old, model_relacionado, campo_relacionado, campo_nome): new.autor_related = model_relacionado.objects.get(pk=pk_rel) except ObjectDoesNotExist: # ignoramos o autor órfão - raise ForeignKeyFaltando('{} inexiste para autor'.format( - model_relacionado._meta.verbose_name)) + raise ForeignKeyFaltando( + '{} [pk={}] inexistente para autor'.format( + model_relacionado._meta.verbose_name, pk_rel)) else: new.nome = getattr(new.autor_related, campo_nome) return True