diff --git a/sapl/legacy/scripts/ressuscita_dependencias.py b/sapl/legacy/scripts/ressuscita_dependencias.py index 5e12efc01..bc5faf2e5 100644 --- a/sapl/legacy/scripts/ressuscita_dependencias.py +++ b/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))