Skip to content

Conversation

@brianjlai
Copy link
Contributor

@brianjlai brianjlai commented Nov 5, 2025

The final (or one of the final) nail in the coffin of the RFR mishap

At the root of things there are 3 main things that are being cleaned up

  • SimpleRetriever no longer have a cursor field since cursors are managed outside of the retriever in the concurrent CDK
  • SimpleRetriever no longer makes any reference to RFR using synthetic pagination cursors. This was never instantiated on components nor supported in concurrent framework
  • Retrievers no longer define state getter/setters or stream_slices() and rely on the dummy definitions on the Retriever interface. Those are kept to maintain compatibility w/ legacy classes and are not used anyway

Summary by CodeRabbit

  • Deprecations

    • Legacy stream management deprecated in favor of concurrent streaming architecture.
  • Removed Features

    • Removed cursor factory methods and stream state management APIs.
    • Removed stream state parameters from retriever methods.
  • Breaking Changes

    • State and stream slice properties now return empty or default values.
    • Internal method signatures simplified by removing state parameters.

@brianjlai brianjlai requested a review from maxi297 November 5, 2025 02:07
@github-actions github-actions bot added the chore label Nov 5, 2025
@github-actions
Copy link

github-actions bot commented Nov 5, 2025

👋 Greetings, Airbyte Team Member!

Here are some helpful tips and reminders for your convenience.

Testing This CDK Version

You can test this version of the CDK using the following:

# Run the CLI from this branch:
uvx 'git+https://github.com/airbytehq/airbyte-python-cdk.git@brian/remove_cursor_and_rfr_from_simple_retriever#egg=airbyte-python-cdk[dev]' --help

# Update a connector to use the CDK from this branch ref:
cd airbyte-integrations/connectors/source-example
poe use-cdk-branch brian/remove_cursor_and_rfr_from_simple_retriever

Helpful Resources

PR Slash Commands

Airbyte Maintainers can execute the following slash commands on your PR:

  • /autofix - Fixes most formatting and linting issues
  • /poetry-lock - Updates poetry.lock file
  • /test - Runs connector tests with the updated CDK
  • /poe build - Regenerate git-committed build artifacts, such as the pydantic models which are generated from the manifest JSON schema in YAML.
  • /poe <command> - Runs any poe command in the CDK environment

📝 Edit this welcome message.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 5, 2025

📝 Walkthrough

Walkthrough

This PR deprecates DeclarativeStream, removes legacy cursor factory methods and state management APIs from the declarative retriever stack, and transitions from cursor-based stream state handling to the concurrent DefaultStream architecture. Changes span the factory layer, retriever implementations, and test suites to eliminate stream_state parameters and cursor-related accessors.

Changes

