Skip to content

Commit fdf1c4d

Browse files
Update process-python.yml
1 parent 2824846 commit fdf1c4d

1 file changed

Lines changed: 90 additions & 89 deletions

File tree

.github/workflows/process-python.yml

Lines changed: 90 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -21,95 +21,96 @@ jobs:
2121
- name: Executar Script Python para Baixar e Processar
2222
run: |
2323
python -c """
24-
import requests
25-
import json
26-
import os
27-
28-
# Etapa 1: Baixar os dados
29-
print('Baixando o arquivo JSON...')
30-
url = 'https://estruturaorganizacional.dados.gov.br/doc/estrutura-organizacional/completa.json?codigoPoder=1&codigoEsfera=1&codigoUnidade=86144&retornarOrgaoEntidadeVinculados=SIM'
31-
response = requests.get(url)
32-
response.raise_for_status()
33-
source_data = response.json()
34-
35-
# Etapa 2: Pré-processar os dados em uma lista de dicionários mais simples
36-
print('Pré-processando JSON...')
37-
unidades = source_data.get('unidades', [])
38-
dados = [
39-
{
40-
'sigla': u.get('sigla', ''),
41-
'nome': u.get('nome', ''),
42-
'competencia': u.get('competencia', ''),
43-
'municipio': u.get('endereco', {}).get('municipio', ''),
44-
'uf': u.get('endereco', {}).get('uf', ''),
45-
'cep': u.get('endereco', {}).get('cep', ''),
46-
'codigoUnidade': u.get('codigoUnidade', '').split('/')[-1],
47-
'codigoUnidadePai': u.get('codigoUnidadePai', '').split('/')[-1] if u.get('codigoUnidadePai') else None
48-
}
49-
for u in unidades
50-
]
51-
52-
# Função auxiliar para encontrar o caminho completo
53-
def caminho_completo(unidade, lista_completa):
54-
caminho = []
55-
atual = unidade
56-
while atual:
57-
caminho.insert(0, atual.get('sigla') or atual.get('nome'))
58-
codigo_pai = atual.get('codigoUnidadePai')
59-
if not codigo_pai:
60-
break
61-
# Encontra o próximo pai na lista
62-
atual = next((x for x in lista_completa if x.get('codigoUnidade') == codigo_pai), None)
63-
return '/'.join(caminho)
64-
65-
# Etapa 3: Processar cada unidade para adicionar os campos finais
66-
print('Processando cada unidade...')
67-
dados_completos = []
68-
for u in dados:
69-
sigla_completa = caminho_completo(u, dados)
70-
71-
# Lógica especial para NURACs
72-
if u['sigla'].startswith('NURAC'):
73-
partes_nome = u['nome'].split(' ')
74-
cidade = partes_nome[6] if len(partes_nome) > 6 else ''
75-
estado = partes_nome[7].replace('(', '').replace(')', '') if len(partes_nome) > 7 else ''
76-
sigla_corrigida = f'NURAC {cidade} {estado}'
77-
78-
partes_caminho = sigla_completa.split('/')
79-
if len(partes_caminho) >= 3:
80-
sigla_completa_corrigida = f'{partes_caminho[0]}/{partes_caminho[1]}/{partes_caminho[2]}/{sigla_corrigida}'
81-
else:
82-
sigla_completa_corrigida = sigla_completa # Fallback
83-
else:
84-
sigla_corrigida = u['sigla']
85-
sigla_completa_corrigida = sigla_completa
86-
87-
# Adiciona os novos campos
88-
u['siglaCorrigida'] = sigla_corrigida
89-
u['siglaCompletaCorrigida'] = sigla_completa_corrigida
90-
dados_completos.append(u)
91-
92-
# Etapa 4: Salvar o JSON processado
93-
with open('estrutura-py.json', 'w', encoding='utf-8') as f:
94-
json.dump(dados_completos, f, ensure_ascii=False, indent=2)
95-
print('Arquivo estrutura-py.json gerado.')
96-
97-
# Etapa 5: Gerar o arquivo HTML
98-
print('Gerando arquivo HTML...')
99-
html_content = '''
100-
<!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Estrutura ANAC (Python)</title></head><body>
101-
<h1>Estrutura Organizacional ANAC (Gerado com Python)</h1>
102-
<table border="1"><thead><tr><th>Sigla</th><th>Sigla Completa</th><th>Nome</th><th>UF</th></tr></thead><tbody>
103-
'''
104-
for item in dados_completos:
105-
html_content += f"<tr><td>{item.get('siglaCorrigida', '')}</td><td>{item.get('siglaCompletaCorrigida', '')}</td><td>{item.get('nome', '')}</td><td>{item.get('uf', '')}</td></tr>\\n"
106-
107-
html_content += '</tbody></table></body></html>'
108-
109-
with open('estrutura-py.html', 'w', encoding='utf-8') as f:
110-
f.write(html_content)
111-
print('Arquivo estrutura-py.html gerado.')
112-
"""
24+
import requests
25+
import json
26+
import os
27+
28+
# Etapa 1: Baixar os dados
29+
print('Baixando o arquivo JSON...')
30+
url = 'https://estruturaorganizacional.dados.gov.br/doc/estrutura-organizacional/completa.json?codigoPoder=1&codigoEsfera=1&codigoUnidade=86144&retornarOrgaoEntidadeVinculados=SIM'
31+
response = requests.get(url)
32+
response.raise_for_status()
33+
source_data = response.json()
34+
35+
# Etapa 2: Pré-processar os dados em uma lista de dicionários mais simples
36+
print('Pré-processando JSON...')
37+
unidades = source_data.get('unidades', [])
38+
dados = [
39+
{
40+
'sigla': u.get('sigla', ''),
41+
'nome': u.get('nome', ''),
42+
'competencia': u.get('competencia', ''),
43+
'municipio': u.get('endereco', {}).get('municipio', ''),
44+
'uf': u.get('endereco', {}).get('uf', ''),
45+
'cep': u.get('endereco', {}).get('cep', ''),
46+
'codigoUnidade': u.get('codigoUnidade', '').split('/')[-1],
47+
'codigoUnidadePai': u.get('codigoUnidadePai', '').split('/')[-1] if u.get('codigoUnidadePai') else None
48+
}
49+
for u in unidades
50+
]
51+
52+
# Função auxiliar para encontrar o caminho completo
53+
def caminho_completo(unidade, lista_completa):
54+
caminho = []
55+
atual = unidade
56+
while atual:
57+
caminho.insert(0, atual.get('sigla') or atual.get('nome'))
58+
codigo_pai = atual.get('codigoUnidadePai')
59+
if not codigo_pai:
60+
break
61+
# Encontra o próximo pai na lista
62+
atual = next((x for x in lista_completa if x.get('codigoUnidade') == codigo_pai), None)
63+
return '/'.join(caminho)
64+
65+
# Etapa 3: Processar cada unidade para adicionar os campos finais
66+
print('Processando cada unidade...')
67+
dados_completos = []
68+
for u in dados:
69+
sigla_completa = caminho_completo(u, dados)
70+
71+
# Lógica especial para NURACs
72+
if u['sigla'].startswith('NURAC'):
73+
partes_nome = u['nome'].split(' ')
74+
cidade = partes_nome[6] if len(partes_nome) > 6 else ''
75+
estado = partes_nome[7].replace('(', '').replace(')', '') if len(partes_nome) > 7 else ''
76+
sigla_corrigida = f'NURAC {cidade} {estado}'
77+
78+
partes_caminho = sigla_completa.split('/')
79+
if len(partes_caminho) >= 3:
80+
sigla_completa_corrigida = f'{partes_caminho[0]}/{partes_caminho[1]}/{partes_caminho[2]}/{sigla_corrigida}'
81+
else:
82+
sigla_completa_corrigida = sigla_completa # Fallback
83+
else:
84+
sigla_corrigida = u['sigla']
85+
sigla_completa_corrigida = sigla_completa
86+
87+
# Adiciona os novos campos
88+
u['siglaCorrigida'] = sigla_corrigida
89+
u['siglaCompletaCorrigida'] = sigla_completa_corrigida
90+
dados_completos.append(u)
91+
92+
# Etapa 4: Salvar o JSON processado
93+
with open('estrutura-py.json', 'w', encoding='utf-8') as f:
94+
json.dump(dados_completos, f, ensure_ascii=False, indent=2)
95+
print('Arquivo estrutura-py.json gerado.')
96+
97+
# Etapa 5: Gerar o arquivo HTML
98+
print('Gerando arquivo HTML...')
99+
html_content = '''
100+
<!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Estrutura ANAC (Python)</title></head><body>
101+
<h1>Estrutura Organizacional ANAC (Gerado com Python)</h1>
102+
<table border="1"><thead><tr><th>Sigla</th><th>Sigla Completa</th><th>Nome</th><th>UF</th></tr></thead><tbody>
103+
'''
104+
for item in dados_completos:
105+
html_content += f"<tr><td>{item.get('siglaCorrigida', '')}</td><td>{item.get('siglaCompletaCorrigida', '')}</td><td>{item.get('nome', '')}</td><td>{item.get('uf', '')}</td></tr>\\n"
106+
107+
html_content += '</tbody></table></body></html>'
108+
109+
with open('estrutura-py.html', 'w', encoding='utf-8') as f:
110+
f.write(html_content)
111+
print('Arquivo estrutura-py.html gerado.')
112+
"""
113+
113114
- name: Salvar Artefatos (Python)
114115
uses: actions/upload-artifact@v4
115116
with:

0 commit comments

Comments
 (0)