Browse Source

Enumera matérias a serem apagadas de proposições ao ressucitar deps

pull/2188/head
Marcio Mazza 6 years ago
parent
commit
69c37cf3f4
  1. 1
      requirements/migration-requirements.txt
  2. 102
      sapl/legacy/scripts/ressucita_dependencias.py

1
requirements/migration-requirements.txt

@ -2,3 +2,4 @@
GitPython GitPython
mysqlclient==1.3.12 mysqlclient==1.3.12
pyaml pyaml
texttable

102
sapl/legacy/scripts/ressucita_dependencias.py

@ -1,5 +1,6 @@
from textwrap import dedent from textwrap import dedent
import texttable
import yaml import yaml
from unipath import Path from unipath import Path
@ -36,6 +37,8 @@ fks_legado = '''
proposicao tip_proposicao tipo_proposicao proposicao tip_proposicao tipo_proposicao
tramitacao cod_unid_tram_dest unidade_tramitacao tramitacao cod_unid_tram_dest unidade_tramitacao
tramitacao cod_unid_tram_local unidade_tramitacao tramitacao cod_unid_tram_local unidade_tramitacao
tramitacao_administrativo cod_unid_tram_dest unidade_tramitacao
tramitacao_administrativo cod_unid_tram_local unidade_tramitacao
documento_acessorio tip_documento tipo_documento documento_acessorio tip_documento tipo_documento
relatoria cod_parlamentar parlamentar relatoria cod_parlamentar parlamentar
relatoria cod_materia materia_legislativa relatoria cod_materia materia_legislativa
@ -43,6 +46,7 @@ fks_legado = '''
norma_juridica cod_materia materia_legislativa norma_juridica cod_materia materia_legislativa
sessao_plenaria tip_sessao tipo_sessao_plenaria sessao_plenaria tip_sessao tipo_sessao_plenaria
mesa_sessao_plenaria cod_cargo cargo_mesa mesa_sessao_plenaria cod_cargo cargo_mesa
norma_juridica tip_norma tipo_norma_juridica
''' '''
fks_legado = stripsplit(fks_legado) fks_legado = stripsplit(fks_legado)
fks_legado = {(o, c): t for (o, c, t) in fks_legado} fks_legado = {(o, c): t for (o, c, t) in fks_legado}
@ -69,6 +73,7 @@ tipo_sessao_plenaria /sistema/sessao-plenaria/tipo
cargo_mesa /sistema/mesa-diretora/cargo-mesa cargo_mesa /sistema/mesa-diretora/cargo-mesa
documento_administrativo /docadm documento_administrativo /docadm
tipo_materia_legislativa /sistema/materia/tipo tipo_materia_legislativa /sistema/materia/tipo
tipo_norma_juridica /sistema/norma/tipo
registro_votacao ????????? registro_votacao ?????????
''' '''
urls = dict(stripsplit(urls)) urls = dict(stripsplit(urls))
@ -123,10 +128,89 @@ def get_excluido(fk):
return tabela_origem, campo, valor, tabela_alvo, res return tabela_origem, campo, valor, tabela_alvo, res
def get_dependencias_a_ressucitar(): def get_desc_materia(cod_materia):
sql = '''
select t.sgl_tipo_materia, t.des_tipo_materia,
m.num_ident_basica, m.ano_ident_basica
from materia_legislativa m inner join tipo_materia_legislativa t
on m.tip_id_basica = t.tip_materia
where cod_materia = {};
'''.format(cod_materia)
return list(exec_legado(sql))[0]
def get_link_proposicao(cod_proposicao, slug):
url_base = get_url(slug)
return 'http://{}/cadastros/proposicao/proposicao_mostrar_proc?cod_proposicao={}'.format( # noqa
url_base, cod_proposicao)
def get_apaga_materias_de_proposicoes(fks, slug):
refs_materias = [['id proposicao', 'sigla tipo matéria',
'tipo matéria', 'número matéria', 'ano matéria']]
sqls = []
cods_proposicoes = []
for fk in fks:
cod_proposicao = fk['pk']['cod_proposicao']
cods_proposicoes.append(cod_proposicao)
assert fk['campo'] == 'cod_materia'
up = 'update proposicao set cod_materia = NULL where cod_proposicao = {};' # noqa
refs_materias.append(
[cod_proposicao, *get_desc_materia(fk['valor'])])
sqls.append(up.format(cod_proposicao))
table = texttable.Texttable()
table.set_cols_width([10, 10, 50, 10, 10])
table.set_deco(table.VLINES | table.HEADER)
table.add_rows(refs_materias)
links = '\n'.join([get_link_proposicao(p, slug)
for p in cods_proposicoes])
sqls = '\n'.join(sqls)
return '''
/* REFERÊNCIAS A MATÉRIAS APAGADAS DE PROPOSIÇÕES
ATENÇÃO
As seguintes proposições apontaram no passado para matérias
e esses apontamentos foram em algum momento retirados.
Elas foram migradas da forma com estão agora: sem apontar para nenhuma matéria.
Entretanto, talvez você deseje rever esses apontamentos.
Segue então uma lista dos apontamentos anteriores que detectamos.
{}
Para facilitar sua conferência, seguem os links para as proposições envolvidas:
{}
*/
{}
'''.format(table.draw(), links, sqls)
def get_dependencias_a_ressucitar(slug):
ocorrencias = yaml.load( ocorrencias = yaml.load(
Path(DIR_REPO.child('ocorrencias.yaml').read_file())) Path(DIR_REPO.child('ocorrencias.yaml').read_file()))
fks_faltando = ocorrencias['fk'] fks_faltando = ocorrencias.get('fk')
if not fks_faltando:
return [], []
proposicoes_para_materia = [
fk for fk in fks_faltando
if fk['tabela'] == 'proposicao' and fk['campo'] == 'cod_materia']
print(get_apaga_materias_de_proposicoes(proposicoes_para_materia, slug))
fks_faltando = [fk for fk in fks_faltando
if fk not in proposicoes_para_materia]
excluidos = [get_excluido(fk) for fk in fks_faltando] excluidos = [get_excluido(fk) for fk in fks_faltando]
desexcluir, criar = [ desexcluir, criar = [
set([(tabela_alvo, campo, valor) set([(tabela_alvo, campo, valor)
@ -214,15 +298,19 @@ TEMPLATE_RESSUCITADOS = '''
''' '''
def get_url(slug):
return 'sapl.{}.leg.br'.format(slug.replace('-', '.'))
def get_sqls_desexcluir_criar(desexcluir, criar, slug): def get_sqls_desexcluir_criar(desexcluir, criar, slug):
sqls_links = [get_sql(tabela_alvo, campo, valor) sqls_links = [get_sql(*args)
for conjunto, get_sql in ((desexcluir, get_sql_desexcluir), for itens, get_sql in ((desexcluir, get_sql_desexcluir),
(criar, get_sql_criar)) (criar, get_sql_criar))
for tabela_alvo, campo, valor in conjunto] for args in itens]
if not sqls_links: if not sqls_links:
return '' return ''
else: else:
url_base = 'sapl.{}.leg.br'.format(slug.replace('-', '.')) url_base = get_url(slug)
sqls, links = zip(*sqls_links) sqls, links = zip(*sqls_links)
links = [url_base + l for ll in links for l in ll] # flatten links = [url_base + l for ll in links for l in ll] # flatten
sqls, links = ['\n'.join(sorted(s)) for s in [sqls, links]] sqls, links = ['\n'.join(sorted(s)) for s in [sqls, links]]
@ -230,5 +318,5 @@ def get_sqls_desexcluir_criar(desexcluir, criar, slug):
def print_ressucitar(slug): def print_ressucitar(slug):
desexcluir, criar = get_dependencias_a_ressucitar() desexcluir, criar = get_dependencias_a_ressucitar(slug)
print(get_sqls_desexcluir_criar(desexcluir, criar, slug)) print(get_sqls_desexcluir_criar(desexcluir, criar, slug))

Loading…
Cancel
Save