Cohort / File(s) Summary
Deprecation & Legacy Stream
airbyte_cdk/legacy/sources/declarative/declarative_stream.py
Added deprecation decorator to DeclarativeStream class; modified get_cursor() to always return None instead of retrieving cursor from SimpleRetriever.
Factory & Type Updates
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py
Removed legacy cursor factory methods (create_datetime_based_cursor, create_incrementing_count_cursor); changed create_state_delegating_stream return type from DeclarativeStream to DefaultStream; eliminated cursor=None arguments in SimpleRetriever/LazySimpleRetriever constructor calls.
Retriever State Removal
airbyte_cdk/sources/declarative/retrievers/async_retriever.py, airbyte_cdk/sources/declarative/retrievers/retriever.py, airbyte_cdk/sources/declarative/retrievers/simple_retriever.py
Removed stream_state property accessors and setter from AsyncRetriever; converted abstract stream_slices and state methods in Retriever to concrete no-ops with deprecation notes; eliminated cursor field, stream_state parameter propagation, and state lifecycle logic from SimpleRetriever/LazySimpleRetriever across read/parse/pagination methods.
Factory Test Updates
unit_tests/sources/declarative/parsers/test_model_to_component_factory.py
Removed test blocks for DatetimeBasedCursor scenarios and client-side incremental behavior.
Retriever Test Updates
unit_tests/sources/declarative/retrievers/test_simple_retriever.py
Replaced cursor-based stream slicing with SinglePartitionRouter; adjusted method signatures to remove stream_state arguments; removed cursor initialization and state verification assertions; updated internal call patterns for _read_pages, _parse_records, and request helper methods.
Concurrent Source Test Updates
unit_tests/sources/declarative/test_concurrent_declarative_source.py
Updated mock expectations for SimpleRetriever._fetch_next_page calls to reflect new two-argument signature (previously three arguments); adjusted pagination token handling in test scenarios.
Async Integration Test Overhaul
unit_tests/sources/declarative/async_job/test_integration.py
Migrated MockSource from AbstractSource to Source; replaced DeclarativeStream-based composition with DefaultStream using DeclarativePartitionFactory, StreamSlicerPartitionGenerator, and AsyncJobPartitionRouter; introduced ConcurrentSource workflow with FinalStateCursor; added discover() method; updated stream construction to use concurrent architecture.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

  • Interdependent API removals: Changes cascade across factory, retrievers, and test layers; each layer's changes depend on understanding the cursor-to-concurrent migration pattern.
  • Significant signature changes: Stream_state removal propagates through multiple method chains (read_pages → parse_records → request helpers), requiring careful verification of call sites.
  • Test complexity: Async integration test overhaul introduces substantial new architecture (ConcurrentSource, partition routers, lazy stream slicers) that warrants extra scrutiny.
  • Risk areas:
    • SimpleRetriever/LazySimpleRetriever stream_state elimination—verify all interpolation contexts and pagination flows still work correctly without per-call state.
    • AsyncRetriever state property removal—ensure concurrent read paths don't depend on these removed accessors.
    • MockSource inheritance change and concurrent wiring in async_job test—confirm new flow maintains test coverage for async job scenarios.

Possibly related PRs

Suggested reviewers

  • maxi297
  • pnilan
  • tolik0

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 36.36% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely summarizes the main change: removal of cursors, stream slicing, and resumable full refresh from declarative Retrievers, which aligns perfectly with the changeset across multiple files.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch brian/remove_cursor_and_rfr_from_simple_retriever

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between ef07959 and c9af17d.

📒 Files selected for processing (5)
  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py (1 hunks)
  • airbyte_cdk/sources/declarative/retrievers/retriever.py (1 hunks)
  • airbyte_cdk/sources/declarative/retrievers/simple_retriever.py (8 hunks)
  • unit_tests/sources/declarative/async_job/test_integration.py (3 hunks)
  • unit_tests/sources/declarative/parsers/test_model_to_component_factory.py (0 hunks)
💤 Files with no reviewable changes (1)
  • unit_tests/sources/declarative/parsers/test_model_to_component_factory.py
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: ChristoGrab
Repo: airbytehq/airbyte-python-cdk PR: 58
File: airbyte_cdk/sources/declarative/yaml_declarative_source.py:0-0
Timestamp: 2024-11-18T23:40:06.391Z
Learning: When modifying the `YamlDeclarativeSource` class in `airbyte_cdk/sources/declarative/yaml_declarative_source.py`, avoid introducing breaking changes like altering method signatures within the scope of unrelated PRs. Such changes should be addressed separately to minimize impact on existing implementations.
📚 Learning: 2024-11-18T23:40:06.391Z
Learnt from: ChristoGrab
Repo: airbytehq/airbyte-python-cdk PR: 58
File: airbyte_cdk/sources/declarative/yaml_declarative_source.py:0-0
Timestamp: 2024-11-18T23:40:06.391Z
Learning: When modifying the `YamlDeclarativeSource` class in `airbyte_cdk/sources/declarative/yaml_declarative_source.py`, avoid introducing breaking changes like altering method signatures within the scope of unrelated PRs. Such changes should be addressed separately to minimize impact on existing implementations.

Applied to files:

  • unit_tests/sources/declarative/async_job/test_integration.py
📚 Learning: 2024-11-15T01:04:21.272Z
Learnt from: aaronsteers
Repo: airbytehq/airbyte-python-cdk PR: 58
File: airbyte_cdk/cli/source_declarative_manifest/_run.py:62-65
Timestamp: 2024-11-15T01:04:21.272Z
Learning: The files in `airbyte_cdk/cli/source_declarative_manifest/`, including `_run.py`, are imported from another repository, and changes to these files should be minimized or avoided when possible to maintain consistency.

