1
resposta

Deletando arquivos do Github

Olá, estou tentando implementar uma função para excluir arquivos de um repositório. Vi na documentação que é necessário a inclusão do SHA do arquivo, mas não estou conseguindo acertar onde incluir essas informações no requests.delete().

Já tentei inserir no headers como um parâmetro adicional, como um novo dicionário de dados direto no corpo da função como mostra a documentação, mas sem sucesso.

https://docs.github.com/en/rest/repos/contents?apiVersion=2022-11-28#delete-a-file

Alguém já tentou fazer isso e poderia dar uma luz?

Obrigado!

1 resposta

Oi Fabiano!

Parece que você está no caminho certo, mas com algumas dificuldades na implementação. O processo de exclusão de arquivos do GitHub via API realmente exige a inclusão do SHA do arquivo, além de algumas outras informações que precisam ser passadas no corpo da requisição.

Vou tentar te ajudar com a sintaxe correta para usar o requests.delete() no seu caso.

Passo a passo para deletar um arquivo do GitHub via API

  1. Obtenha o SHA do arquivo: Como você já mencionou, você precisa do SHA do arquivo para deletá-lo. Para isso, você pode primeiro fazer uma requisição GET para obter as informações sobre o arquivo, incluindo o SHA.

    Aqui está um exemplo para pegar as informações de um arquivo:

    import requests
    
    url = 'https://api.github.com/repos/usuario/repo/contents/caminho/do/arquivo'
    headers = {
        'Authorization': 'token SEU_TOKEN_AQUI',
    }
    
    response = requests.get(url, headers=headers)
    
    if response.status_code == 200:
        file_info = response.json()
        sha = file_info['sha']
        print(f'SHA do arquivo: {sha}')
    else:
        print('Erro ao obter informações do arquivo:', response.status_code)
    
  2. Deletando o arquivo: Agora, com o SHA em mãos, você pode fazer a requisição DELETE para excluir o arquivo. Para isso, você vai precisar passar o SHA no corpo da requisição, junto com o nome do arquivo e o caminho completo.

    Exemplo para deletar o arquivo:

    import requests
    
    url = 'https://api.github.com/repos/usuario/repo/contents/caminho/do/arquivo'
    headers = {
        'Authorization': 'token SEU_TOKEN_AQUI',
    }
    
    # Dados necessários para deletar o arquivo
    data = {
        'message': 'Deletando o arquivo via API',
        'sha': sha,  # SHA do arquivo
        'branch': 'main',  # Se estiver utilizando uma branch diferente da main, especifique aqui
    }
    
    response = requests.delete(url, headers=headers, json=data)
    
    if response.status_code == 200:
        print('Arquivo deletado com sucesso!')
    else:
        print('Erro ao deletar o arquivo:', response.status_code)
    
  • O SHA que você pegou na etapa anterior é crucial para identificar o arquivo que você deseja excluir.
  • A chave 'message' no corpo da requisição é obrigatória e descreve a alteração que está sendo feita (neste caso, a exclusão).
  • A chave 'branch' é opcional, mas se o arquivo estiver em uma branch diferente da main, você precisa especificar qual branch.

Se você seguir esses passos, deve conseguir excluir o arquivo corretamente. Caso continue enfrentando problemas, vale a pena conferir a resposta completa da requisição para entender se está retornando algum erro adicional que pode estar ajudando a diagnosticar o problema.

Espero que isso ajude! Qualquer dúvida, só chamar.