diff --git a/sapl/legacy/migracao_dados.py b/sapl/legacy/migracao_dados.py index e7d393e81..bd59454c0 100644 --- a/sapl/legacy/migracao_dados.py +++ b/sapl/legacy/migracao_dados.py @@ -1127,6 +1127,9 @@ def migrar_todos_os_models(apagar_do_legado): def migrar_model(model, apagar_do_legado): print("Migrando %s..." % model.__name__) + if model == TipoAutor: + checagem_tipo_autor() + model_legado, tabela_legado, campos_pk_legado = get_estrutura_legado(model) if len(campos_pk_legado) == 1: @@ -1264,6 +1267,38 @@ def migrar_model(model, apagar_do_legado): exec_legado(sql_delete_legado) +def checagem_tipo_autor(): + # Encontrei conflito de ids em TipoAutor entre + # um registro que existiu na base e foi apagado e um registro ressuscitado. + # Então testamos p garantir que não associamos um ressuscitado erroneamente + + from sapl.legacy.models import TipoAutor as TipoAutorLegado + + atual = {t.id: t.descricao for t in TipoAutor.objects.all()} + historia = { + t.field_dict["id"]: t.field_dict["descricao"] + for t in Version.objects.get_deleted(TipoAutor) + } + assert not set(atual) & set(historia) + legado = { + t.pk: t.des_tipo_autor + for t in TipoAutorLegado.objects.filter(ind_excluido=False) + } + atual_e_historia = {**atual, **historia} + so_no_legado = set(legado.items()) - set(atual_e_historia.items()) + # o que está so no legado agora + # nao tem conflito com a base atual e sua historia + conflito = [ + (id, desc, atual_e_historia[id], "atual" if id in atual else "apagado") + for id, desc in so_no_legado + if id in atual_e_historia + ] + assert not conflito, f""" + Existem tipos do legado em conflito com algum registro atual ou apagado: + {conflito} + """ + + # MIGRATION_ADJUSTMENTS #####################################################