-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.py
More file actions
82 lines (65 loc) · 3.1 KB
/
Copy pathMain.py
File metadata and controls
82 lines (65 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import csv
import json
import os
import dotenv
import pendulum
import requests
# Carrega as variaveis de ambiente do arquivo .env para o ambiente de execucao
dotenv.load_dotenv()
# Bloco de configuracao inicial
TIMEZONE = "America/Sao_Paulo"
PRINT_DATE_FORMAT = "YYYY-MM-DD HH:mm:ss"
# GITHUB_TOKEN deve ser um Personal Access Token (Classico ou Fine-grained) com permissao de escrita em Issues
GITHUB_TOKEN = os.getenv("GITHUB_TOKEN")
# GITHUB_USER eh o nome de usuario ou organizacao dona do repositorio
REPO_OWNER = os.getenv("GITHUB_USER")
# GITHUB_REPOSITORY eh o nome do repositorio alvo
REPO_NAME = os.getenv("GITHUB_REPOSITORY")
# Define o nome do arquivo de dados a ser consumido
CSV_FILENAME = "issues.csv"
# Constroi a URL do endpoint da API REST do GitHub para criacao de issues
url = f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/issues"
# Define os cabecalhos necessarios para a autenticacao e especificacao da API
headers = {
# O uso do prefixo Bearer garante suporte aos tokens modernos (github_pat_) e classicos (ghp_)
"Authorization": f"Bearer {GITHUB_TOKEN}",
"Accept": "application/vnd.github.v3+json",
# Define a versao especifica da API do GitHub a ser utilizada para garantir estabilidade
"X-GitHub-Api-Version": "2022-11-28"
}
def now():
return pendulum.now(tz=TIMEZONE)
try:
print(f"{now().format(PRINT_DATE_FORMAT)} - Iniciando o processamento de issues.")
# Abre o arquivo CSV em modo de leitura
with open(CSV_FILENAME, mode='r', encoding='utf-8') as csvfile:
csv_reader = csv.reader(csvfile)
# Processa o arquivo linha por linha
for row in csv_reader:
# Valida se a linha atual contem a quantidade minima de colunas esperada (Titulo, Corpo)
if len(row) >= 2:
title = row[0]
body = row[1]
# Estrutura o payload JSON exigido pela API do GitHub
issue_data = {
"title": title,
"body": body
}
# Executa a chamada POST HTTP enviando os dados da issue
response = requests.post(url, headers=headers, data=json.dumps(issue_data))
# Analisa a resposta retornada pela API
# O código HTTP 201 indica que o recurso (Issue) foi criado com sucesso
if response.status_code == 201:
print(f"Issue '{title}' criada com sucesso.")
else:
print(f"Erro ao criar issue '{title}'. Status code: {response.status_code}")
print(f"Resposta da API: {response.json()}")
else:
# Trata linhas mal formatadas ou em branco no CSV
print(f"Aviso: Linha ignorada por nao ter no minimo 2 colunas: {row}")
# Trata a exceção especifica de ausência do arquivo fonte de dados
except FileNotFoundError:
print(f"Erro: O arquivo '{CSV_FILENAME}' nao foi encontrado.")
print("Por favor, crie o arquivo no mesmo diretório deste script ou ajuste o caminho.")
finally:
print(f"{now().format(PRINT_DATE_FORMAT)} - Finalizado o processamento de issues.")