con python post web github webhooks

con - dialogflow python api



¿Cómo recibo Github Webhooks en Python? (4)

Creo que este proyecto git-webhook (puedes buscarlo en github) será perfecto.

Es una plataforma git webhook con una interfaz de usuario web agradable basada en Flask + SQLAchemy + Celery + Redis + React, utilizada en la implementación / operación / mantenimiento automatizados rápidamente. Github / GitLab / Gogs / GitOsc son compatibles.

Cómo usarlo ? Es una aplicación web simple de Flask, así que impleméntala como un simple Frasco con gunicorn + nginx. También docker es compatible. La página de índice como a continuación:

(No puedo publicar un img)

Además, puedes ver un sitio web de demostración aquí . Use la cuenta de github para iniciar sesión.

Github ofrece enviar ganchos Post-recepción a una URL de su elección cuando hay actividad en su repositorio. Quiero escribir una pequeña aplicación de Python en la línea de comandos / fondo (es decir, sin GUI o webapp) en mi computadora (más adelante en un NAS), que escucha continuamente esas solicitudes POST entrantes, y una vez que se recibe una POST de Github, procesa la información JSON contenida dentro. Procesar el JSON tan pronto como lo tenga no es problema. El POST puede provenir de una pequeña cantidad de direcciones IP dadas por github; Planeo / espero especificar un puerto en mi computadora donde debería ser enviado.

El problema es que no sé lo suficiente sobre las tecnologías web para lidiar con la gran cantidad de opciones que se encuentran al buscar ... ¿uso Django, Solicitudes, sockets, Flask, microframeworks ...? No sé qué significa la mayoría de los términos implicados, y la mayoría parece que ofrecen demasiado / son demasiado grandes para resolver mi problema: simplemente estoy abrumado y no sé por dónde empezar.

La mayoría de los tutoriales sobre POST / GET que puedo encontrar parecen estar relacionados con el envío o la solicitud directa de datos desde un sitio web, pero no con la escucha continua.

Siento que el problema no es realmente difícil, y se reducirá a un par de líneas, una vez que sepa a dónde ir / cómo hacerlo. ¿Alguien puede ofrecer punteros / tutoriales / ejemplos / código de muestra?


Este es un ejemplo básico de web.py para recibir datos a través de POST y hacer algo con él (en este caso, simplemente imprimiéndolo en stdout):

import web urls = (''/.*'', ''hooks'') app = web.application(urls, globals()) class hooks: def POST(self): data = web.data() print print ''DATA RECEIVED:'' print data print return ''OK'' if __name__ == ''__main__'': app.run()

Puse algunos datos en él usando hurl.it (después de reenviar 8080 en mi enrutador), y vi el siguiente resultado:

$ python hooks.py http://0.0.0.0:8080/ DATA RECEIVED: test=thisisatest&test2=25 50.19.170.198:33407 - - [27/Jan/2013 10:18:37] "HTTP/1.1 POST /hooks" - 200 OK

Debería poder cambiar las instrucciones de impresión para su procesamiento JSON.

Para especificar el número de puerto, llame al script con un argumento adicional:

$ python hooks.py 1234


Lo primero es que la web se basa en la solicitud y la respuesta. Entonces, algo solicitará su enlace y usted responderá en consecuencia. Su aplicación de servidor escuchará continuamente en un puerto; de lo que no tienes que preocuparte.

Aquí está la versión similar en Flask (mi micro marco de elección):

from flask import Flask, request import json app = Flask(__name__) @app.route(''/'',methods=[''POST'']) def foo(): data = json.loads(request.data) print "New commit by: {}".format(data[''commits''][0][''author''][''name'']) return "OK" if __name__ == ''__main__'': app.run()

Aquí hay una ejecución de muestra, usando el ejemplo de github :

Ejecutando el servidor (el código anterior se guarda en sample.py ):

burhan@lenux:~$ python sample.py * Running on http://127.0.0.1:5000/

Aquí hay una solicitud al servidor, básicamente lo que hará Github:

burhan@lenux:~$ http POST http://127.0.0.1:5000 < sample.json HTTP/1.0 200 OK Content-Length: 2 Content-Type: text/html; charset=utf-8 Date: Sun, 27 Jan 2013 19:07:56 GMT Server: Werkzeug/0.8.3 Python/2.7.3 OK # <-- this is the response the client gets

Aquí está la salida en el servidor:

New commit by: Chris Wanstrath 127.0.0.1 - - [27/Jan/2013 22:07:56] "POST / HTTP/1.1" 200 -


Yo usaría:

https://github.com/carlos-jenkins/python-github-webhooks

Puede configurar un servidor web para usarlo, o si solo necesita ejecutar un proceso sin un servidor web, puede iniciar el servidor integrado:

python webhooks.py

Esto te permitirá hacer todo lo que dijiste que necesitas. Sin embargo, requiere un poco de configuración en su repositorio y en sus ganchos.

Tarde a la fiesta y autopromoción desvergonzada, lo siento.