Browse Source

Add fields mappings (old to new) for migration

pull/6/head
Marcio Mazza 10 years ago
parent
commit
06c907f257
  1. 2
      legacy/models.py
  2. 0
      legacy/scripts/__init__.py
  3. 37
      legacy/scripts/bootstrap_field_mappings.py
  4. 646
      legacy/scripts/field_mappings.yaml
  5. 29
      legacy/scripts/migrate.py
  6. 32
      legacy/scripts/migration_base.py

2
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()

0
legacy/scripts/__init__.py

37
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

646
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

29
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:

32
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())
Loading…
Cancel
Save