Ich habe ein SDK für meinen Webdienst, der als eine Python-Bibliothek über PyPI verteilt wird. Meine Bibliothek verwendet requests für die Kommunikation mit dem Back-End mithilfe von typischen REST-ähnlichen Anforderungen.Anfragen in Google App Engine lokalen Entwicklungsserver verwenden
würde ich meine Bibliothek sein kompatibel mit Anwendungen, wie die auf Google App Engine (GAE) gehostet werden. Nach the GAE documentation on HTTP requests:
Anfragen zu nutzen, werden Sie beiden Anfragen und Anfragen-toolbelt mit den vendoring Anweisungen zu installieren.
Einmal installiert, verwenden Sie das requests_toolbelt.adapters.appengine Modul configure Anfragen URLFetch zu verwenden:
So folge ich dem Beispiel dort gegeben und haben dies in Hauptmodul meiner Bibliothek:
if os.getenv('SERVER_SOFTWARE', '').startswith('Google App Engine/'):
import requests_toolbelt.adapters.appengine
requests_toolbelt.adapters.appengine.monkeypatch()
Dies scheint der Trick zu sein, wenn eine Clientanwendung, die meine Bibliothek verwendet, tatsächlich auf einer App Engine-Instanz ausgeführt wird.
Wenn jedoch die Clientanwendung lokal unter Verwendung von development web server (dev_appserver.py) ausgeführt wird, gibt "Development/2.0"
zurück und der Monkeypatch wird nicht ausgeführt. Ich erhalte anschließend diese Fehler bei dem Versuch, Anfragen zu stellen:
ConnectionError: ('Connection aborted.', error(13, 'Permission denied'))
Wie kann ich erkennen, dass die Host-Anwendung für meine Bibliothek läuft entweder in Google App Engine selbst, oder in der Entwicklung Web-Server? Die Überprüfung auf "Entwicklung/2.0" scheint nicht genug diskriminierend zu sein.
Oder gibt es ein besseres allgemeines Schema beim Versand einer freigegebenen Python-Bibliothek, die Unterstützung für "typische" Netzwerkanforderungen benötigt?