-
Notifications
You must be signed in to change notification settings - Fork 14.5k
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
[Providers/HTTP] Add adapter parameter to HttpHook to allow custom requests adapters #44302
[Providers/HTTP] Add adapter parameter to HttpHook to allow custom requests adapters #44302
Conversation
Congratulations on your first Pull Request and welcome to the Apache Airflow community! If you have any issues or are unsure about any anything please check our Contributors' Guide (https://github.com/apache/airflow/blob/main/contributing-docs/README.rst)
|
1697dc2
to
7938e2b
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Welcome to Apache Airflow and thanks for your contribution!
Looks OK overall, I have some comments :)
Thank you, @shahar1, for your detailed review and valuable feedback! I’ve addressed your comments by:
Please let me know if there’s anything else I can improve. I really appreciate your time and support! |
f94eca0
to
ff2adff
Compare
Thanks :) Regarding the 2nd point - could you please explain why it makes sense to relocate the instanation of |
Thanks for the great suggestion! Moving the TCPKeepAliveAdapter to init indeed streamlines the logic—keeps get_conn focused on session setup while ensuring TCP settings are ready upfront. A cleaner and more organized approach, much appreciated! 🙌 In response to the above, I've implemented two changes in this PR:
|
Aligned the `get_conn` method with the adjustments specified in apache#44302, including refined handling of headers. Optimized and updated test cases to ensure compatibility and maintain robust test coverage.
- Added `adapter` parameter to `HttpHook` to allow custom HTTP adapters. - Modified `get_conn` to support mounting custom adapters or using TCPKeepAliveAdapter by default. - Added comprehensive tests to validate the functionality of the `adapter` parameter and its integration with `get_conn`. - Ensured all new tests pass and maintain compatibility with existing functionality.
…pter - Added missing `adapter` parameter description to the HttpHook class docstring. - Removed redundant instantiation of `TCPKeepAliveAdapter` in the `run` method since it's already instantiated in `get_conn`.
- Ensured proper mounting of TCP Keep-Alive adapter when enabled. - Improved handling of connection extras for cleaner session configuration.
Aligned the `get_conn` method with the adjustments specified in apache#44302, including refined handling of headers. Optimized and updated test cases to ensure compatibility and maintain robust test coverage.
3b5ebf1
to
93c23dc
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good to me :)
I'll be happy for an additional review though
Sure, let's have someone else take a look. Thank you for your suggestion! |
…TPAdapter - Changed the `adapter` parameter to accept only `HTTPAdapter` instead of `BaseAdapter`. - Strengthened `_set_base_url` validation to ensure base_url is constructed with stricter conditions. - Adjusted `_mount_adapters` to improve maintainability.
…TPAdapter - Changed the `adapter` parameter to accept only `HTTPAdapter` instead of `BaseAdapter`. - Strengthened `_set_base_url` validation to ensure base_url is constructed with stricter conditions. - Adjusted `_mount_adapters` to improve maintainability.
853ad14
to
151b402
Compare
The `adapter` parameter in `HttpHook` was previously required to be explicitly set to an instance of `HTTPAdapter`. This commit modifies the `__init__` method to assign a default `HTTPAdapter` when no adapter is provided. Changes: - Removed type checks for `adapter`, as default initialization guarantees correctness. - Improved code readability and reduced potential runtime errors. No functional changes beyond defaulting `adapter` to `HTTPAdapter`.
Refactored `HttpHook` to support a custom `HTTPAdapter` through the `adapter` parameter. If no adapter is provided, it defaults to `TCPKeepAliveAdapter` when `tcp_keep_alive=True`. Test: Added `test_custom_adapter` to verify correct adapter mounting.
- Adjust the length of each line of code.
- modify `assert instance` by PEP8
running |
Or |
Thanks for your suggestion! |
Thanks @jieyao-MilestoneHub ! The PR looks LGTM! I'll keep it for one or two days for folks to check. Please ping me if I forget to get back to you and merge it. |
Thank you all for taking the time to work on this together! 😊 |
Awesome work, congrats on your first merged pull request! You are invited to check our Issue Tracker for additional contributions. |
Thank you for your great first contribution :) |
…quests adapters (apache#44302) * feat(http-hook): add adapter parameter to HttpHook and enhance get_conn - Added `adapter` parameter to `HttpHook` to allow custom HTTP adapters. - Modified `get_conn` to support mounting custom adapters or using TCPKeepAliveAdapter by default. - Added comprehensive tests to validate the functionality of the `adapter` parameter and its integration with `get_conn`. - Ensured all new tests pass and maintain compatibility with existing functionality. * fix(http_hook): Update docstring and remove redundant TCPKeepAliveAdapter - Added missing `adapter` parameter description to the HttpHook class docstring. - Removed redundant instantiation of `TCPKeepAliveAdapter` in the `run` method since it's already instantiated in `get_conn`. * fix(http_hook): improve get_conn session setup and TCP adapter logic - Ensured proper mounting of TCP Keep-Alive adapter when enabled. - Improved handling of connection extras for cleaner session configuration. * feat(http): update get_conn logic and corresponding tests (apache#44302) Aligned the `get_conn` method with the adjustments specified in apache#44302, including refined handling of headers. Optimized and updated test cases to ensure compatibility and maintain robust test coverage. * refactor(http_hook): simplify HttpHook by reverting BaseAdapter to HTTPAdapter - Changed the `adapter` parameter to accept only `HTTPAdapter` instead of `BaseAdapter`. - Strengthened `_set_base_url` validation to ensure base_url is constructed with stricter conditions. - Adjusted `_mount_adapters` to improve maintainability. * refactor(http_hook): simplify HttpHook by reverting BaseAdapter to HTTPAdapter - Changed the `adapter` parameter to accept only `HTTPAdapter` instead of `BaseAdapter`. - Strengthened `_set_base_url` validation to ensure base_url is constructed with stricter conditions. - Adjusted `_mount_adapters` to improve maintainability. * Merge: new main * refactor: improve function naming and add type annotations - Changed the function prefix from `_set` to `_configure_session_from` to enhance readability and better reflect its purpose. - Added static type annotations for input parameters and return values. - Included comments to document the design rationale following coding standards. - Improved error message: replaced generic text with detailed and actionable messages. * fix: simplify the change of session - Added a variable `session` after the change of session member * fix: Adjust response format. * fix: simplify the logic * fix(hook): ensure default HTTPAdapter in HttpHook init The `adapter` parameter in `HttpHook` was previously required to be explicitly set to an instance of `HTTPAdapter`. This commit modifies the `__init__` method to assign a default `HTTPAdapter` when no adapter is provided. Changes: - Removed type checks for `adapter`, as default initialization guarantees correctness. - Improved code readability and reduced potential runtime errors. No functional changes beyond defaulting `adapter` to `HTTPAdapter`. * feat(http_hook): add support for custom adapter in initialization Refactored `HttpHook` to support a custom `HTTPAdapter` through the `adapter` parameter. If no adapter is provided, it defaults to `TCPKeepAliveAdapter` when `tcp_keep_alive=True`. Test: Added `test_custom_adapter` to verify correct adapter mounting. * fix: CI image checks / Static checks - Adjust the length of each line of code. * fix: Adjust indent style - modify `assert instance` by PEP8 * fix: ruff error about `from requests.adapters import HTTPAdapter` --------- Co-authored-by: jiao <yhocotw31016@example.com>
This PR adds an
adapter
parameter to theHttpHook
, allowing users to mount custom adapters for HTTP request handling. This enhances flexibility and supports use cases like custom retries, timeouts, and SSL handling.Summary of Changes:
adapter
parameter toHttpHook
to allow custom HTTP adapters.get_conn
to support mounting custom adapters or using TCPKeepAliveAdapter by default.adapter
parameter and its integration withget_conn
.Issue Reference:
Closes #44285
Testing and Validation:
~/providers/tests/http/hooks/test_http.py
to validate:pytest providers/tests/http/hooks/test_http.py
using breeze.pre-commit run --files providers/src/airflow/providers/http/hooks/http.py providers/tests/http/hooks/test_http.py
using breeze.Backward Compatibility:
This change is backward-compatible. The new
adapter
parameter is optional and defaults to None, preserving existing behavior.^ Add meaningful description above
Read the Pull Request Guidelines for more information.
In case of fundamental code changes, an Airflow Improvement Proposal (AIP) is needed.
In case of a new dependency, check compliance with the ASF 3rd Party License Policy.
In case of backwards incompatible changes please leave a note in a newsfragment file, named
{pr_number}.significant.rst
or{issue_number}.significant.rst
, in newsfragments.