diff --git a/legacy/models.py b/legacy/models.py index af4c5215f..b38d67abb 100644 --- a/legacy/models.py +++ b/legacy/models.py @@ -994,7 +994,7 @@ class TipoSessaoPlenaria(models.Model): db_table = 'tipo_sessao_plenaria' -class TipoSituacaoMilitar(models.Model): +class SituacaoMilitar(models.Model): tip_situacao_militar = models.IntegerField(primary_key=True) des_tipo_situacao = models.CharField(max_length=50) ind_excluido = models.IntegerField() diff --git a/legacy/scripts/__init__.py b/legacy/scripts/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/legacy/scripts/bootstrap_field_mappings.py b/legacy/scripts/bootstrap_field_mappings.py new file mode 100644 index 000000000..24030325e --- /dev/null +++ b/legacy/scripts/bootstrap_field_mappings.py @@ -0,0 +1,37 @@ +from collections import defaultdict +from difflib import SequenceMatcher +from os.path import dirname + +import yaml + +from migration_base import * + + +# output to bootstrap field_mappings.yaml +for app in appconfs: + print '\n%s\n%s:' % ('#' * 80, app.name) + for model in app.models.values(): + print '\n %s:' % model.__name__ + current_fields = [f.name for f in model._meta.fields] + legacy_fields = [f.name for f in legacy_app.get_model(model.__name__)._meta.fields if f.name != 'ind_excluido'] + for pair in zip(current_fields, legacy_fields): + print ' %s : %s' % pair + + +def similar(a, b): return SequenceMatcher(None, a, b).ratio() + +mappings = yaml.load(open(dirname(__file__) + '/field_mappings.yaml', 'r')) + +different_pairs = defaultdict(list) +for map in mappings.values(): + for name, fields in map.items(): + for a, b in fields.items(): + if a != 'id' and similar(a, b) < .7: + different_pairs[name].append((a, b)) + +if different_pairs: + print '\n\n######## Different Pairs #########' + for name, pairs in different_pairs.items(): + print '#', name + for a, b in pairs: + print '# ', a, b diff --git a/legacy/scripts/field_mappings.yaml b/legacy/scripts/field_mappings.yaml new file mode 100644 index 000000000..8ce46be37 --- /dev/null +++ b/legacy/scripts/field_mappings.yaml @@ -0,0 +1,646 @@ +################################################################################ +# MAPPINGS OF NEW FIELDS TO LEGACY ONES +################################################################################ +parlamentares: + + Legislatura: + id : num_legislatura + data_inicio : dat_inicio + data_fim : dat_fim + data_eleicao : dat_eleicao + + SessaoLegislativa: + id : cod_sessao_leg + legislatura : num_legislatura + numero : num_sessao_leg + tipo : tip_sessao_leg + data_inicio : dat_inicio + data_fim : dat_fim + data_inicio_intervalo : dat_inicio_intervalo + data_fim_intervalo : dat_fim_intervalo + + Coligacao: + id : cod_coligacao + legislatura : num_legislatura + nome_coligacao : nom_coligacao + numero_votos_coligacao : num_votos_coligacao + + Partido: + id : cod_partido + sigla_partido : sgl_partido + nome_partido : nom_partido + data_criacao : dat_criacao + data_extincao : dat_extincao + + ComposicaoColigacao: + id : id + partido : cod_partido + coligacao : cod_coligacao + + Localidade: + id : cod_localidade + nome_localidade : nom_localidade + nome_localidade_pesq : nom_localidade_pesq + tipo_localidade : tip_localidade + sigla_uf : sgl_uf + sigla_regiao : sgl_regiao + + NivelInstrucao: + id : cod_nivel_instrucao + nivel_instrucao : des_nivel_instrucao + + SituacaoMilitar: + id : tip_situacao_militar + descricao_tipo_situacao : des_tipo_situacao + + Parlamentar: + id : cod_parlamentar + nivel_instrucao : cod_nivel_instrucao + situacao_militar : tip_situacao_militar + nome_completo : nom_completo + nome_parlamentar : nom_parlamentar + sexo : sex_parlamentar + data_nascimento : dat_nascimento + numero_cpf : num_cpf + numero_rg : num_rg + numero_tit_eleitor : num_tit_eleitor + cod_casa : cod_casa + numero_gab_parlamentar : num_gab_parlamentar + numero_tel_parlamentar : num_tel_parlamentar + numero_fax_parlamentar : num_fax_parlamentar + endereco_residencial : end_residencial + localidade_resid : cod_localidade_resid + numero_cep_resid : num_cep_resid + numero_tel_resid : num_tel_resid + numero_fax_resid : num_fax_resid + endereco_web : end_web + nome_profissao : nom_profissao + endereco_email : end_email + descricao_local_atuacao : des_local_atuacao + ativo : ind_ativo + txt_biografia : txt_biografia + unid_deliberativa : ind_unid_deliberativa + + TipoDependente: + id : tip_dependente + descricao_tipo_dependente : des_tipo_dependente + + Dependente: + id : cod_dependente + tipo_dependente : tip_dependente + parlamentar : cod_parlamentar + nome_dependente : nom_dependente + sexo : sex_dependente + data_nascimento : dat_nascimento + numero_cpf : num_cpf + numero_rg : num_rg + numero_tit_eleitor : num_tit_eleitor + + Filiacao: + id : id + data_filiacao : dat_filiacao + parlamentar : cod_parlamentar + partido : cod_partido + data_desfiliacao : dat_desfiliacao + + TipoAfastamento: + id : tip_afastamento + descricao_afastamento : des_afastamento + afastamento : ind_afastamento + fim_mandato : ind_fim_mandato + descricao_dispositivo : des_dispositivo + + Mandato: + id : cod_mandato + parlamentar : cod_parlamentar + tipo_afastamento : tip_afastamento + legislatura : num_legislatura + coligacao : cod_coligacao + tipo_causa_fim_mandato : tip_causa_fim_mandato + data_fim_mandato : dat_fim_mandato + numero_votos_recebidos : num_votos_recebidos + data_expedicao_diploma : dat_expedicao_diploma + txt_observacao : txt_observacao + + CargoMesa: + id : cod_cargo + nome : des_cargo + unico : ind_unico + + ComposicaoMesa: + id : id + parlamentar : cod_parlamentar + sessao_legislativa : cod_sessao_leg + cargo : cod_cargo + +################################################################################ +comissoes: + + TipoComissao: + id : tip_comissao + nome_tipo_comissao : nom_tipo_comissao + sigla_natureza_comissao : sgl_natureza_comissao + sigla_tipo_comissao : sgl_tipo_comissao + descricao_dispositivo_regimental : des_dispositivo_regimental + + Comissao: + id : cod_comissao + tipo_comissao : tip_comissao + nome_comissao : nom_comissao + sigla_comissao : sgl_comissao + data_criacao : dat_criacao + data_extincao : dat_extincao + nome_apelido_temp : nom_apelido_temp + data_instalacao_temp : dat_instalacao_temp + data_final_prevista_temp : dat_final_prevista_temp + data_prorrogada_temp : dat_prorrogada_temp + data_fim_comissao : dat_fim_comissao + nome_secretario : nom_secretario + numero_tel_reuniao : num_tel_reuniao + endereco_secretaria : end_secretaria + numero_tel_secretaria : num_tel_secretaria + numero_fax_secretaria : num_fax_secretaria + descricao_agenda_reuniao : des_agenda_reuniao + local_reuniao : loc_reuniao + txt_finalidade : txt_finalidade + endereco_email : end_email + unid_deliberativa : ind_unid_deliberativa + + PeriodoCompComissao: + id : cod_periodo_comp + data_inicio_periodo : dat_inicio_periodo + data_fim_periodo : dat_fim_periodo + + CargoComissao: + id : cod_cargo + nome : des_cargo + unico : ind_unico + + ComposicaoComissao: + id : cod_comp_comissao + parlamentar : cod_parlamentar + comissao : cod_comissao + periodo_comp : cod_periodo_comp + cargo : cod_cargo + titular : ind_titular + data_designacao : dat_designacao + data_desligamento : dat_desligamento + descricao_motivo_desligamento : des_motivo_desligamento + obs_composicao : obs_composicao + +################################################################################ +sessao: + + TipoSessaoPlenaria: + id : tip_sessao + nome_sessao : nom_sessao + numero_minimo : num_minimo + + SessaoPlenaria: + id : cod_sessao_plen + cod_andamento_sessao : cod_andamento_sessao + tipo : tip_sessao + sessao_leg : cod_sessao_leg + legislatura : num_legislatura + tipo_expediente : tip_expediente + data_inicio_sessao : dat_inicio_sessao + dia_sessao : dia_sessao + hr_inicio_sessao : hr_inicio_sessao + hr_fim_sessao : hr_fim_sessao + numero_sessao_plen : num_sessao_plen + data_fim_sessao : dat_fim_sessao + url_audio : url_audio + url_video : url_video + + ExpedienteMateria: + id : cod_ordem + sessao_plen : cod_sessao_plen + materia : cod_materia + data_ordem : dat_ordem + txt_observacao : txt_observacao + numero_ordem : num_ordem + txt_resultado : txt_resultado + tipo_votacao : tip_votacao + + TipoExpediente: + id : cod_expediente + nome_expediente : nom_expediente + + ExpedienteSessaoPlenaria: + id : id + sessao_plen : cod_sessao_plen + expediente : cod_expediente + txt_expediente : txt_expediente + + MesaSessaoPlenaria: + id : id + cargo : cod_cargo + sessao_leg : cod_sessao_leg + parlamentar : cod_parlamentar + sessao_plen : cod_sessao_plen + + Oradores: + id : id + sessao_plen : cod_sessao_plen + parlamentar : cod_parlamentar + numero_ordem : num_ordem + url_discurso : url_discurso + + OradoresExpediente: + id : id + sessao_plen : cod_sessao_plen + parlamentar : cod_parlamentar + numero_ordem : num_ordem + url_discurso : url_discurso + + OrdemDia: + id : cod_ordem + sessao_plen : cod_sessao_plen + materia : cod_materia + data_ordem : dat_ordem + txt_observacao : txt_observacao + numero_ordem : num_ordem + txt_resultado : txt_resultado + tipo_votacao : tip_votacao + + OrdemDiaPresenca: + id : cod_presenca_ordem_dia + sessao_plen : cod_sessao_plen + parlamentar : cod_parlamentar + data_ordem : dat_ordem + + TipoResultadoVotacao: + id : tip_resultado_votacao + nome_resultado : nom_resultado + + RegistroVotacao: + id : cod_votacao + tipo_resultado_votacao : tip_resultado_votacao + materia : cod_materia + ordem : cod_ordem + numero_votos_sim : num_votos_sim + numero_votos_nao : num_votos_nao + numero_abstencao : num_abstencao + txt_observacao : txt_observacao + + RegistroVotacaoParlamentar: + id : id + votacao : cod_votacao + parlamentar : cod_parlamentar + vot_parlamentar : vot_parlamentar + + SessaoPlenariaPresenca: + id : cod_presenca_sessao + sessao_plen : cod_sessao_plen + parlamentar : cod_parlamentar + data_sessao : dat_sessao + +################################################################################ +materia: + + TipoMateriaLegislativa: + id : tip_materia + sigla_tipo_materia : sgl_tipo_materia + descricao_tipo_materia : des_tipo_materia + num_automatica : ind_num_automatica + quorum_minimo_votacao : quorum_minimo_votacao + + RegimeTramitacao: + id : cod_regime_tramitacao + descricao_regime_tramitacao : des_regime_tramitacao + + Origem: + id : cod_origem + sigla_origem : sgl_origem + nome_origem : nom_origem + + MateriaLegislativa: + id : cod_materia + tipo_id_basica : tip_id_basica + numero_protocolo : num_protocolo + numero_ident_basica : num_ident_basica + ano_ident_basica : ano_ident_basica + data_apresentacao : dat_apresentacao + tipo_apresentacao : tip_apresentacao + regime_tramitacao : cod_regime_tramitacao + data_publicacao : dat_publicacao + tipo_origem_externa : tip_origem_externa + numero_origem_externa : num_origem_externa + ano_origem_externa : ano_origem_externa + data_origem_externa : dat_origem_externa + local_origem_externa : cod_local_origem_externa + nome_apelido : nom_apelido + numero_dias_prazo : num_dias_prazo + data_fim_prazo : dat_fim_prazo + indicador_tramitacao : ind_tramitacao + polemica : ind_polemica + descricao_objeto : des_objeto + complementar : ind_complementar + txt_ementa : txt_ementa + txt_indexacao : txt_indexacao + txt_observacao : txt_observacao + txt_resultado : txt_resultado + + AcompMateria: + id : cod_cadastro + materia : cod_materia + endereco_email : end_email + txt_hash : txt_hash + + Anexada: + id : id + materia_principal : cod_materia_principal + materia_anexada : cod_materia_anexada + data_anexacao : dat_anexacao + data_desanexacao : dat_desanexacao + + AssuntoMateria: + id : cod_assunto + descricao_assunto : des_assunto + descricao_dispositivo : des_dispositivo + + TipoAutor: + id : tip_autor + descricao_tipo_autor : des_tipo_autor + + Autor: + id : cod_autor + partido : cod_partido + comissao : cod_comissao + parlamentar : cod_parlamentar + tipo : tip_autor + nome_autor : nom_autor + descricao_cargo : des_cargo + col_username : col_username + + Autoria: + id : id + autor : cod_autor + materia : cod_materia + primeiro_autor : ind_primeiro_autor + + DespachoInicial: + id : id + materia : cod_materia + numero_ordem : num_ordem + comissao : cod_comissao + + TipoDocumento: + id : tip_documento + descricao_tipo_documento : des_tipo_documento + + DocumentoAcessorio: + id : cod_documento + materia : cod_materia + tipo : tip_documento + nome_documento : nom_documento + data_documento : dat_documento + nome_autor_documento : nom_autor_documento + txt_ementa : txt_ementa + txt_indexacao : txt_indexacao + + MateriaAssunto: + id : id + assunto : cod_assunto + materia : cod_materia + + Numeracao: + id : id + materia : cod_materia + numero_ordem : num_ordem + tipo_materia : tip_materia + numero_materia : num_materia + ano_materia : ano_materia + data_materia : dat_materia + + Orgao: + id : cod_orgao + nome_orgao : nom_orgao + sigla_orgao : sgl_orgao + unid_deliberativa : ind_unid_deliberativa + endereco_orgao : end_orgao + numero_tel_orgao : num_tel_orgao + + TipoFimRelatoria: + id : tip_fim_relatoria + descricao_fim_relatoria : des_fim_relatoria + + Relatoria: + id : cod_relatoria + materia : cod_materia + parlamentar : cod_parlamentar + tipo_fim_relatoria : tip_fim_relatoria + comissao : cod_comissao + data_desig_relator : dat_desig_relator + data_destit_relator : dat_destit_relator + + Parecer: + id : id + relatoria : cod_relatoria + materia : cod_materia + tipo_conclusao : tip_conclusao + tipo_apresentacao : tip_apresentacao + txt_parecer : txt_parecer + + TipoProposicao: + id : tip_proposicao + descricao_tipo_proposicao : des_tipo_proposicao + mat_ou_doc : ind_mat_ou_doc + tipo_mat_ou_doc : tip_mat_ou_doc + nome_modelo : nom_modelo + + Proposicao: + id : cod_proposicao + materia : cod_materia + autor : cod_autor + tipo : tip_proposicao + data_envio : dat_envio + data_recebimento : dat_recebimento + txt_descricao : txt_descricao + cod_mat_ou_doc : cod_mat_ou_doc + data_devolucao : dat_devolucao + txt_justif_devolucao : txt_justif_devolucao + numero_proposicao : num_proposicao + + StatusTramitacao: + id : cod_status + sigla_status : sgl_status + descricao_status : des_status + fim_tramitacao : ind_fim_tramitacao + retorno_tramitacao : ind_retorno_tramitacao + + UnidadeTramitacao: + id : cod_unid_tramitacao + comissao : cod_comissao + orgao : cod_orgao + parlamentar : cod_parlamentar + + Tramitacao: + id : cod_tramitacao + status : cod_status + materia : cod_materia + data_tramitacao : dat_tramitacao + unid_tram_local : cod_unid_tram_local + data_encaminha : dat_encaminha + unid_tram_dest : cod_unid_tram_dest + ult_tramitacao : ind_ult_tramitacao + urgencia : ind_urgencia + sigla_turno : sgl_turno + txt_tramitacao : txt_tramitacao + data_fim_prazo : dat_fim_prazo + +################################################################################ +norma: + + AssuntoNorma: + id : cod_assunto + descricao_assunto : des_assunto + descricao_estendida : des_estendida + + TipoNormaJuridica: + id : tip_norma + voc_lexml : voc_lexml + sigla_tipo_norma : sgl_tipo_norma + descricao_tipo_norma : des_tipo_norma + + NormaJuridica: + id : cod_norma + tipo : tip_norma + materia : cod_materia + numero_norma : num_norma + ano_norma : ano_norma + tipo_esfera_federacao : tip_esfera_federacao + data_norma : dat_norma + data_publicacao : dat_publicacao + descricao_veiculo_publicacao : des_veiculo_publicacao + numero_pag_inicio_publ : num_pag_inicio_publ + numero_pag_fim_publ : num_pag_fim_publ + txt_ementa : txt_ementa + txt_indexacao : txt_indexacao + txt_observacao : txt_observacao + complemento : ind_complemento + assunto : cod_assunto + data_vigencia : dat_vigencia + timestamp : timestamp + + LegislacaoCitada: + id : id + materia : cod_materia + norma : cod_norma + descricao_disposicoes : des_disposicoes + descricao_parte : des_parte + descricao_livro : des_livro + descricao_titulo : des_titulo + descricao_capitulo : des_capitulo + descricao_secao : des_secao + descricao_subsecao : des_subsecao + descricao_artigo : des_artigo + descricao_paragrafo : des_paragrafo + descricao_inciso : des_inciso + descricao_alinea : des_alinea + descricao_item : des_item + + VinculoNormaJuridica: + id : cod_vinculo + norma_referente : cod_norma_referente + norma_referida : cod_norma_referida + tipo_vinculo : tip_vinculo + +################################################################################ +lexml: + + LexmlRegistroProvedor: + id : cod_provedor + id_provedor : id_provedor + nome_provedor : nom_provedor + sigla_provedor : sgl_provedor + adm_email : adm_email + nome_responsavel : nom_responsavel + tipo : tipo + id_responsavel : id_responsavel + xml_provedor : xml_provedor + + LexmlRegistroPublicador: + id : cod_publicador + id_publicador : id_publicador + nome_publicador : nom_publicador + adm_email : adm_email + sigla : sigla + nome_responsavel : nom_responsavel + tipo : tipo + id_responsavel : id_responsavel + +################################################################################ +protocoloadm: + + TipoDocumentoAdministrativo: + id : tip_documento + sigla_tipo_documento : sgl_tipo_documento + descricao_tipo_documento : des_tipo_documento + + DocumentoAdministrativo: + id : cod_documento + tipo : tip_documento + numero_documento : num_documento + ano_documento : ano_documento + data_documento : dat_documento + numero_protocolo : num_protocolo + txt_interessado : txt_interessado + autor : cod_autor + numero_dias_prazo : num_dias_prazo + data_fim_prazo : dat_fim_prazo + tramitacao : ind_tramitacao + txt_assunto : txt_assunto + txt_observacao : txt_observacao + + DocumentoAcessorioAdministrativo: + id : cod_documento_acessorio + documento : cod_documento + tipo : tip_documento + nome_documento : nom_documento + nome_arquivo : nom_arquivo + data_documento : dat_documento + nome_autor_documento : nom_autor_documento + txt_assunto : txt_assunto + txt_indexacao : txt_indexacao + + Protocolo: + id : cod_protocolo + numero_protocolo : num_protocolo + ano_protocolo : ano_protocolo + data_protocolo : dat_protocolo + hora_protocolo : hor_protocolo + data_timestamp : dat_timestamp + tipo_protocolo : tip_protocolo + tipo_processo : tip_processo + txt_interessado : txt_interessado + autor : cod_autor + txt_assunto_ementa : txt_assunto_ementa + tipo_documento : tip_documento + tipo_materia : tip_materia + numero_paginas : num_paginas + txt_observacao : txt_observacao + anulado : ind_anulado + txt_user_anulacao : txt_user_anulacao + txt_ip_anulacao : txt_ip_anulacao + txt_just_anulacao : txt_just_anulacao + timestamp_anulacao : timestamp_anulacao + + StatusTramitacaoAdministrativo: + id : cod_status + sigla_status : sgl_status + descricao_status : des_status + fim_tramitacao : ind_fim_tramitacao + retorno_tramitacao : ind_retorno_tramitacao + + TramitacaoAdministrativo: + id : cod_tramitacao + documento : cod_documento + data_tramitacao : dat_tramitacao + cod_unid_tram_local : cod_unid_tram_local + data_encaminha : dat_encaminha + cod_unid_tram_dest : cod_unid_tram_dest + status : cod_status + ult_tramitacao : ind_ult_tramitacao + txt_tramitacao : txt_tramitacao + data_fim_prazo : dat_fim_prazo diff --git a/legacy/scripts/migrate.py b/legacy/scripts/migrate.py index d53f987a3..2cd6fa356 100644 --- a/legacy/scripts/migrate.py +++ b/legacy/scripts/migrate.py @@ -1,9 +1,7 @@ -from django.apps import apps from django.db import connection, models import legacy -from mesa.models import Legislatura, SessaoLegislativa -from parlamentares.models import NivelInstrucao +from parlamentares.models import * mappings = ( @@ -27,31 +25,6 @@ mappings = ( ) -appconfs = [apps.get_app_config(n) for n in [ - 'mesa', - 'parlamentares', - 'comissoes', - 'sessao', - 'materia', - 'norma', - 'lexml', - 'protocoloadm', ]] -name_sets = [set(m.__name__ for m in ac.get_models()) for ac in appconfs] - -# apps do not overlap -for s1 in name_sets: - for s2 in name_sets: - if s1 is not s2: - assert not s1.intersection(s2) - -# apps include all legacy models -legacy_model_names = set(m.__name__ for m in apps.get_app_config('legacy').get_models()) -all_names = set() -for s1 in name_sets: - all_names = all_names.union(s1) -assert all_names == legacy_model_names - - def migrate(): for model, pk, field_pairs in mappings: diff --git a/legacy/scripts/migration_base.py b/legacy/scripts/migration_base.py new file mode 100644 index 000000000..fa6e59a2f --- /dev/null +++ b/legacy/scripts/migration_base.py @@ -0,0 +1,32 @@ +from django.apps import apps + + +appconfs = [apps.get_app_config(n) for n in [ + 'parlamentares', + 'comissoes', + 'sessao', + 'materia', + 'norma', + 'lexml', + 'protocoloadm', ]] +name_sets = [set(m.__name__ for m in ac.get_models()) for ac in appconfs] + +# apps do not overlap +for s1 in name_sets: + for s2 in name_sets: + if s1 is not s2: + assert not s1.intersection(s2) + +# apps include all legacy models +legacy_app = apps.get_app_config('legacy') +legacy_model_names = set(m.__name__ for m in legacy_app.get_models()) +all_names = set() +for s1 in name_sets: + all_names = all_names.union(s1) +assert all_names == legacy_model_names + + +def has_primary_key(model): + return any(field.primary_key for field in model._meta.fields) + +assert all(has_primary_key(model) for model in legacy_app.models.values())