Applied to files:

  • unit_tests/sources/declarative/async_job/test_integration.py
  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py
📚 Learning: 2025-01-14T00:20:32.310Z
Learnt from: aaronsteers
Repo: airbytehq/airbyte-python-cdk PR: 174
File: airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py:1093-1102
Timestamp: 2025-01-14T00:20:32.310Z
Learning: In the `airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py` file, the strict module name checks in `_get_class_from_fully_qualified_class_name` (requiring `module_name` to be "components" and `module_name_full` to be "source_declarative_manifest.components") are intentionally designed to provide early, clear feedback when class declarations won't be found later in execution. These restrictions may be loosened in the future if the requirements for class definition locations change.

Applied to files:

  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py
🧬 Code graph analysis (4)
unit_tests/sources/declarative/async_job/test_integration.py (11)
airbyte_cdk/sources/concurrent_source/concurrent_source.py (1)
  • ConcurrentSource (30-177)
airbyte_cdk/sources/declarative/stream_slicers/declarative_partition_generator.py (2)
  • DeclarativePartitionFactory (34-64)
  • StreamSlicerPartitionGenerator (125-148)
airbyte_cdk/sources/message/repository.py (1)
  • NoopMessageRepository (63-71)
airbyte_cdk/sources/source.py (4)
  • Source (55-95)
  • name (93-95)
  • read (36-45)
  • discover (48-52)
airbyte_cdk/sources/streams/concurrent/abstract_stream.py (5)
  • AbstractStream (17-92)
  • cursor (83-86)
  • name (50-53)
  • cursor_field (57-61)
  • as_airbyte_stream (70-73)
airbyte_cdk/sources/streams/concurrent/cursor.py (7)
  • FinalStateCursor (90-132)
  • stream_slices (82-87)
  • stream_slices (366-424)
  • cursor_field (210-211)
  • state (54-54)
  • state (109-110)
  • state (204-207)
airbyte_cdk/sources/streams/concurrent/default_stream.py (1)
  • DefaultStream (17-123)
airbyte_cdk/sources/types.py (1)
  • StreamSlice (75-169)
airbyte_cdk/sources/declarative/partition_routers/async_job_partition_router.py (2)
  • AsyncJobPartitionRouter (20-65)
  • stream_slices (39-48)
airbyte_cdk/sources/declarative/extractors/record_selector.py (3)
  • RecordSelector (25-170)
  • name (57-65)
  • name (68-70)
airbyte_cdk/sources/declarative/retrievers/async_retriever.py (1)
  • AsyncRetriever (19-96)
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py (2)
airbyte_cdk/sources/types.py (2)
  • Record (21-72)
  • StreamSlice (75-169)
airbyte_cdk/sources/streams/http/http.py (3)
  • _fetch_next_page (505-551)
  • next_page_token (167-174)
  • _read_pages (412-445)
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py (1)
airbyte_cdk/sources/streams/concurrent/default_stream.py (1)
  • DefaultStream (17-123)
airbyte_cdk/sources/declarative/retrievers/retriever.py (1)
airbyte_cdk/legacy/sources/declarative/declarative_stream.py (2)
  • state (107-108)
  • state (111-118)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (14)
  • GitHub Check: Check: source-pokeapi
  • GitHub Check: Check: source-hardcoded-records
  • GitHub Check: Check: source-intercom
  • GitHub Check: Check: source-shopify
  • GitHub Check: Check: destination-motherduck
  • GitHub Check: Pytest (Fast)
  • GitHub Check: Pytest (All, Python 3.11, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.12, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.13, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.10, Ubuntu)
  • GitHub Check: Manifest Server Docker Image Build
  • GitHub Check: SDM Docker Image Build
  • GitHub Check: Analyze (python)
  • GitHub Check: Analyze (python)

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6504148 and ef07959.

