L'invite HTTP* s'appuie fortement sur la fonction httpie.core.main()
pour envoyer des requêtes HTTP réelles. Certaines fonctionnalités de l'invite HTTP, comme la définition des cookies entrants, nous obligent à accéder à l'objet de réponse ( requests.Response
, pour être plus précis) en Python, mais httpie.core.main()
ne fournit pas une telle API. Ainsi, l'invite HTTP "pirate" HTTPie avec sys.settrace()
pour obtenir l'objet de réponse renvoyé par httpie.core.get_response()
, comme le montre le code suivant :
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
Je me demande si HTTPie pourrait offrir une API aux développeurs pour accéder plus facilement à l'objet de réponse interne.
* Pour ceux qui ne connaissent pas encore : HTTP Prompt est un wrapper qui fournit une interface interactive de HTTPie.
Oui, c'est logique, je vais me renseigner. main()
peut renvoyer à la fois le code d'état de sortie et la réponse HTTP finale. Et peut-être que les arguments d'analyse seraient également utiles à renvoyer.
@eliangcs Je fais une refactorisation plus importante et je pense qu'il serait bien d'avoir un module api.py
stable et documenté à utiliser par des outils tiers, afin qu'ils n'aient pas à toucher aux composants internes qui ont tendance à changer avec le temps.
Pourriez-vous peut-être flasher quelque chose en fonction de ce que http-prompt
importe actuellement depuis HTTPie ? Des méthodes vides avec des arguments et quelques brèves docstrings avec des valeurs de retour suffiraient. Un bon point de départ serait simplement de lister toutes les importations dont les http-prompt
besoin.
// cc @mblayman
@jkbrzt J'ai fait un grep sur ma base de code. Voilà ce que j'ai trouvé :
# http_prompt/cli.py
from httpie.plugins import FormatterPlugin # just to avoid cyclic import, not really used
from httpie.output.formatters.colors import Solarized256Style # to support solarized theme
# http_prompt/execution.py
from httpie.context import Environment # to construct a custom Environment and pass it to httpie_main
from httpie.core import main as httpie_main # to generate output and the response object
HTTPony touche très peu des API de HTTPie. Il est limité à :
from httpie.cli import parser
from httpie.context import Environment
from httpie.output import streams
Le cœur de ce qui est fait est de passer un requests.models.Request
à streams.build_output_stream
et d'appeler streams.write_stream
. Tout ce qui se passe dans https://github.com/mblayman/httpony/blob/master/httpony/application.py.
Grand merci. Je vais le parcourir et formaliser ces choses là où cela a du sens. Créez ensuite des wrappers dans httpie.api
— ou rendez simplement ces objets importables depuis le module pour commencer.
Cela rendra explicite que les utilisateurs peuvent/pourraient en dépendre et fournira une certaine garantie de stabilité par rapport aux internes. Les modifications apportées à la fonctionnalité httpie.api
exportée doivent également être couvertes dans le journal des modifications.
Commentaire le plus utile
HTTPony touche très peu des API de HTTPie. Il est limité à :
Le cœur de ce qui est fait est de passer un
requests.models.Request
àstreams.build_output_stream
et d'appelerstreams.write_stream
. Tout ce qui se passe dans https://github.com/mblayman/httpony/blob/master/httpony/application.py.