UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

UI: Filter task instances by rendered map index - #66008

Merged
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index
May 18, 2026
Merged

UI: Filter task instances by rendered map index#66008
vatsrahul1001 merged 5 commits into
apache:mainfrom
astronomer:feature/search-rendered-map-index

Conversation

@pierrejeambrun

@pierrejeambrunpierrejeambrun commented Apr 28, 2026

Copy link
Copy Markdown
Member

Summary

Closes#51820.

Adds a rendered_map_index exact-match filter (list-of-strings, ANY_EQUAL) to the public listMapped and listTaskInstances endpoints, mirroring the existing map_index filter, and surfaces it in the Task Instances filter bar in the UI. Users can now find a dynamically mapped task by the named mapping that's already shown in the column — no more "search by what you see" gap.

Test plan

  • Unit tests pass (pytest test_task_instances.py -k rendered_map_index_filter)
  • TypeScript + ESLint clean
  • Manually verified in breeze with the customer-reported curl: ?rendered_map_index=1 now returns the row whose _rendered_map_index is NULL.
Screen.Recording.2026-04-30.at.16.02.11.mov

Was generative AI tooling used to co-author this PR?
  • Yes — Claude Code (Opus 4.7)

Generated-by: Claude Code (Opus 4.7) following the guidelines

@bbovenzi

Copy link
Copy Markdown
Contributor

Rendered Map Index seems to be searching by the index number but not the rendered string.

Screenshot 2026-04-29 at 12 29 23 PMScreenshot 2026-04-29 at 12 29 28 PM

@pierrejeambrun

pierrejeambrun commented Apr 30, 2026

Copy link
Copy Markdown
MemberAuthor

Similarly to the 'map_index' this is an exact filter, not a search.

But since it's a string it probably makes more sense. Let me update that, it was my first draft but moved away from it for consistency.

@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 7c5350e to d00d73bCompareApril 30, 2026 13:58
@bbovenzi

Copy link
Copy Markdown
Contributor

Merge conflicts and MySQL test failure

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun can you resolve conflicts and look into failing test?

@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from d00d73b to 232d27cCompareMay 12, 2026 19:02
pierrejeambrunand others added 3 commits May 13, 2026 10:45
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closesapache#51820.
@bbovenzi
bbovenziforce-pushed the feature/search-rendered-map-index branch from 63cd8d5 to da85d11CompareMay 13, 2026 14:45
@pierrejeambrun
pierrejeambrunforce-pushed the feature/search-rendered-map-index branch from 58b2cbe to b6b61afCompareMay 18, 2026 09:33
@vatsrahul1001
vatsrahul1001 merged commit 73a6641 into apache:mainMay 18, 2026
142 checks passed
@vatsrahul1001
vatsrahul1001 deleted the feature/search-rendered-map-index branch May 18, 2026 11:46
@github-actions

Copy link
Copy Markdown
Contributor

Backport failed to create: v3-2-test. View the failure log Run details

Note: As of Merging PRs targeted for Airflow 3.X
the committer who merges the PR is responsible for backporting the PRs that are bug fixes (generally speaking) to the maintenance branches.

In matter of doubt please ask in #release-management Slack channel.

StatusBranchResult
v3-2-testCommit Link

You can attempt to backport this manually by running:

cherry_picker 73a6641 v3-2-test

This should apply the commit to the v3-2-test branch and leave the commit in conflict state marking
the files that need manual conflict resolution.

After you have resolved the conflicts, you can continue the backport process by running:

cherry_picker --continue

If you don't have cherry-picker installed, see the installation guide.

@vatsrahul1001

Copy link
Copy Markdown
Contributor

@pierrejeambrun could help with manual backport?

vatsrahul1001 added a commit that referenced this pull request May 19, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 20, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
vatsrahul1001 added a commit that referenced this pull request May 21, 2026
* UI: Search task instances by rendered map index
Adds 'rendered_map_index_pattern' (substring match) and 'rendered_map_index_prefix_pattern' (index-friendly prefix match) query parameters to the public listMapped and listTaskInstances endpoints, mirroring the existing 'operator_name', 'pool_name', etc. pattern/prefix-pattern pairs. The UI surfaces this as a search input in the TaskInstances filter bar — prefix search by default, with an 'advanced search' toggle to switch to substring match.
The TaskInstance.rendered_map_index hybrid_property now has a SQL-level .expression so queries see the same value as the API response: the explicit _rendered_map_index when set, otherwise str(map_index). Without this, filtering on rendered map index silently dropped rows whose _rendered_map_index column is NULL but whose displayed value is the numeric map index.
Closes#51820.
* Fix rebase linting
* Fix mysql tests
* Fix conflicts
---------
(cherry picked from commit 73a6641)
Co-authored-by: Brent Bovenzi <brent.bovenzi@gmail.com>
Co-authored-by: Rahul Vats <43964496+vatsrahul1001@users.noreply.github.com>
@bbovenzibbovenzi mentioned this pull request Jul 21, 2026
2 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:APIAirflow's REST/HTTP APIarea:translationsarea:UIRelated to UI/UX. For Frontend Developers.translation:default

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Search/filter mapped tasks by named mapping

3 participants

@pierrejeambrun@bbovenzi@vatsrahul1001