📒 Files selected for processing (9)
  • airbyte_cdk/legacy/sources/declarative/declarative_stream.py (2 hunks)
  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py (1 hunks)
  • airbyte_cdk/sources/declarative/retrievers/async_retriever.py (2 hunks)
  • airbyte_cdk/sources/declarative/retrievers/retriever.py (1 hunks)
  • airbyte_cdk/sources/declarative/retrievers/simple_retriever.py (8 hunks)
  • unit_tests/legacy/sources/declarative/test_manifest_declarative_source.py (6 hunks)
  • unit_tests/sources/declarative/parsers/test_model_to_component_factory.py (0 hunks)
  • unit_tests/sources/declarative/retrievers/test_simple_retriever.py (11 hunks)
  • unit_tests/sources/declarative/test_concurrent_declarative_source.py (6 hunks)
💤 Files with no reviewable changes (1)
  • unit_tests/sources/declarative/parsers/test_model_to_component_factory.py
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2024-11-18T23:40:06.391Z
Learnt from: ChristoGrab
Repo: airbytehq/airbyte-python-cdk PR: 58
File: airbyte_cdk/sources/declarative/yaml_declarative_source.py:0-0
Timestamp: 2024-11-18T23:40:06.391Z
Learning: When modifying the `YamlDeclarativeSource` class in `airbyte_cdk/sources/declarative/yaml_declarative_source.py`, avoid introducing breaking changes like altering method signatures within the scope of unrelated PRs. Such changes should be addressed separately to minimize impact on existing implementations.

Applied to files:

  • unit_tests/legacy/sources/declarative/test_manifest_declarative_source.py
  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py
  • unit_tests/sources/declarative/test_concurrent_declarative_source.py
📚 Learning: 2025-01-13T23:39:15.457Z
Learnt from: aaronsteers
Repo: airbytehq/airbyte-python-cdk PR: 174
File: unit_tests/source_declarative_manifest/resources/source_the_guardian_api/components.py:21-29
Timestamp: 2025-01-13T23:39:15.457Z
Learning: The CustomPageIncrement class in unit_tests/source_declarative_manifest/resources/source_the_guardian_api/components.py is imported from another connector definition and should not be modified in this context.

Applied to files:

  • unit_tests/legacy/sources/declarative/test_manifest_declarative_source.py
  • unit_tests/sources/declarative/test_concurrent_declarative_source.py
📚 Learning: 2024-11-15T01:04:21.272Z
Learnt from: aaronsteers
Repo: airbytehq/airbyte-python-cdk PR: 58
File: airbyte_cdk/cli/source_declarative_manifest/_run.py:62-65
Timestamp: 2024-11-15T01:04:21.272Z
Learning: The files in `airbyte_cdk/cli/source_declarative_manifest/`, including `_run.py`, are imported from another repository, and changes to these files should be minimized or avoided when possible to maintain consistency.

Applied to files:

  • airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py
  • airbyte_cdk/legacy/sources/declarative/declarative_stream.py
🧬 Code graph analysis (5)
airbyte_cdk/sources/declarative/retrievers/async_retriever.py (1)
airbyte_cdk/sources/types.py (1)
  • StreamSlice (75-169)
airbyte_cdk/sources/declarative/retrievers/retriever.py (4)
airbyte_cdk/legacy/sources/declarative/declarative_stream.py (2)
  • state (107-108)
  • state (111-118)
airbyte_cdk/sources/declarative/incremental/concurrent_partition_cursor.py (1)
  • state (199-219)
airbyte_cdk/sources/streams/http/http.py (2)
  • state (387-391)
  • state (394-398)
airbyte_cdk/sources/streams/core.py (2)
  • state (75-86)
  • state (90-91)
airbyte_cdk/sources/declarative/parsers/model_to_component_factory.py (1)
airbyte_cdk/sources/streams/concurrent/default_stream.py (1)
  • DefaultStream (17-123)
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py (1)
airbyte_cdk/sources/types.py (2)
  • Record (21-72)
  • StreamSlice (75-169)
unit_tests/sources/declarative/retrievers/test_simple_retriever.py (2)
airbyte_cdk/sources/declarative/partition_routers/single_partition_router.py (1)
  • SinglePartitionRouter (13-57)
