-
Notifications
You must be signed in to change notification settings - Fork 6
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
fix(declarative): Pass extra_fields
in global_substream_cursor
#195
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughWalkthroughThe pull request modifies the Changes
Sequence DiagramsequenceDiagram
participant GS as GlobalSubstreamCursor
participant SS as StreamSlice
GS->>SS: Create StreamSlice
SS-->>GS: StreamSlice with extra_fields
Suggested reviewers
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
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.
Actionable comments posted: 0
🧹 Nitpick comments (1)
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py (1)
131-131
: Balanced approach forgenerate_slices_from_partition
.
Great to see the same approach for passingextra_fields
here. Would you be open to adding a simple test to confirm thatextra_fields
is successfully set in these generated slices as well? wdyt?
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py
(2 hunks)
🔇 Additional comments (1)
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py (1)
115-115
: Consider verifying the presence ofextra_fields
in the partition.
Would you like to add a quick check or default behavior in caseextra_fields
is missing or unexpected in the partition? wdyt?
extra_fields
in global_substream_cursor
extra_fields
in global_substream_cursor
/autofix |
I do not see how the failing test has any connection with the code I am changing.... |
Any interest in getting this merged? |
Yep! We're backlogged, but yes interest. Let me kick the tires on CI again to see what's going on. |
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.
Actionable comments posted: 0
🧹 Nitpick comments (1)
unit_tests/sources/declarative/incremental/test_per_partition_cursor.py (1)
732-739
: Consider renaming the cursor variable to avoid shadowing.The variable
cursor
is reassigned on line 739, which shadows the previous assignment. This could be confusing to readers. What do you think about renaming the first instance tomock_cursor
to better reflect its purpose? wdyt?- cursor = ( + mock_cursor = ( MockedCursorBuilder() .with_stream_slices([{CURSOR_SLICE_FIELD: "first slice cursor value"}]) .build() ) - mocked_cursor_factory.create.return_value = cursor + mocked_cursor_factory.create.return_value = mock_cursor
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
unit_tests/sources/declarative/incremental/test_per_partition_cursor.py
(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (7)
- GitHub Check: Check: 'source-pokeapi' (skip=false)
- GitHub Check: Check: 'source-the-guardian-api' (skip=false)
- GitHub Check: Check: 'source-shopify' (skip=false)
- GitHub Check: Check: 'source-hardcoded-records' (skip=false)
- GitHub Check: Pytest (All, Python 3.11, Ubuntu)
- GitHub Check: Pytest (Fast)
- GitHub Check: Pytest (All, Python 3.10, Ubuntu)
🔇 Additional comments (1)
unit_tests/sources/declarative/incremental/test_per_partition_cursor.py (1)
754-780
: LGTM! Well-structured test for GlobalSubstreamCursor.The test effectively verifies that
extra_fields
are correctly preserved in theStreamSlice
when usingGlobalSubstreamCursor
. The assertions are comprehensive and the test setup is clear.
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.
Actionable comments posted: 0
🧹 Nitpick comments (2)
unit_tests/sources/declarative/incremental/test_per_partition_cursor.py (2)
723-751
: The test structure looks good! A few suggestions to make it even better.The test follows good practices with clear arrange-act-assert structure. Would you consider these improvements?
- Add a docstring explaining the test's purpose
- Rename the second
cursor
variable (line 732) tomock_underlying_cursor
to avoid confusion with thecursor
on line 739- Add test cases for empty or None
extra_fields
def test_per_partition_cursor_partition_router_extra_fields( mocked_cursor_factory, mocked_partition_router ): + """ + Test that PerPartitionCursor correctly preserves extra_fields from the partition router + when creating stream slices. + """ first_partition = {"first_partition_key": "first_partition_value"} mocked_partition_router.stream_slices.return_value = [ StreamSlice( partition=first_partition, cursor_slice={}, extra_fields={"extra_field": "extra_value"} ), ] - cursor = ( + mock_underlying_cursor = ( MockedCursorBuilder() .with_stream_slices([{CURSOR_SLICE_FIELD: "first slice cursor value"}]) .build() ) - mocked_cursor_factory.create.return_value = cursor + mocked_cursor_factory.create.return_value = mock_underlying_cursor
754-780
: Similar improvements could enhance this test too.The test structure is solid, but what do you think about these suggestions?
- Add a docstring explaining the test's purpose
- Rename the first
cursor
variable (line 763) tomock_underlying_cursor
for consistency- Add test cases for edge cases with empty or None
extra_fields
def test_global_cursor_partition_router_extra_fields( mocked_cursor_factory, mocked_partition_router ): + """ + Test that GlobalSubstreamCursor correctly preserves extra_fields from the partition router + when creating stream slices. + """ first_partition = {"first_partition_key": "first_partition_value"} mocked_partition_router.stream_slices.return_value = [ StreamSlice( partition=first_partition, cursor_slice={}, extra_fields={"extra_field": "extra_value"} ), ] - cursor = ( + mock_underlying_cursor = ( MockedCursorBuilder() .with_stream_slices([{CURSOR_SLICE_FIELD: "first slice cursor value"}]) .build() ) - global_cursor = GlobalSubstreamCursor(cursor, mocked_partition_router) + global_cursor = GlobalSubstreamCursor(mock_underlying_cursor, mocked_partition_router)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py
(2 hunks)unit_tests/sources/declarative/incremental/test_per_partition_cursor.py
(2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
- airbyte_cdk/sources/declarative/incremental/global_substream_cursor.py
⏰ Context from checks skipped due to timeout of 90000ms (3)
- GitHub Check: Pytest (All, Python 3.11, Ubuntu)
- GitHub Check: Pytest (All, Python 3.10, Ubuntu)
- GitHub Check: Pytest (Fast)
per_partition_cursor correctly passes
extra_fields
to StreamSlice from partition.global_substream_cursor
does not.I did not have an idea how to test this properly.
Summary by CodeRabbit
GlobalSubstreamCursor
to support additional contextual information in stream slices.extra_fields
inStreamSlice
objects for bothPerPartitionCursor
andGlobalSubstreamCursor
.