Как создать (обновить) файл в репозитории GitHub, используя GitHub API и запросы Python? - PullRequest
0 голосов
/ 13 апреля 2019

Я создаю новый файл в публичном репозитории GitHub, используя python. Когда я пытаюсь сделать это:

import json
import requests

with open('README.md', 'r') as f:
    content = f.read()
    payload = {"message": "Add text.txt",
               "author": {"name": name,"email": email},
               "content": content}
    result = requests.put("https://api.github.com/repos/<GitHubLogin>/<Repo>/contents/README.md", 
                           auth=(name, password), 
                           json=payload)
    print(result.json())

Я получаю "{'message': 'содержимое недействительно Base64', ....}"

Если я попытаюсь сделать это:

import base64 
import json
import requests

with open('README.md', 'r') as f:
    content = f.read()
    content = bytes(content, "utf-8")
    contnet = base64.b64encode(content)
    payload = {"message": "Add text.txt",
               "author": {"name": name,"email": email},
               "content": content}
    result = requests.put("https://api.github.com/repos/<GitHubLogin>/<Repo>/contents/README.md", 
                          auth=(name, password), 
                          json=payload)
    print(result.json())         

Я получаю

Traceback (most recent call last)
     19     result = requests.put("https://api.github.com/repos/VadymKhodak/tester/contents/README.md", 
     20                           auth=(name, password),
---> 21                           json=payload)

TypeError: Object of type 'bytes' is not JSON serializable

Как решить эту проблему?

1 Ответ

0 голосов
/ 13 апреля 2019

Я решаю эту проблему !!!

ENCODING = 'utf-8'
with open('README.md', 'rb') as f:
    byte_content = open_file.read()
    base64_bytes = base64.b64encode(byte_content)
    base64_string = base64_bytes.decode(ENCODING)
    payload = {"message": "Add text.txt",
               "author": {"name": name,"email": email},
               "content": base64_string}
    result = requests.put("https://api.github.com/repos/<GitHubLogin>/<Repo>/contents/README.md", 
                          auth=(name, password), 
                          json=payload)
    print(result.json())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...