airbyte_cdk/sources/declarative/retrievers/simple_retriever.py (9)
  • primary_key (280-282)
  • primary_key (285-287)
  • _next_page_token (289-308)
  • _request_params (184-202)
  • _request_body_data (204-223)
  • _parse_records (459-469)
  • read_records (438-457)
  • _read_pages (343-431)
  • _read_pages (510-533)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (15)
  • GitHub Check: Check: source-shopify
  • GitHub Check: Check: source-pokeapi
  • GitHub Check: Check: destination-motherduck
  • GitHub Check: Check: source-intercom
  • GitHub Check: Check: source-hardcoded-records
  • GitHub Check: SDM Docker Image Build
  • GitHub Check: Manifest Server Docker Image Build
  • GitHub Check: MyPy Check
  • GitHub Check: Pytest (All, Python 3.12, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.11, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.13, Ubuntu)
  • GitHub Check: Pytest (All, Python 3.10, Ubuntu)
  • GitHub Check: preview_docs
  • GitHub Check: Pytest (Fast)
  • GitHub Check: Analyze (python)
🔇 Additional comments (14)
unit_tests/legacy/sources/declarative/test_manifest_declarative_source.py (1)

1567-1567: LGTM! Test expectations correctly updated for new paginator signature.

The mock call expectations have been consistently updated across all test scenarios to reflect the removal of stream_state from the _fetch_next_page method signature. The new two-argument pattern (stream_slice, next_page_token) is correctly applied:

  • Non-paginated, non-partitioned: call({}, None)
  • Paginated, non-partitioned: call({}, None), call({}, {"next_page_token": "next"})
  • Non-paginated, partitioned: call({"partition": "0"}, None), call({"partition": "1"}, None)
  • Paginated, partitioned: call({"partition": "0"}, None), call({"partition": "0"}, {"next_page_token": "next"})

This aligns well with the broader migration from cursor-based state management to stream_slicer-based pagination.

Also applies to: 1654-1654, 1738-1738, 1825-1829, 1915-1920, 2022-2027

airbyte_cdk/legacy/sources/declarative/declarative_stream.py (2)

8-8: Clean deprecation path with clear migration guidance.

The @deprecated decorator provides users with a clear message pointing to DefaultStream as the replacement. This is good practice for guiding users through the migration.

Also applies to: 32-32


202-203: Cursor removal aligns with the PR's state management migration.

The get_cursor method now consistently returns None, effectively disabling legacy cursor-based state management. This is the expected behavior given that DeclarativeStream is deprecated and the framework is moving away from cursor-based approaches in favor of concurrent patterns.

unit_tests/sources/declarative/retrievers/test_simple_retriever.py (3)

122-125: Consistent migration to SinglePartitionRouter across all test cases.

All SimpleRetriever instantiations have been updated to use stream_slicer=SinglePartitionRouter(parameters={}) instead of cursor-based slicing. This ensures tests exercise the new stateless, slicer-driven pagination flow.

Also applies to: 147-150, 438-441, 471-474, 506-509


216-223: Method signatures correctly updated to two-argument pattern.

The request option methods (_request_params, _request_body_data, _request_headers) now correctly accept (stream_slice, next_page_token) instead of the previous three-argument pattern. The test expectations have been updated accordingly, and the error handling logic remains intact.

Also applies to: 263-270, 384-391


444-447: Internal retriever methods aligned with new pagination API.

The _read_pages and _parse_records methods now follow the simplified two-argument signature without stream_state. All test assertions and mock verifications have been updated to match this new pattern. The changes maintain test coverage while correctly reflecting the removal of state management from the retriever layer.

Also applies to: 487-487, 513-513, 697-698, 708-709

airbyte_cdk/sources/declarative/retrievers/async_retriever.py (1)

14-14: State parameter deprecated with clear migration path.

The stream_state parameter is now passed as an empty dict with a clear comment indicating deprecation. This maintains backward compatibility with record_selector.filter_and_transform while signaling the migration away from state-based interpolation contexts.

Quick question: Is the record_selector.filter_and_transform method being updated in this PR or a follow-up to fully remove the stream_state parameter? Just want to ensure we have a complete deprecation path. Wdyt?

Also applies to: 93-93

unit_tests/sources/declarative/test_concurrent_declarative_source.py (5)

3293-3293: LGTM! Mock call updated to match new signature.

The test expectation correctly reflects the removal of the stream_state parameter from SimpleRetriever._fetch_next_page. The call now expects (stream_slice, pagination_context) instead of (stream_slice, stream_state, pagination_context).


