Отредактируйте суть github через Python с помощью pyGithub lib

это мой первый вопрос к stackoverflow. Так что будьте любезны, если я не по теме или не точен, и помогите мне исправиться в следующий раз.

Я пытаюсь изменить существующий Github Gist через Python3, используя pyGithub. Я создал API-токен, и аутентификация работает нормально, но я изо всех сил пытаюсь отредактировать Gist. Я не мог найти подходящий пример, который прояснил бы меня.

Вот мой код:

from github import Github
g = Github("XXX")

test2 = {"description": "the description for this gist",
         "files": {"filter": {"content": "updated file contents"},
                   "Task": {"filename": "new_name.txt",
                   "content": "modified content"},
"new_file.txt": {
  "content": "a new file"
}
}
}

g.get_gist(id="b2c5668fefe1f2e80252aabf4ef4e96c").edit(test2)

Это сообщение об ошибке, которое я получаю:

Traceback (most recent call last):
File "gist.py", line 15, in <module>
g.get_gist(id="b2c5668fefe1f2e80252aabf4ef4e96c").edit(test2)
  File "/Users/DSpreitz/ogn-silentwings/venv/lib/python3.6/site-packages/github/Gist.py", line 249, in edit
  assert description is github.GithubObject.NotSet or isinstance(description, str), description
AssertionError: {'description': 'the description for this gist', 'files': {'filter': {'content': 'updated file contents'}}}

Я нашел некоторое описание библиотеки pygithub здесь: pyGithub Docu

Это Gist, который я пытаюсь изменить: Gist

Любая помощь в решении этой проблемы приветствуется.

Доминик


person Dominic    schedule 30.04.2018    source источник
comment
Ошибка утверждения, которую вы получили, является подсказкой: параметр description, полученный Gist.edit, должен быть NotSet или строкой, и это словарь (с ключом описания, что сбивает с толку). Это общий шаблон в PyGithub: типы аргументов утверждаются перед вызовом API GitHub.   -  person jacquev6    schedule 16.05.2018


Ответы (2)


Основная проблема с этим кодом заключается в том, что он передает словарь в Gist.edit. Gist.edit принимает аргументы ключевых слов.

В документация PyGithub говорится:

редактировать (описание = NotSet, файлы = NotSet)

поэтому его следует называть g.edit(description="new description", files=...). Что касается files, в той же документации говорится:

файлы — диктовка строки в github.InputFileContent.InputFileContent

поэтому параметр files может выглядеть так:

{"foo.txt": github.InputFileContent(content="bar")}

Резюме:

import github

token = "..."  # https://github.com/settings/tokens

gh = github.Github(token)
gist = gh.get_gist("f04c4b19919c750602f4d0c5f7feacbf")
gist.edit(
    description="new description",
    files={"foo.txt": github.InputFileContent(content="bar")},
)
person jacquev6    schedule 16.05.2018

Если использование pyGithub lib НЕ является жестким ограничением, я бы предложил использовать gist-клиент gifc, также написанный на python. . Итак, в вашем случае редактирование или обновление сути можно выполнить следующим образом после его установки через pip (после клонирования) -

Обновить суть

  • Итеративно редактировать все (или некоторые) файлы

    • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -i vi
      You can get the gist id from the get method from earlier
  • Изменить описание

    • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -cd "New description"
      You can get the gist id from the get method from earlier
  • Редактировать содержимое файла в интерактивном режиме в таких редакторах, как nano, vim или gedit

    • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -f file_to_update.md
  • Do both
    • gifc update ffd2f4a482684f56bf33c8726cc6ae63 -f file_to_update.md -cd "New description"
person jar    schedule 08.12.2018