Browse Source

Reformata código com black

migracao
Marcio Mazza 6 years ago
parent
commit
ae3299e7a1
  1. 326
      sapl/legacy/scripts/ressuscita_dependencias.py

326
sapl/legacy/scripts/ressuscita_dependencias.py

@ -22,20 +22,24 @@ def _tab_legado(model):
fks_legado = {
(_tab_legado(m), campos_novos_para_antigos[f]): _tab_legado(f.related_model) # noqa
(_tab_legado(m), campos_novos_para_antigos[f]): _tab_legado(
f.related_model
) # noqa
for m in models_novos_para_antigos
for f in m._meta.fields
if f in campos_novos_para_antigos and f.related_model}
if f in campos_novos_para_antigos and f.related_model
}
# acrescenta mapeamentos que não existem em campos_novos_para_antigos
for tabela_origem, campo, tabela_destino in [
['autor', 'cod_parlamentar', 'parlamentar'],
['autor', 'cod_comissao', 'comissao'],
['autor', 'cod_partido', 'partido']]:
["autor", "cod_parlamentar", "parlamentar"],
["autor", "cod_comissao", "comissao"],
["autor", "cod_partido", "partido"],
]:
fks_legado[(tabela_origem, campo)] = tabela_destino
urls = '''
urls = """
autor /sistema/autor
cargo_comissao /sistema/comissao/cargo
legislatura /sistema/parlamentar/legislatura
@ -71,91 +75,109 @@ 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))
def get_tabela_campo_tipo_proposicao(tip_proposicao):
[(ind_mat_ou_doc,)] = exec_legado('''
[(ind_mat_ou_doc,)] = exec_legado(
"""
select ind_mat_ou_doc from tipo_proposicao where tip_proposicao = {};
'''.format(tip_proposicao))
if ind_mat_ou_doc == 'M':
return 'tipo_materia_legislativa', 'tip_materia'
elif ind_mat_ou_doc == 'D':
return 'tipo_documento', 'tip_documento'
""".format(
tip_proposicao
)
)
if ind_mat_ou_doc == "M":
return "tipo_materia_legislativa", "tip_materia"
elif ind_mat_ou_doc == "D":
return "tipo_documento", "tip_documento"
else:
raise(Exception('ind_mat_ou_doc inválido'))
raise (Exception("ind_mat_ou_doc inválido"))
CAMPOS_ORIGEM_PARA_ALVO = {
'cod_unid_tram_dest': 'cod_unid_tramitacao',
'cod_unid_tram_local': 'cod_unid_tramitacao',
'tip_id_basica': 'tip_materia',
'cod_local_origem_externa': 'cod_origem',
"cod_unid_tram_dest": "cod_unid_tramitacao",
"cod_unid_tram_local": "cod_unid_tramitacao",
"tip_id_basica": "tip_materia",
"cod_local_origem_externa": "cod_origem",
}
def get_excluido(fk):
tabela_origem, campo, valor = [fk[k] for k in ('tabela', 'campo', 'valor')]
tabela_origem, campo, valor = [fk[k] for k in ("tabela", "campo", "valor")]
if tabela_origem == 'tipo_proposicao':
tip_proposicao = fk['pk']['tip_proposicao']
if tabela_origem == "tipo_proposicao":
tip_proposicao = fk["pk"]["tip_proposicao"]
tabela_alvo, campo = get_tabela_campo_tipo_proposicao(tip_proposicao)
elif tabela_origem == 'proposicao' and campo == 'cod_mat_ou_doc':
[(ind_mat_ou_doc,)] = exec_legado('''
elif tabela_origem == "proposicao" and campo == "cod_mat_ou_doc":
[(ind_mat_ou_doc,)] = exec_legado(
"""
select ind_mat_ou_doc from
proposicao p inner join tipo_proposicao t
on p.tip_proposicao = t.tip_proposicao
where cod_proposicao = {};
'''.format(fk['pk']['cod_proposicao']))
if ind_mat_ou_doc == 'M':
tabela_alvo, campo = 'materia_legislativa', 'cod_materia'
elif ind_mat_ou_doc == 'D':
tabela_alvo, campo = 'documento_acessorio', 'cod_documento'
""".format(
fk["pk"]["cod_proposicao"]
)
)
if ind_mat_ou_doc == "M":
tabela_alvo, campo = "materia_legislativa", "cod_materia"
elif ind_mat_ou_doc == "D":
tabela_alvo, campo = "documento_acessorio", "cod_documento"
else:
raise(Exception('ind_mat_ou_doc inválido'))
raise (Exception("ind_mat_ou_doc inválido"))
else:
tabela_alvo = fks_legado[(tabela_origem, campo)]
# troca nome de campo pelo correspondente na tabela alvo
campo = CAMPOS_ORIGEM_PARA_ALVO.get(campo, campo)
sql = 'select ind_excluido, t.* from {} t where {} = {}'.format(
tabela_alvo, campo, valor)
sql = "select ind_excluido, t.* from {} t where {} = {}".format(
tabela_alvo, campo, valor
)
res = list(exec_legado(sql))
return tabela_origem, campo, valor, tabela_alvo, res
def get_desc_materia(cod_materia):
sql = '''
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)
""".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)
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']]
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']
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'])])
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()
@ -163,13 +185,12 @@ def get_apaga_materias_de_proposicoes(fks, slug):
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)
links = "\n".join([get_link_proposicao(p, slug) for p in cods_proposicoes])
sqls = "\n".join(sqls)
if not sqls:
return ''
return ""
else:
return '''
return """
/* REFERÊNCIAS A MATÉRIAS APAGADAS DE PROPOSIÇÕES
ATENÇÃO
@ -192,60 +213,76 @@ Para facilitar sua conferência, seguem os links para as proposições envolvida
{}
'''.format(table.draw(), links, sqls)
""".format(
table.draw(), links, sqls
)
def get_dependencias_a_ressuscitar(slug):
ocorrencias = yaml.load(
Path(DIR_REPO.child('ocorrencias.yaml').read_file()))
fks_faltando = ocorrencias.get('fk')
Path(DIR_REPO.child("ocorrencias.yaml").read_file())
)
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']
fk
for fk in fks_faltando
if fk["tabela"] == "proposicao" and fk["campo"] == "cod_materia"
]
preambulo = get_apaga_materias_de_proposicoes(
proposicoes_para_materia, slug)
proposicoes_para_materia, slug
)
propagacoes = {(o, c) for t, o, c in PROPAGACOES_DE_EXCLUSAO}
fks_faltando = [fk for fk in fks_faltando
if fk not in proposicoes_para_materia
and (fk['tabela'], fk['campo']) not in propagacoes]
fks_faltando = [
fk
for fk in fks_faltando
if fk not in proposicoes_para_materia
and (fk["tabela"], fk["campo"]) not in propagacoes
]
excluidos = [get_excluido(fk) for fk in fks_faltando]
desexcluir, criar = [
set([(tabela_alvo, campo, valor)
for tabela_origem, campo, valor, tabela_alvo, res in excluidos
if condicao(res)])
set(
[
(tabela_alvo, campo, valor)
for tabela_origem, campo, valor, tabela_alvo, res in excluidos
if condicao(res)
]
)
for condicao in (
# o registro existe e ind_excluido == 1
lambda res: res and res[0][0] == 1,
# o registro não existe
lambda res: not res
)]
lambda res: not res,
)
]
return preambulo, desexcluir, criar
# deve ser idempotente pois é usada na criação de autor
# por isso o ON DUPLICATE KEY UPDATE
SQL_INSERT_TIPO_AUTOR = '''
SQL_INSERT_TIPO_AUTOR = """
insert into tipo_autor (tip_autor, des_tipo_autor, ind_excluido)
values ({}, "DESCONHECIDO", 0) ON DUPLICATE KEY UPDATE ind_excluido = 0;
'''
"""
# deve ser idempotente pois é usada na criação de comissao
# por isso o ON DUPLICATE KEY UPDATE
SQL_INSERT_TIPO_COMISSAO = '''
SQL_INSERT_TIPO_COMISSAO = """
insert into tipo_comissao (tip_comissao, nom_tipo_comissao, sgl_natureza_comissao, sgl_tipo_comissao, des_dispositivo_regimental, ind_excluido)
values ({}, "DESCONHECIDO", "P", "DESC", NULL, 0)
ON DUPLICATE KEY UPDATE ind_excluido = 0;
'''
"""
SQLS_CRIACAO = [
('tipo_proposicao', '''
(
"tipo_proposicao",
"""
insert into tipo_materia_legislativa (
tip_materia, sgl_tipo_materia, des_tipo_materia, ind_num_automatica,
quorum_minimo_votacao, ind_excluido)
@ -255,93 +292,137 @@ SQLS_CRIACAO = [
tip_proposicao, des_tipo_proposicao, ind_mat_ou_doc, tip_mat_ou_doc,
nom_modelo, ind_excluido)
values ({}, "DESCONHECIDO", "M", 0, "DESCONHECIDO", 0);
''', ['tipo_materia_legislativa', 0]
),
('tipo_resultado_votacao', '''
""",
["tipo_materia_legislativa", 0],
),
(
"tipo_resultado_votacao",
"""
insert into tipo_resultado_votacao (
tip_resultado_votacao, nom_resultado, ind_excluido)
values ({}, "DESCONHECIDO", 0);
'''),
('tipo_autor', SQL_INSERT_TIPO_AUTOR),
('unidade_tramitacao', '''
""",
),
("tipo_autor", SQL_INSERT_TIPO_AUTOR),
(
"unidade_tramitacao",
"""
insert into unidade_tramitacao (
cod_unid_tramitacao, cod_comissao, cod_orgao, cod_parlamentar, ind_excluido)
values ({}, NULL, NULL, 0, 0);
'''),
('autor', SQL_INSERT_TIPO_AUTOR.format(0) + '''
""",
),
(
"autor",
SQL_INSERT_TIPO_AUTOR.format(0)
+ """
insert into autor (
cod_autor, cod_partido, cod_comissao, cod_parlamentar, tip_autor,
nom_autor, des_cargo, col_username, ind_excluido)
values ({}, 0, 0, 0, 0, "DESCONHECIDO", "DESCONHECIDO", NULL, 0);
'''),
('tipo_documento', '''
""",
),
(
"tipo_documento",
"""
insert into tipo_documento (tip_documento, des_tipo_documento, ind_excluido)
values ({}, "DESCONHECIDO", 0);
'''),
('partido', '''
""",
),
(
"partido",
"""
insert into partido (cod_partido, sgl_partido, nom_partido, dat_criacao, dat_extincao, ind_excluido)
values ({}, "DESC", "DESCONHECIDO", NULL, NULL, 0);
'''),
('legislatura', '''
""",
),
(
"legislatura",
"""
insert into legislatura (num_legislatura, dat_inicio, dat_fim, dat_eleicao, ind_excluido)
values ({}, "1/1/1", "1/1/1", "1/1/1", 0);
'''),
('cargo_mesa', '''
""",
),
(
"cargo_mesa",
"""
insert into cargo_mesa (cod_cargo, des_cargo, ind_unico, ind_excluido)
values ({}, "DESCONHECIDO", 0, 0);
'''),
('orgao', '''
""",
),
(
"orgao",
"""
insert into orgao (cod_orgao, nom_orgao, sgl_orgao, ind_unid_deliberativa, end_orgao, num_tel_orgao, ind_excluido)
values ({}, "DESCONHECIDO", "DESC", 0, NULL, NULL, 0);
'''),
('origem', '''
""",
),
(
"origem",
"""
insert into origem (cod_origem, sgl_origem, nom_origem, ind_excluido)
values ({}, "DESC", "DESCONHECIDO", 0);
'''),
('tipo_comissao', SQL_INSERT_TIPO_COMISSAO),
('comissao', SQL_INSERT_TIPO_COMISSAO.format(0) + '''
""",
),
("tipo_comissao", SQL_INSERT_TIPO_COMISSAO),
(
"comissao",
SQL_INSERT_TIPO_COMISSAO.format(0)
+ """
insert into comissao (cod_comissao, tip_comissao, nom_comissao, sgl_comissao, dat_criacao,
ind_unid_deliberativa, ind_excluido)
values ({}, 0, "DESCONHECIDO", "DESC", "1-1-1", 0, 0);
'''),
('parlamentar', '''
""",
),
(
"parlamentar",
"""
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', '''
""",
),
(
"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}
SQLS_CRIACAO = {
k: (dedent(sql.strip()), extras) for k, sql, *extras in SQLS_CRIACAO
}
def criar_sessao_legislativa(campo, valor):
assert campo == 'cod_sessao_leg'
assert campo == "cod_sessao_leg"
[(num_legislatura,)] = exec_legado(
'select min(num_legislatura) from legislatura where ind_excluido <> 1')
return '''
"select min(num_legislatura) from legislatura where ind_excluido <> 1"
)
return """
insert into sessao_legislativa (
cod_sessao_leg, num_legislatura, num_sessao_leg, tip_sessao_leg,
dat_inicio, dat_fim, dat_inicio_intervalo, dat_fim_intervalo,
ind_excluido) values ({}, {}, 0, "O",
"1900-01-01", "1900-01-02", "1900-01-01", "1900-01-02", 0);
'''.format(valor, num_legislatura)
""".format(
valor, num_legislatura
)
def get_link(tabela_alvo, valor, slug):
url_base = get_url(slug)
return 'http://{}{}/{}'.format(url_base, urls[tabela_alvo], valor)
return "http://{}{}/{}".format(url_base, urls[tabela_alvo], valor)
def get_sql_desexcluir(tabela_alvo, campo, valor, slug):
sql = 'update {} set ind_excluido = 0 where {} = {};'.format(
tabela_alvo, campo, valor)
sql = "update {} set ind_excluido = 0 where {} = {};".format(
tabela_alvo, campo, valor
)
return sql, [get_link(tabela_alvo, valor, slug)]
def get_sql_criar(tabela_alvo, campo, valor, slug):
if tabela_alvo == 'sessao_legislativa':
if tabela_alvo == "sessao_legislativa":
sql = criar_sessao_legislativa(campo, valor)
extras = []
else:
@ -353,7 +434,7 @@ def get_sql_criar(tabela_alvo, campo, valor, slug):
return sql, links
TEMPLATE_RESSUSCITADOS = '''{}
TEMPLATE_RESSUSCITADOS = """{}
/* RESSUSCITADOS
@ -371,11 +452,11 @@ Ao tentar excluir um registro usado em outras partes do sistema, você verá uma
*/
{}
'''
"""
def get_url(slug):
return 'sapl.{}.leg.br'.format(slug.replace('-', '.'))
return "sapl.{}.leg.br".format(slug.replace("-", "."))
def sem_repeticoes_mantendo_ordem(sequencia):
@ -383,24 +464,31 @@ def sem_repeticoes_mantendo_ordem(sequencia):
def get_sqls_desexcluir_criar(preambulo, desexcluir, criar, slug):
sqls_links = [get_sql(*(args + (slug,)))
for itens, get_sql in ((desexcluir, get_sql_desexcluir),
(criar, get_sql_criar))
for args in itens]
sqls_links = [
get_sql(*(args + (slug,)))
for itens, get_sql in (
(desexcluir, get_sql_desexcluir),
(criar, get_sql_criar),
)
for args in itens
]
if not sqls_links:
return ''
return ""
else:
sqls, links = zip(*sqls_links)
sqls = [dedent(s.strip()) + ';'
for sql in sqls
for s in sql.split(';') if s.strip()]
sqls = [
dedent(s.strip()) + ";"
for sql in sqls
for s in sql.split(";")
if s.strip()
]
sqls = sem_repeticoes_mantendo_ordem(sqls)
links = (l for ll in links for l in ll) # flatten
links = sem_repeticoes_mantendo_ordem(links)
sqls, links = ['\n'.join(sorted(s)) for s in [sqls, links]]
sqls, links = ["\n".join(sorted(s)) for s in [sqls, links]]
return TEMPLATE_RESSUSCITADOS.format(preambulo, links, sqls)
@ -410,8 +498,8 @@ def get_ressuscitar(slug):
def get_slug():
arq = DIR_DADOS_MIGRACAO.child('siglas_para_slugs.yaml')
with open(arq, 'r') as arq:
arq = DIR_DADOS_MIGRACAO.child("siglas_para_slugs.yaml")
with open(arq, "r") as arq:
siglas_para_slugs = yaml.load(arq)
sigla = NOME_BANCO_LEGADO[-3:]
return siglas_para_slugs[sigla]
@ -422,4 +510,4 @@ def adiciona_ressuscitar():
if sqls.strip():
arq_ajustes_pre_migracao = get_arquivo_ajustes_pre_migracao()
conteudo = arq_ajustes_pre_migracao.read_file()
arq_ajustes_pre_migracao.write_file('{}\n{}'.format(conteudo, sqls))
arq_ajustes_pre_migracao.write_file("{}\n{}".format(conteudo, sqls))

Loading…
Cancel
Save