3380-3380: LGTM! Consistent mock call updates.

These changes follow the same pattern as the other updated tests, correctly removing the stream_state parameter from the expected calls.

Also applies to: 3464-3464


3551-3552: LGTM! Pagination test correctly updated.

The mock expectations properly reflect pagination handling in the new signature:

  • First page: call({}, None) - no pagination context
  • Subsequent page: call({}, {"next_page_token": "next"}) - with pagination token

3638-3639: LGTM! Partition router test correctly updated.

The expectations correctly test partitioned streams with the new signature, where partition information is passed in the stream_slice parameter and no stream_state is needed.


3742-3744: LGTM! Combined pagination and partition router test correctly updated.

The mock expectations properly reflect the interaction between pagination and partition routing in the new signature, showing multiple pages for one partition and a single page for another.

airbyte_cdk/sources/declarative/retrievers/retriever.py (2)

41-48: LGTM! State getter properly deprecated.

The removal of @abstractmethod and the no-op implementation returning an empty dict {} correctly implements the deprecation pattern. Subclasses are no longer required to implement state management at the Retriever level, which aligns with the PR's goal of moving state management to the stream level.


50-57: LGTM! State setter properly deprecated.

The removal of @abstractmethod and the no-op implementation with pass correctly implements the deprecation pattern, matching the getter's approach. This ensures backward compatibility while signaling that state management is moving away from the Retriever level.

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

PyTest Results (Fast)

3 805 tests   - 6   3 793 ✅  - 7   6m 36s ⏱️ -36s
    1 suites ±0      12 💤 +1 
    1 files   ±0       0 ❌ ±0 

Results for commit c9af17d. ± Comparison against base commit f0443aa.

This pull request removes 6 tests.
unit_tests.sources.declarative.parsers.test_model_to_component_factory ‑ test_datetime_based_cursor
unit_tests.sources.declarative.parsers.test_model_to_component_factory ‑ test_given_data_feed_and_client_side_incremental_then_raise_error
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_limit_stream_slices
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_page_increment[test_initial_sync_no_state]
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_page_increment[test_reset_with_next_page_token]
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_reset_skip_completed_stream
This pull request skips 1 test.
unit_tests.sources.declarative.test_concurrent_declarative_source ‑ test_read_with_concurrent_and_synchronous_streams

♻️ This comment has been updated with latest results.

@github-actions
Copy link

github-actions bot commented Nov 5, 2025

PyTest Results (Full)

3 808 tests   - 6   3 796 ✅  - 6   10m 46s ⏱️ -18s
    1 suites ±0      12 💤 ±0 
    1 files   ±0       0 ❌ ±0 

Results for commit c9af17d. ± Comparison against base commit f0443aa.

This pull request removes 6 tests.
unit_tests.sources.declarative.parsers.test_model_to_component_factory ‑ test_datetime_based_cursor
unit_tests.sources.declarative.parsers.test_model_to_component_factory ‑ test_given_data_feed_and_client_side_incremental_then_raise_error
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_limit_stream_slices
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_page_increment[test_initial_sync_no_state]
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_page_increment[test_reset_with_next_page_token]
unit_tests.sources.declarative.retrievers.test_simple_retriever ‑ test_simple_retriever_resumable_full_refresh_cursor_reset_skip_completed_stream

♻️ This comment has been updated with latest results.

Copy link
Contributor

@maxi297 maxi297 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! I am a bit worried about test_when_read_then_call_stream_slices_only_once not passing as I would assume we call the stream slicer at least once but I assume it is because of the implementation of MockSource that it fails, not because of a logical problem with this PR

next_page_token = {"next_page_token": initial_token} if initial_token is not None else None
return next_page_token

def _read_single_page(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So beautiful 😍

@brianjlai
Copy link
Contributor Author

I am a bit worried about test_when_read_then_call_stream_slices_only_once not passing as I would assume we call the stream slicer at least once but I assume it is because of the implementation of MockSource that it fails

@maxi297 my suspicion here is as you mentioned, the underlying implementation of MockSource uses the deprecated DeclarativeStream class and that probably leads to the method never getting called. I'll experiment with using the DefaultStream and see if that fixes the tests. It also would be better coverage of the actual code path we use during a sync

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants