O prompt HTTP * depende fortemente da função httpie.core.main()
para enviar solicitações HTTP reais. Alguns recursos do prompt HTTP, como a configuração de cookies de entrada, exigem que acessemos o objeto de resposta ( requests.Response
, para ser mais específico) em Python, mas httpie.core.main()
não fornece tal API. Portanto, o prompt HTTP "hacks" HTTPie com sys.settrace()
para obter o objeto de resposta retornado por httpie.core.get_response()
, como mostra o código a seguir:
https://github.com/eliangcs/http-prompt/blob/cbd092299/http_prompt/execution.py#L430
Gostaria de saber se o HTTPie poderia oferecer uma API para que os desenvolvedores acessem o objeto de resposta interna mais facilmente.
* Para quem ainda não sabe: HTTP Prompt é um wrapper que fornece uma interface interativa de HTTPie.
Sim, faz sentido - vou analisar isso. main()
poderia retornar o código de status de saída e a resposta HTTP final. E talvez os args de análise também sejam úteis para retornar também.
@eliangcs Estou fazendo uma refatoração maior e acho que seria bom ter um módulo api.py
estável e documentado para uso por ferramentas de terceiros, para que eles não precisem mexer nos componentes internos que têm a tendência de mudar com o tempo.
Você poderia piscar algo com base no que http-prompt
importa atualmente do HTTPie? Métodos vazios com args e algumas docstrings breves com valores de retorno seriam suficientes. Um bom ponto de partida seria apenas listar todas as necessidades de importação http-prompt
.
// cc @mblayman
@jkbrzt Fiz um grep sobre minha base de código. Estes são o que eu encontrei:
# 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 toca muito pouco nas APIs de HTTPie. É limitado a:
from httpie.cli import parser
from httpie.context import Environment
from httpie.output import streams
A essência do que é feito é passar requests.models.Request
para streams.build_output_stream
e chamar streams.write_stream
. Tudo isso acontece em https://github.com/mblayman/httpony/blob/master/httpony/application.py.
Ótimo, obrigado. Vou passar por isso e formalizar as coisas onde fizer sentido. Em seguida, faça alguns wrappers em httpie.api
- ou simplesmente torne esses objetos importáveis do módulo para começar.
Isso tornará explícito os usuários podem / podem depender dele e fornecer alguma garantia de estabilidade em comparação com os internos. As alterações na funcionalidade exportada de httpie.api
também devem ser abordadas no log de alterações.
Comentários muito úteis
HTTPony toca muito pouco nas APIs de HTTPie. É limitado a:
A essência do que é feito é passar
requests.models.Request
parastreams.build_output_stream
e chamarstreams.write_stream
. Tudo isso acontece em https://github.com/mblayman/httpony/blob/master/httpony/application.py.