feat(data-warehouse): server-side search for the OAuth account picker - #70506
Conversation
Add an optional `search` query param to the external_data_sources oauth_accounts endpoint and thread it to OAuthMixin.get_oauth_accounts. Sources whose provider supports it (GitHub repositories) push the query down for scale; small-list sources (Bing Ads, Google Search Console) ignore it and a shared filter_integration_accounts helper filters the returned list generically at the endpoint. Also implement GithubSource.get_oauth_accounts, mapping repos to the IntegrationAccount contract via the existing cached-repo lister (which uses the stored integration token), so GitHub is ready to adopt the generic account picker. The wizard field swap + frontend (nested integrationField resolution + server-side search wiring) that make GitHub actually use the picker are a follow-up, since they need frontend codegen (kea-typegen + orval).
|
Reviews (1): Last reviewed commit: "feat(data-warehouse): server-side search..." | Re-trigger Greptile |
🦔 Hogbox preview · ✅ ready▶ Open the preview
commit |
🤖 CI report✅ Bundle size — no changeUncompressed size of every built Total: 64.34 MiB · no change No file changed by more than 1000 B. Posted automatically by build-bundle-size-report · uncompressed bytes from dist-report ✅ Eager graph — within budgetHow much code each root ships on the eager path — downloaded and parsed before the surface is interactive. Measured from the esbuild output chunks (post-tree-shake, static imports only); lazy
🟢 Largest files eagerly shipped from
|
| Size | File |
|---|---|
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 24.6 KiB | ../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.js |
| 6.3 KiB | ../node_modules/.pnpm/react@18.3.1/node_modules/react/cjs/react.production.min.js |
| 4.5 KiB | ../node_modules/.pnpm/@jspm+core@2.1.0/node_modules/@jspm/core/nodelibs/browser/process.js |
| 3.9 KiB | ../node_modules/.pnpm/scheduler@0.23.2/node_modules/scheduler/cjs/scheduler.production.min.js |
| 1.4 KiB | ../node_modules/.pnpm/base64-js@1.5.1/node_modules/base64-js/index.js |
| 1.3 KiB | src/RootErrorBoundary.tsx |
| 912 B | ../node_modules/.pnpm/ieee754@1.2.1/node_modules/ieee754/index.js |
| 789 B | src/scenes/ChunkLoadErrorBoundary.tsx |
| 668 B | src/index.tsx |
Largest files eagerly shipped from src/scenes/AuthenticatedShell.tsx
| Size | File |
|---|---|
| 278.6 KiB | ../node_modules/.pnpm/posthog-js@1.399.2/node_modules/posthog-js/dist/rrweb.js |
| 267.7 KiB | ../node_modules/.pnpm/@posthog+icons@0.38.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@posthog/icons/dist/posthog-icons.es.js |
| 234.9 KiB | src/taxonomy/core-filter-definitions-by-group.json |
| 221.5 KiB | ../node_modules/.pnpm/posthog-js@1.399.2/node_modules/posthog-js/dist/module.js |
| 164.0 KiB | src/queries/validators.js |
| 154.3 KiB | ../node_modules/.pnpm/re2js@0.4.1/node_modules/re2js/build/index.esm.js |
| 126.8 KiB | ../node_modules/.pnpm/react-dom@18.3.1_react@18.3.1/node_modules/react-dom/cjs/react-dom.production.min.js |
| 105.9 KiB | src/lib/api.ts |
| 93.3 KiB | ../node_modules/.pnpm/prosemirror-view@1.40.1/node_modules/prosemirror-view/dist/index.js |
| 90.6 KiB | ../node_modules/.pnpm/@tiptap+core@3.20.6_@tiptap+pm@3.20.6/node_modules/@tiptap/core/dist/index.js |
Posted automatically by check-eager-graph · sizes are eager output bytes (shipped, post-tree-shake) from the esbuild metafile · part of #32479
⚠️ Dist folder size — 🔺 +26 B (+0.0%)
Total size of the built frontend/dist folder (all assets), compared against the base branch.
Total: 1278.62 MiB · 🔺 +26 B (+0.0%)
Generated-By: PostHog Code Task-Id: 4579c8a6-a1fb-4324-92e5-accc339909ec
Generated-By: PostHog Code Task-Id: 4579c8a6-a1fb-4324-92e5-accc339909ec
Problem
The backend-driven OAuth account picker (#65692) returns a source's full account list and the frontend filters it client-side. That's fine for a handful of ad accounts, but GitHub repositories can number in the thousands — so GitHub can't adopt the picker without server-side search.
Changes
searchquery param toGET external_data_sources/oauth_accounts/, threaded toOAuthMixin.get_oauth_accounts(..., search=...). A sharedfilter_integration_accountshelper filters the returned list generically at the endpoint, so small-list sources (Bing Ads, Google Search Console) get search for free by ignoring the param; sources whose provider supports server-side search push it down.GithubSource.get_oauth_accounts, mapping repositories (owner/repo) to theIntegrationAccountcontract via the existinglist_cached_repositories— which resolves the stored integration token server-side, so the client only ever passes an integration id.This is the backend foundation. Making GitHub's wizard actually use the picker (swapping its
repositoryfield tooauth-account-select, teaching the shared selector to resolve a nestedintegrationField, and wiring the popover search to the endpoint) is a follow-up, since those touch frontend codegen (kea-typegen + orval).How did you test this?
pyteston the changed areas — 54 passing:test_github_source_class.py—get_oauth_accountsmaps repos, pushessearchdown to the lister, skips repos with nofull_name, and raises an actionable error on a missing integration.test_integration_accounts.py—filter_integration_accountscase-insensitive matching across value / display_name / secondary_text.TestOAuthAccountsEndpoint— new:searchfilters a source's returned list (GSC) and is pushed down for GitHub; plus the existing endpoint tests still pass.ruffclean. No model change, so no migration.Automatic notifications