Browse Source

Merge branch 'migracao' into 3.1.x

pull/2299/head
Marcio Mazza 6 years ago
parent
commit
5f8988af64
  1. 6
      sapl/legacy/management/commands/ressuscitar_deps.py
  2. 9
      sapl/legacy/migracao.py
  3. 32
      sapl/legacy/migracao_dados.py
  4. 7
      sapl/legacy/migracao_documentos.py
  5. 22
      sapl/legacy/scripts/ressuscita_dependencias.py

6
sapl/legacy/management/commands/ressucitar_deps.py → sapl/legacy/management/commands/ressuscitar_deps.py

@ -1,12 +1,12 @@
from django.core.management.base import BaseCommand
from sapl.legacy.scripts.ressucita_dependencias import adiciona_ressucitar
from sapl.legacy.scripts.ressuscita_dependencias import adiciona_ressuscitar
class Command(BaseCommand):
help = 'Ressucita dependências apagadas ' \
help = 'Ressuscita dependências apagadas ' \
'que são necessárias para migrar outros registros'
def handle(self, *args, **options):
adiciona_ressucitar()
adiciona_ressuscitar()

9
sapl/legacy/migracao.py

@ -70,12 +70,13 @@ def scrap_sde(url, usuario, senha=None):
{'__ac_name': usuario, '__ac_password': senha})
assert res.status_code == 200
url_proposicao = '{}/sapl_documentos/proposicao/{}/renderXML?xsl=__default__' # noqa
url_proposicao_tmpl = '{}/sapl_documentos/proposicao/{}/renderXML?xsl=__default__' # noqa
total = Proposicao.objects.count()
for num, proposicao in enumerate(Proposicao.objects.all()):
pk = proposicao.pk
res = session.get(url_proposicao.format(url, pk))
print("pk: {} status: {} (progresso: {:.2%})".format(
pk, res.status_code, num / total))
url_proposicao = url_proposicao_tmpl.format(url, pk)
res = session.get(url_proposicao)
print("pk: {} status: {} {} (progresso: {:.2%})".format(
pk, res.status_code, url_proposicao, num / total))
if res.status_code == 200:
salva_conteudo_do_sde(proposicao, res.content)

32
sapl/legacy/migracao_dados.py

@ -623,6 +623,36 @@ def corrige_unidades_tramitacao_destino_vazia_como_anterior():
'''.format(tabela_tramitacao))
def apaga_ref_a_mats_e_docs_inexistentes_em_proposicoes():
# as referencias a matérias e documentos apagados não aparecem no 3.1
# além do que, se ressuscitássemos essas matérias e docs,
# não seria possível apagá-los,
# pois é impossível para um usuário não autor acessar as proposicões
# para apagar a referências antes
exec_legado('''
update proposicao set cod_materia = NULL where cod_materia not in (
select cod_materia from materia_legislativa
where ind_excluido <> 1);
''')
props_sem_mats = list(primeira_coluna(exec_legado('''
select cod_proposicao from proposicao p inner join tipo_proposicao t
on p.tip_proposicao = t.tip_proposicao
where t.ind_mat_ou_doc = 'M' and cod_mat_ou_doc not in (
select cod_materia from materia_legislativa
where ind_excluido <> 1)
''')))
props_sem_docs = list(primeira_coluna(exec_legado('''
select cod_proposicao from proposicao p inner join tipo_proposicao t
on p.tip_proposicao = t.tip_proposicao
where t.ind_mat_ou_doc = 'D' and cod_mat_ou_doc not in (
select cod_documento from documento_acessorio
where ind_excluido <> 1);
''')))
exec_legado_em_subconjunto('''
update proposicao set cod_mat_ou_doc = NULL
where cod_proposicao in {}''', props_sem_mats + props_sem_docs)
def uniformiza_banco():
propaga_exclusoes(PROPAGACOES_DE_EXCLUSAO)
checa_registros_votacao_ambiguos_e_remove_nao_usados()
@ -722,6 +752,8 @@ sessao_plenaria_presenca | dat_sessao = NULL | dat_sessao = 0
select cod_materia from materia_legislativa
where ind_excluido <> 1);''')
apaga_ref_a_mats_e_docs_inexistentes_em_proposicoes()
class Record:
pass

7
sapl/legacy/migracao_documentos.py

