Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

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!

3 respostas
solução!

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.

Ola Felipe,

Obrigado pela explicação detalhada, me ajudou muito e consegui fazer uma requisição para excluir o arquivo. Creio que eu estava errando em dois pontos do código, o primeiro na criação do dicionário data, e na passagem do parâmetro na função requests.delete.

Acho que ainda tenho um pouco de dificuldade na interpretação das documentações das Rest APIs, mesmo sendo o mais objetivo possível, às vezes não entendo o que a API está requisitando para realizar as chamadas corretamente.

Que bom que te ajudou, Fabiano! Tamo junto!