feat(source-float): add reports-people and reports-projects streams - #79087
feat(source-float): add reports-people and reports-projects streams#79087Pradip (masterpradipg) wants to merge 10 commits into
Conversation
|
Note 📝 PR Converted to Draft More info...Thank you for creating this PR. As a policy to protect our engineers' time, Airbyte requires all PRs to be created first in draft status. Your PR has been automatically converted to draft status in respect for this policy. As soon as your PR is ready for formal review, you can proceed to convert the PR to "ready for review" status by clicking the "Ready for review" button at the bottom of the PR page. To skip draft status in future PRs, please include |
👋 Welcome to Airbyte!Thank you for your contribution from masterpradipg/airbyte! We're excited to have you in the Airbyte community. If you have any questions, feel free to ask in the PR comments or join our Slack community. 💡 Show Tips and TricksPR Slash CommandsAs needed or by request, Airbyte Maintainers can execute the following slash commands on your PR:
Tips for Working with CI
📚 Show Repo GuidanceHelpful Resources
|
249688c to
72327c7
Compare
…eams Resolve conflicts in source-float metadata.yaml and float.md against upstream dependency bumps (0.0.47 -> 0.0.56): - keep dockerImageTag 0.1.0 for the new reports streams - keep the 0.1.0 changelog entry above the upstream dependency rows
|
↪️ Triggering Reason: PR is ready for review and has not had an AI review yet; review is the next pipeline step. |
Reviewing PR for connector safety and quality.
|
🛡️ AI PR Review Report🔴 Review Action: REQUEST CHANGES
🔶 Risk Level: 2/5Additive-only change: two new report streams, one new optional 🔧 Remediation RequiredTest Coverage (enforced, FAIL) Add at least one test that validates the new behavior, e.g. a mock-server / unit test under
Live / E2E Tests (UNKNOWN) Code Hygiene (WARNING, non-blocking) 📋 PR DetailsConnector(s): 🔍 Gate Evaluation DetailsGate-by-Gate Analysis
Spec Comparison (
📚 Evidence ConsultedEvidence
❓ How to RespondResolving a Failing GateEach non-PASS gate above lists concrete remediation. Apply it, push, then re-run Written explanations do not change a gate verdict. If you believe a gate is a false positive or it cannot be remediated as written, request review from a human maintainer and explain the situation to them in a PR comment — a human reviewer can approve or merge over a bot FAIL. Never edit the PR description to argue with the bot; the description is how reviewers learn what the PR does. |
…rce-float-add-reports-streams
…jects Addresses the AI PR review Test Coverage gate on airbytehq#79087: source-float had no unit_tests project at all. Covers the behavior the two new report streams introduce: - root-key extraction (`people` / `projects`) via DpathExtractor, including sibling keys in the payload and null-valued fields - `start_date` trimmed from the config date-time to `YYYY-MM-DD`, `end_date` taken from config and defaulting to today via `now_utc()` - NoPagination: exactly one request, no `page` / `per-page` params - bearer auth, primary keys, full-refresh-only, inline schema vs emitted record - `end_date` declared optional in the spec, and the 16 pre-existing streams still discoverable Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…nd harden the new tests - Both report streams now carry start_date/end_date on every record via AddFields, using the same expressions as the request parameters - the aggregates are meaningless downstream without the period they cover, and the values change between syncs as the schedule changes. - Docs: report streams return one aggregated snapshot row per person or project for the configured range; full refresh overwrite recommended; end_date must not precede start_date. - Tests: the no-pagination test now fails fast instead of hanging if a paginator is ever added; 19 redundant per-field tests collapsed into a strict full-record equality round-trip; conftest owns the manifest/source helpers; unit_tests/__init__.py removed so conftest imports resolve (package-style unit_tests break pytest's conftest import path); wk_day_hrs fixture matches the documented shape.
|
Pradip (@masterpradipg) thanks for a genuinely well-built contribution - the stream definitions match Float's spec exactly (we verified every path, parameter, root key and all 19 schema fields against the swagger source behind developer.float.com), the primary keys are valid (the reports return one aggregated row per person/project for the whole range), and the tests you added after the review bot's remediation are properly discriminating - we mutation-tested them and every wrong manifest value was caught. We pushed one commit on top (
Two pre-existing gaps we noticed but deliberately left out of this PR, in case you want follow-ups: Float documents a required Everything is green on the pushed head - unit tests (33), lint, and the connector QA checks. If the three items above look right to you, we will approve. |
|
↪️ Triggering Reason: The most recent AI review marker (FAIL) was recorded for |
Reviewing PR for connector safety and quality.
|
🛡️ AI PR Review Report🔴 Review Action: REQUEST CHANGES
🔶 Risk Level: 2/5Additive-only change in a single connector: two new full-refresh report streams, one new optional spec field, and a minor version bump; no existing stream, schema, spec requirement, or state format is touched. 🔧 Remediation RequiredPR Hygiene — unresolved human reviewer feedback Baz (@bazarnov)'s review comment (2026-08-13) explicitly asks the author to confirm three changes pushed on top of the original scope ( → Reply to that comment confirming (or objecting to) the three items, then re-run Live / E2E Tests — UNKNOWN (not blocking) No 📋 PR DetailsConnector(s): This is a re-run: the prior review (FAIL, 🔍 Gate Evaluation DetailsGate-by-Gate Analysis
📚 Evidence ConsultedEvidence
❓ How to RespondResolving a Failing GateEach non-PASS gate above lists concrete remediation. Apply it, push, then re-run Written explanations do not change a gate verdict. If you believe a gate is a false positive or it cannot be remediated as written, request review from a human maintainer and explain the situation to them in a PR comment — a human reviewer can approve or merge over a bot FAIL. Never edit the PR description to argue with the bot; the description is how reviewers learn what the PR does. |
…rce-float-add-reports-streams
|
Baz (@bazarnov) Thanks for the thorough review and for pushing 0a7702a, I have gone through all |
What
Adds two new streams to the source-float connector using the Float Reports API:
reports-people— aggregated scheduling data per person for a given date rangereports-projects— aggregated scheduling data per project for a given date rangeAlso adds an optional
end_dateconfig field (YYYY-MM-DD) to bound the report date range.How
reports-peoplestream:GET /reports/peoplewithstart_dateandend_datequery params, response unwrapped frompeopleroot key viaDpathExtractorreports-projectsstream:GET /reports/projectswithstart_dateandend_datequery params, response unwrapped fromprojectsroot key viaDpathExtractorNoPagination— the Float API explicitly states pagination is not available on report endpointsstart_dateis derived from the existing config field (trimmed toYYYY-MM-DD)end_dateis optional and defaults to today vianow_utc()if not provided0.0.47→0.1.0(minor bump per Airbyte semver: adding streams)Review guide
airbyte-integrations/connectors/source-float/manifest.yaml— two new stream definitions afterlogged-time(lines ~629–684), two new schemas at the bottom,end_dateadded to specairbyte-integrations/connectors/source-float/metadata.yaml— version bump onlydocs/integrations/sources/float.md—end_dateadded to config table, two new rows in streams table, changelog entry for0.1.0The existing 16 stream definitions and their schemas are untouched.
User Impact
Users can now sync aggregated utilization and scheduling report data from Float — hours per person (capacity, billable, overtime, etc.) and hours per project — directly into their
destination without manually calling the Float Reports API.
No impact on existing streams or configurations.
Can this PR be safely reverted and rolled back?