@ -1,4 +1,5 @@
import os
import shutil
import re
from glob import glob
from os.path import join
@ -52,6 +53,12 @@ def mover_documento(repo, origem, destino, ignora_origem_ausente=False):
if ignora_origem_ausente and not os.path.exists(origem):
print('Origem ignorada ao mover documento: {}'.format(origem))
return
# apaga destino, se houver, e renomeia origem para destino
if os.path.exists(destino):
if os.path.isdir(destino):
shutil.rmtree(destino)
else:
os.remove(destino)
os.makedirs(os.path.dirname(destino), exist_ok=True)
os.rename(origem, destino)

22
sapl/legacy/scripts/ressucita_dependencias.py → sapl/legacy/scripts/ressuscita_dependencias.py

@ -70,6 +70,7 @@ tipo_dependente /sistema/parlamentar/tipo-dependente
origem /sistema/materia/origem
documento_acessorio /materia/documentoacessorio
tipo_fim_relatoria /sistema/materia/tipo-fim-relatoria
tipo_situacao_militar /sistema/parlamentar/tipo-militar
'''
urls = dict(stripsplit(urls))
@ -194,7 +195,7 @@ Para facilitar sua conferência, seguem os links para as proposições envolvida
'''.format(table.draw(), links, sqls)
def get_dependencias_a_ressucitar(slug):
def get_dependencias_a_ressuscitar(slug):
ocorrencias = yaml.load(
Path(DIR_REPO.child('ocorrencias.yaml').read_file()))
fks_faltando = ocorrencias.get('fk')
@ -265,7 +266,7 @@ SQLS_CRIACAO = [
('unidade_tramitacao', '''
insert into unidade_tramitacao (
cod_unid_tramitacao, cod_comissao, cod_orgao, cod_parlamentar, ind_excluido)
values ({}, NULL, NULL, NULL, 0);
values ({}, NULL, NULL, 0, 0);
'''),
('autor', SQL_INSERT_TIPO_AUTOR.format(0) + '''
insert into autor (
@ -307,6 +308,9 @@ SQLS_CRIACAO = [
insert into parlamentar (cod_parlamentar, nom_completo, nom_parlamentar, sex_parlamentar, cod_casa, ind_ativo, ind_unid_deliberativa, ind_excluido)
values ({}, "DESCONHECIDO", "DESCONHECIDO", "M", 0, 0, 0, 0);
'''),
('tipo_sessao_plenaria', '''
insert into tipo_sessao_plenaria (tip_sessao, nom_sessao, ind_excluido, num_minimo) values ({}, "DESCONHECIDO", 0, 0);
'''),
]
SQLS_CRIACAO = {k: (dedent(sql.strip()), extras)
for k, sql, *extras in SQLS_CRIACAO}
@ -349,8 +353,8 @@ def get_sql_criar(tabela_alvo, campo, valor, slug):
return sql, links
TEMPLATE_RESSUCITADOS = '''{}
/* RESSUCITADOS
TEMPLATE_RESSUSCITADOS = '''{}
/* RESSUSCITADOS
SOBRE REGISTROS QUE ESTAVAM APAGADOS E FORAM RESTAURADOS
@ -397,11 +401,11 @@ def get_sqls_desexcluir_criar(preambulo, desexcluir, criar, slug):
links = sem_repeticoes_mantendo_ordem(links)
sqls, links = ['\n'.join(sorted(s)) for s in [sqls, links]]
return TEMPLATE_RESSUCITADOS.format(preambulo, links, sqls)
return TEMPLATE_RESSUSCITADOS.format(preambulo, links, sqls)
def get_ressucitar(slug):
preambulo, desexcluir, criar = get_dependencias_a_ressucitar(slug)
def get_ressuscitar(slug):
preambulo, desexcluir, criar = get_dependencias_a_ressuscitar(slug)
return get_sqls_desexcluir_criar(preambulo, desexcluir, criar, slug)
@ -413,8 +417,8 @@ def get_slug():
return siglas_para_slugs[sigla]
def adiciona_ressucitar():
sqls = get_ressucitar(get_slug())
def adiciona_ressuscitar():
sqls = get_ressuscitar(get_slug())
if sqls.strip():
arq_ajustes_pre_migracao = get_arquivo_ajustes_pre_migracao()
conteudo = arq_ajustes_pre_migracao.read_file()
Loading…
Cancel
Save