Biblioteca de Python más adecuada para Github API v3 [cerrado]

85

Estoy buscando una biblioteca de Python para Github APIv3 adecuada para mí.

Encontré una biblioteca (python-github3) mencionada en los documentos de la API de GH . Después de jugar con él en ipython durante una o dos horas, me pareció realmente poco intuitivo explorar / trabajar con él. Miré un poco más y descubrí que hay un buen número de personas que al menos intentan escribir una biblioteca así. Los de aspecto más prometedor (de un vistazo) son PyGithub y otro python-github3 , que aparentemente es diferente al primero.

Antes de pasar los siguientes días probando consecutivamente biblioteca tras biblioteca, quería preguntarle a la comunidad SO si existe una opción obvia, definitiva y aceptada para esa biblioteca.

Lo que no me gustó de la primera biblioteca fue la forma poco intuitiva (para mí) de obtener datos: algunas cosas se obtienen como atributos, otras se obtienen como valor de retorno de un método, ese valor de retorno es un objeto complicado que debe ser paginado e iterado, etc.

En ese sentido, PyGithub parece más atractivo a primera vista: profundice claramente en una jerarquía de objetos y luego llegue al atributo que contiene lo que desea:

for repo in g.get_user().get_repos(): print repo.name

Entonces, ¿alguna perla de sabiduría para compartir? Sé que no tengo las habilidades suficientes para juzgar rápidamente la calidad de la biblioteca, por eso me dirijo a la comunidad SO.

editar: fwiw, terminé usando PyGithub . Funciona bien y el autor es muy receptivo a los comentarios y los informes de errores. :-)

Christoph
fuente
Podría valer la pena preguntarle a algunos del equipo de github.
Daenyth
6
fwiw, terminé usando PyGithub. Funciona bien y el autor es muy receptivo a los comentarios y los informes de errores. :-)
Christoph
Ordené todas las alternativas por estrellas en GitHub, comparé los resultados con esta respuesta y elegí PyGithub. Es compatible con Python 3, parece que está bien documentado ... No tengo tiempo para probarlos todos y no tengo otra forma de tomar mi decisión.
astrojuanlu

Respuestas:

76

Como mencionó que es un programador principiante de Python, le sugiero que intente usar la API JSON sin ninguna biblioteca Github primero. Realmente no es tan difícil y lo ayudará mucho más adelante en su vida de programación, ya que el mismo enfoque se puede aplicar a cualquier API JSON. Especialmente si parece que probar las bibliotecas llevará días.

No estoy diciendo que alguna biblioteca no sea más fácil de usar, solo digo que el pequeño esfuerzo adicional para usar la API directamente podría valer la pena a largo plazo. Al menos te ayudará a entender por qué algunas de esas bibliotecas parecen "poco intuitivas" (como dijiste).

Ejemplo simple para obtener el tiempo de creación del repositorio de django:

import requests
import json
r = requests.get('https://api.github.com/repos/django/django')
if(r.ok):
    repoItem = json.loads(r.text or r.content)
    print "Django repository created: " + repoItem['created_at']

Esto está utilizando la biblioteca de solicitudes popular . En su código, naturalmente, también deberá manejar los casos de error.

Si necesita acceso con autenticación, será un poco más complejo.

Lycha
fuente
11
+1 por mencionar requests, que no había encontrado anteriormente. Parece genial.
larsks
por cierto, esto debería ser r.content, no r.text(el objeto 'Respuesta' no tiene atributo 'texto')
Christoph
@Christoph r.textdebería funcionar si la respuesta es JSON. r.contentdevuelve los bytes directamente sin decodificarlos. La biblioteca de solicitudes parece usar una (r.text or r.content)frase internamente , tal vez usted también debería hacerlo. No estoy seguro de por qué no puede ver la textpropiedad.
Lycha
Bueno, no sé qué está pasando, pero puse su ejemplo original en ipython como está (excepto para corregir la sangría destrozada), y obtuveAttributeError: 'Response' object has no attribute 'text'
Christoph
Si digo json.loads(r.content or r.text)en el editado, funciona por cierto.
Christoph
31

Al final, terminé usando PyGithub . Funciona bien y el autor es muy receptivo a los comentarios y los informes de errores. :-)

(Adaptado de mi edición a la pregunta original, para una mejor visibilidad)

Christoph
fuente
15

La documentación es horrible para PyGitHub, pero el producto es excelente. Aquí hay una muestra rápida para recuperar un archivo, cambiarlo con un nuevo comentario al comienzo del archivo y volver a confirmarlo

from github import Github
gh = Github(login_or_token='.....', base_url='...../api/v3')
user = gh.get_user()
repo = user.get_repo("RepoName")
file = repo.get_file_contents("/App/forms.py")
decoded_content = "# Test " + "\r\n" + file.decoded_content
repo.update_file("/"RepoName"/forms.py", "Commit Comments", decoded_content, file.sha)
Steve
fuente
2
¿Lo es? No lo he usado en años, pero afaik todavía se mantiene, ¿tal vez abra un problema sobre esto? Por cierto, PyGithub es uno de los pocos ejemplos de una transferencia de mantenimiento exitosa, donde el creador original ya no tuvo tiempo y pidió voluntarios .
Christoph
2
Gracias por este ejemplo, no entiendo cómo alguien puede pasar meses desarrollando su proyecto y no se molesta en escribir un par de párrafos que describen cómo usarlo.
serg
Encontré que la documentación en pygithub.readthedocs.io/en/latest funcionó bien para lo que necesitaba hacer. Es posible que la documentación no esté bien mantenida para las funciones más recientes, y puede que no contenga todos los ejemplos que quería (Google se encargó del resto), pero funcionó bien para mí.
aschultz