Skip to content

Commit 5cf1c01

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

1 file changed

Lines changed: 93 additions & 91 deletions

File tree

.github/workflows/process-python.yml

Lines changed: 93 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -18,99 +18,101 @@ jobs:
1818
- name: Instalar dependências
1919
run: pip install requests
2020

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

0 commit comments

Comments
 (0)