1
resposta

[Dúvida] Erro 422

import requests
import base64

class ManipulaRepositorios:

    def __init__(self,username):
        self.username = username
        self.api_base_url = 'https://api.github.com'
        self.access_token = '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'
        self.headers = {'Authorization': 'Bearer ' + self.access_token,
           'X-GitHub-Api-Version': '2022-11-28'}

    def cria_repos(self,nome_repo):
        data = {
            "name":nome_repo,
            "description": "Dados repositorios de algumas empresas",
            "private": False
        }   
        response = requests.post(f"{self.api_base_url}/user/repos", json=data, headers=self.headers)
        print(f'Status_code criação do repositório: {response.status_code}')

    def add_arquivos(self,nome_repo, nome_arquivo, caminho_arquivo):
        #codificando arquivo
        with open(caminho_arquivo, "rb") as file:
            file_content = file.read()
        encoded_content = base64.b64encode(file_content)

        #realizando o upload
        url = f"{self.api_base_url}/repos/{self.username}/{nome_repo}/contents/{nome_arquivo}"
        data = {
            "message":"Adicionando um novo arquivo",
            "content":encoded_content.decode("utf-8")
        }

        response = requests.put(url, json=data, headers=self.headers)
        print(f'status_code upload do arquivo: {response.status_code}')

#instanciando um objeto
novo_repo = ManipulaRepositorios('Guisoares28')

#criando Repositório
nome_repo = "linguagens-repositorios-empresas"
novo_repo.cria_repos(nome_repo)

#adicionando arquivos salvos no repositório criado
#novo_repo.add_arquivos(nome_repo,'linguagens_amzn.csv','venv/amazon.csv')

O meu está dando o status_code 422 e ainda não consegui identificar aonde está o erro, este erro condiz que as informações passadas não condiz, mas esta tudo correto. O erro está dando ao criar o repositorio

1 resposta

Oii, Guilherme, tudo bem?

O erro 422 aparece quando a solicitação foi bem formada, mas falhou devido a erros semânticos.

Uma coisa que você pode tentar é verificar se o nome do repositório que você está tentando criar já existe. A API do GitHub não permite a criação de repositórios com nomes duplicados. Se o nome do repositório já existir, você receberá um erro 422.

Além disso, é importante notar que o token de acesso que você está usando precisa ter as permissões corretas para criar repositórios. Se o token não tiver a permissão correta, você também receberá um erro 422.

Aqui está um exemplo de como você pode modificar seu código para lidar com esses problemas:

def cria_repos(self, nome_repo):
    # Verifica se o repositório já existe
    response = requests.get(f"{self.api_base_url}/repos/{self.username}/{nome_repo}", headers=self.headers)
    if response.status_code == 200:
        print(f'O repositório {nome_repo} já existe.')
        return

    # Cria o repositório se ele não existir
    data = {
        "name": nome_repo,
        "description": "Dados repositorios de algumas empresas",
        "private": False
    }
    response = requests.post(f"{self.api_base_url}/user/repos", json=data, headers=self.headers)
    if response.status_code == 201:
        print(f'Repositório {nome_repo} criado com sucesso.')
    else:
        print(f'Erro ao criar o repositório: {response.status_code}')

Se outra dúvida surgir, estamos aqui.

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.