Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow consumption of preconfigured httpx client #41

Open
Apxdono opened this issue Mar 29, 2024 · 0 comments
Open

Allow consumption of preconfigured httpx client #41

Apxdono opened this issue Mar 29, 2024 · 0 comments

Comments

@Apxdono
Copy link
Contributor

Apxdono commented Mar 29, 2024

Description

Today's approach for declarativex executors (both sync and async) creates new clients under the hood. This works fine as long as you are fine with basic httpx settings. Use Case section lists a number of additional features that can be unlocked if declarativex API can consume pre-configured httpx (and other) clients.

Use Case

  • Support for cookie retention between API calls
  • Support for self-signed certificates added at runtime (not via OS certificate chains)
  • Support for httpx event hooks. This is a big one since declarativex Middleware consumes transformed responses, while httpx event hook can access raw request.
  • Advanced transport usage
  • Other httpx benefits
  • Async settings

Proposed Solution

Introduce new base_client (or client) BaseClient property (similar to base_url, timeout and others) / @http argument. When supplied respective Executor uses supplied client inside _execute method instead of creating new one during each _execute call.

The drawback is that follow_redirects, http2 and proxies settings will be ignored. Users must set those inside the client, but if they opt for custom client, they kinda know what they're doing.

Alternatives

Custom executor can be used instead, but this implies creation of custom @http annotation, which is kinda ugly.

Will try to file a PR once I get spare time to work on this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant