|
@ -8,7 +8,6 @@ from datetime import date |
|
|
from functools import lru_cache, partial |
|
|
from functools import lru_cache, partial |
|
|
from itertools import groupby |
|
|
from itertools import groupby |
|
|
from operator import xor |
|
|
from operator import xor |
|
|
from subprocess import PIPE, call |
|
|
|
|
|
|
|
|
|
|
|
import git |
|
|
import git |
|
|
import pkg_resources |
|
|
import pkg_resources |
|
@ -31,12 +30,10 @@ from unipath import Path |
|
|
from sapl.base.models import AppConfig as AppConf |
|
|
from sapl.base.models import AppConfig as AppConf |
|
|
from sapl.base.models import Autor, TipoAutor, cria_models_tipo_autor |
|
|
from sapl.base.models import Autor, TipoAutor, cria_models_tipo_autor |
|
|
from sapl.comissoes.models import Comissao, Composicao, Participacao, Reuniao |
|
|
from sapl.comissoes.models import Comissao, Composicao, Participacao, Reuniao |
|
|
from sapl.legacy import scripts |
|
|
|
|
|
from sapl.legacy.models import NormaJuridica as OldNormaJuridica |
|
|
from sapl.legacy.models import NormaJuridica as OldNormaJuridica |
|
|
from sapl.legacy.models import TipoNumeracaoProtocolo |
|
|
from sapl.legacy.models import TipoNumeracaoProtocolo |
|
|
from sapl.legacy_migration_settings import (DATABASES, DIR_DADOS_MIGRACAO, |
|
|
from sapl.legacy_migration_settings import (DIR_DADOS_MIGRACAO, DIR_REPO, |
|
|
DIR_REPO, NOME_BANCO_LEGADO, |
|
|
NOME_BANCO_LEGADO) |
|
|
PROJECT_DIR) |
|
|
|
|
|
from sapl.materia.models import (AcompanhamentoMateria, MateriaLegislativa, |
|
|
from sapl.materia.models import (AcompanhamentoMateria, MateriaLegislativa, |
|
|
Proposicao, StatusTramitacao, TipoDocumento, |
|
|
Proposicao, StatusTramitacao, TipoDocumento, |
|
|
TipoMateriaLegislativa, TipoProposicao, |
|
|
TipoMateriaLegislativa, TipoProposicao, |
|
@ -141,10 +138,6 @@ models_novos_para_antigos = { |
|
|
for model in field_renames} |
|
|
for model in field_renames} |
|
|
models_novos_para_antigos[Composicao] = models_novos_para_antigos[Participacao] |
|
|
models_novos_para_antigos[Composicao] = models_novos_para_antigos[Participacao] |
|
|
|
|
|
|
|
|
content_types = {model: ContentType.objects.get( |
|
|
|
|
|
app_label=model._meta.app_label, model=model._meta.model_name) |
|
|
|
|
|
for model in field_renames} |
|
|
|
|
|
|
|
|
|
|
|
campos_novos_para_antigos = { |
|
|
campos_novos_para_antigos = { |
|
|
model._meta.get_field(nome_novo): nome_antigo |
|
|
model._meta.get_field(nome_novo): nome_antigo |
|
|
for model, renames in field_renames.items() |
|
|
for model, renames in field_renames.items() |
|
@ -226,10 +219,6 @@ class ForeignKeyFaltando(ObjectDoesNotExist): |
|
|
'Uma FK aponta para um registro inexistente' |
|
|
'Uma FK aponta para um registro inexistente' |
|
|
|
|
|
|
|
|
def __init__(self, field, valor, old): |
|
|
def __init__(self, field, valor, old): |
|
|
if (field.related_model.__name__ == 'Comissao' |
|
|
|
|
|
and old.__class__.__name__ == 'ReuniaoComissao' |
|
|
|
|
|
and valor == 1): |
|
|
|
|
|
__import__('pdb').set_trace() |
|
|
|
|
|
self.field = field |
|
|
self.field = field |
|
|
self.valor = valor |
|
|
self.valor = valor |
|
|
self.old = old |
|
|
self.old = old |
|
@ -546,7 +535,6 @@ PROPAGACOES_DE_EXCLUSAO = [ |
|
|
('sessao_plenaria', 'ordem_dia', 'cod_sessao_plen'), |
|
|
('sessao_plenaria', 'ordem_dia', 'cod_sessao_plen'), |
|
|
('sessao_plenaria', 'expediente_materia', 'cod_sessao_plen'), |
|
|
('sessao_plenaria', 'expediente_materia', 'cod_sessao_plen'), |
|
|
('sessao_plenaria', 'expediente_sessao_plenaria', 'cod_sessao_plen'), |
|
|
('sessao_plenaria', 'expediente_sessao_plenaria', 'cod_sessao_plen'), |
|
|
('registro_votacao', 'registro_votacao_parlamentar', 'cod_votacao'), |
|
|
|
|
|
# as consultas no código do sapl 2.5 |
|
|
# as consultas no código do sapl 2.5 |
|
|
# votacao_ordem_dia_obter_zsql e votacao_expediente_materia_obter_zsql |
|
|
# votacao_ordem_dia_obter_zsql e votacao_expediente_materia_obter_zsql |
|
|
# indicam que os registros de votação de matérias excluídas não são |
|
|
# indicam que os registros de votação de matérias excluídas não são |
|
@ -562,30 +550,38 @@ PROPAGACOES_DE_EXCLUSAO = [ |
|
|
('materia_legislativa', 'anexada', 'cod_materia_anexada'), |
|
|
('materia_legislativa', 'anexada', 'cod_materia_anexada'), |
|
|
('materia_legislativa', 'documento_acessorio', 'cod_materia'), |
|
|
('materia_legislativa', 'documento_acessorio', 'cod_materia'), |
|
|
('materia_legislativa', 'numeracao', 'cod_materia'), |
|
|
('materia_legislativa', 'numeracao', 'cod_materia'), |
|
|
|
|
|
('materia_legislativa', 'expediente_materia', 'cod_materia'), |
|
|
|
|
|
|
|
|
# norma |
|
|
# norma |
|
|
('norma_juridica', 'vinculo_norma_juridica', 'cod_norma_referente'), |
|
|
('norma_juridica', 'vinculo_norma_juridica', 'cod_norma_referente'), |
|
|
('norma_juridica', 'vinculo_norma_juridica', 'cod_norma_referida'), |
|
|
('norma_juridica', 'vinculo_norma_juridica', 'cod_norma_referida'), |
|
|
|
|
|
('norma_juridica', 'legislacao_citada', 'cod_norma'), |
|
|
|
|
|
|
|
|
# documento administrativo |
|
|
# documento administrativo |
|
|
('documento_administrativo', 'tramitacao_administrativo', 'cod_documento'), |
|
|
('documento_administrativo', 'tramitacao_administrativo', 'cod_documento'), |
|
|
] |
|
|
] |
|
|
|
|
|
|
|
|
|
|
|
PROPAGACOES_DE_EXCLUSAO_REGISTROS_VOTACAO = [ |
|
|
|
|
|
('registro_votacao', 'registro_votacao_parlamentar', 'cod_votacao'), |
|
|
|
|
|
] |
|
|
|
|
|
|
|
|
def propaga_exclusoes(): |
|
|
|
|
|
for tabela_pai, tabela_filha, fk in PROPAGACOES_DE_EXCLUSAO: |
|
|
def propaga_exclusoes(propagacoes): |
|
|
|
|
|
for tabela_pai, tabela_filha, fk in propagacoes: |
|
|
[pk_pai] = get_pk_legado(tabela_pai) |
|
|
[pk_pai] = get_pk_legado(tabela_pai) |
|
|
exec_legado(''' |
|
|
sql = ''' |
|
|
update {} set ind_excluido = 1 where {} not in ( |
|
|
update {} set ind_excluido = 1 where {} not in ( |
|
|
select {} from {} where ind_excluido != 1) |
|
|
select {} from {} where ind_excluido != 1) |
|
|
'''.format(tabela_filha, fk, pk_pai, tabela_pai)) |
|
|
'''.format(tabela_filha, fk, pk_pai, tabela_pai) |
|
|
|
|
|
exec_legado(sql) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def uniformiza_banco(): |
|
|
def uniformiza_banco(): |
|
|
exec_legado('SET SESSION sql_mode = "";') # desliga checagens do mysql |
|
|
exec_legado('SET SESSION sql_mode = "";') # desliga checagens do mysql |
|
|
|
|
|
|
|
|
propaga_exclusoes() |
|
|
propaga_exclusoes(PROPAGACOES_DE_EXCLUSAO) |
|
|
checa_registros_votacao_ambiguos_e_remove_nao_usados() |
|
|
checa_registros_votacao_ambiguos_e_remove_nao_usados() |
|
|
|
|
|
propaga_exclusoes(PROPAGACOES_DE_EXCLUSAO_REGISTROS_VOTACAO) |
|
|
|
|
|
|
|
|
garante_coluna_no_legado('proposicao', |
|
|
garante_coluna_no_legado('proposicao', |
|
|
'num_proposicao int(11) NULL') |
|
|
'num_proposicao int(11) NULL') |
|
@ -808,7 +804,7 @@ def roda_comando_shell(cmd): |
|
|
assert res == 0, 'O comando falhou: {}'.format(cmd) |
|
|
assert res == 0, 'O comando falhou: {}'.format(cmd) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def migrar_dados(): |
|
|
def migrar_dados(apagar_do_legado=False): |
|
|
try: |
|
|
try: |
|
|
ocorrencias.clear() |
|
|
ocorrencias.clear() |
|
|
ocorrencias.default_factory = list |
|
|
ocorrencias.default_factory = list |
|
@ -840,7 +836,7 @@ def migrar_dados(): |
|
|
fill_vinculo_norma_juridica() |
|
|
fill_vinculo_norma_juridica() |
|
|
fill_dados_basicos() |
|
|
fill_dados_basicos() |
|
|
info('Começando migração: ...') |
|
|
info('Começando migração: ...') |
|
|
migrar_todos_os_models() |
|
|
migrar_todos_os_models(apagar_do_legado) |
|
|
except Exception as e: |
|
|
except Exception as e: |
|
|
ocorrencias['traceback'] = str(traceback.format_exc()) |
|
|
ocorrencias['traceback'] = str(traceback.format_exc()) |
|
|
raise e |
|
|
raise e |
|
@ -874,7 +870,6 @@ def get_models_a_migrar(): |
|
|
if model in field_renames] |
|
|
if model in field_renames] |
|
|
# retira reuniões quando não existe na base legada |
|
|
# retira reuniões quando não existe na base legada |
|
|
# (só existe no sapl 3.0) |
|
|
# (só existe no sapl 3.0) |
|
|
tabelas_legado = [t for (t,) in exec_legado('show tables')] |
|
|
|
|
|
if not EXISTE_REUNIAO_NO_LEGADO: |
|
|
if not EXISTE_REUNIAO_NO_LEGADO: |
|
|
models.remove(Reuniao) |
|
|
models.remove(Reuniao) |
|
|
# Devido à referência TipoProposicao.tipo_conteudo_related |
|
|
# Devido à referência TipoProposicao.tipo_conteudo_related |
|
@ -890,12 +885,12 @@ def get_models_a_migrar(): |
|
|
return models |
|
|
return models |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def migrar_todos_os_models(): |
|
|
def migrar_todos_os_models(apagar_do_legado): |
|
|
for model in get_models_a_migrar(): |
|
|
for model in get_models_a_migrar(): |
|
|
migrar_model(model) |
|
|
migrar_model(model, apagar_do_legado) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def migrar_model(model): |
|
|
def migrar_model(model, apagar_do_legado): |
|
|
print('Migrando %s...' % model.__name__) |
|
|
print('Migrando %s...' % model.__name__) |
|
|
|
|
|
|
|
|
model_legado, tabela_legado, campos_pk_legado = \ |
|
|
model_legado, tabela_legado, campos_pk_legado = \ |
|
@ -949,6 +944,7 @@ def migrar_model(model): |
|
|
novos.append(new) # guarda para salvar |
|
|
novos.append(new) # guarda para salvar |
|
|
|
|
|
|
|
|
# acumula deleção do registro no legado |
|
|
# acumula deleção do registro no legado |
|
|
|
|
|
if apagar_do_legado: |
|
|
sql_delete_legado += 'delete from {} where {};\n'.format( |
|
|
sql_delete_legado += 'delete from {} where {};\n'.format( |
|
|
tabela_legado, |
|
|
tabela_legado, |
|
|
' and '.join( |
|
|
' and '.join( |
|
@ -973,7 +969,7 @@ def migrar_model(model): |
|
|
reinicia_sequence(model, ultima_pk_legado + 1) |
|
|
reinicia_sequence(model, ultima_pk_legado + 1) |
|
|
|
|
|
|
|
|
# apaga registros migrados do legado |
|
|
# apaga registros migrados do legado |
|
|
if sql_delete_legado: |
|
|
if apagar_do_legado and sql_delete_legado: |
|
|
exec_legado(sql_delete_legado) |
|
|
exec_legado(sql_delete_legado) |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1156,7 +1152,9 @@ def adjust_tipoafastamento(new, old): |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_generic_fk(new, campo_virtual, old): |
|
|
def set_generic_fk(new, campo_virtual, old): |
|
|
new.content_type = content_types[campo_virtual.related_model] |
|
|
model = campo_virtual.related_model |
|
|
|
|
|
new.content_type = ContentType.objects.get( |
|
|
|
|
|
app_label=model._meta.app_label, model=model._meta.model_name) |
|
|
new.object_id = get_fk_related(campo_virtual, old) |
|
|
new.object_id = get_fk_related(campo_virtual, old) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|