Declarative: Pattern-based partition routing for dynamic repository discovery
Maintainers usually reply within 1 day
@aaronsteers is already working on this.
Since Nov 9, 2025.
Assessment
This issue has not been assessed yet.
Description
Problem
Some connectors need to dynamically discover resources based on wildcard patterns (e.g., airbytehq/* to sync all repositories in an organization). Currently, this requires custom Python code to expand patterns into actual resource lists, preventing connectors from being fully declarative (manifest-only).
Current Workaround
Connectors like source-github implement custom logic to expand wildcard patterns. See source-github/source.py:215-313 which implements _get_org_repositories() to:
- Parse patterns like
airbytehq/*orairbytehq/a* - Call GitHub API to list all repositories in the organization
- Filter repositories by pattern matching
- Return expanded list of repositories
Proposed Solution
Add a declarative PatternPartitionRouter component that supports:
- Pattern expansion: Accept wildcard patterns and expand them via API calls
- API-based discovery: Call an API endpoint to list available resources
- Pattern matching: Filter resources by glob/regex patterns
- Caching: Cache expanded patterns to avoid repeated API calls
Example Configuration
partition_router:
type: PatternPartitionRouter
pattern_field: "repositories" # Config field containing patterns
discovery_requester:
type: HttpRequester
url_base: "https://api.github.com"
path: "/orgs/{{ pattern.org }}/repos"
authenticator:
type: BearerAuthenticator
api_token: "{{ config.access_token }}"
pattern_parser:
type: GlobPattern
separator: "/"
wildcard: "*"
record_selector:
extractor:
field_path: []
partition_fields:
- owner: "{{ item.owner.login }}"
- name: "{{ item.name }}"
Example Use Cases
Input patterns:
airbytehq/*→ Expands to all repos in airbytehq orgairbytehq/airbyte→ Single specific repoairbytehq/a*→ All repos starting with 'a' in airbytehq orgorg1/repo1 org2/*→ Multiple patterns
Expanded partitions:
[
{"owner": "airbytehq", "name": "airbyte"},
{"owner": "airbytehq", "name": "airbyte-platform"},
{"owner": "airbytehq", "name": "airbyte-python-cdk"},
...
]
Impact
This would enable connectors like source-github, source-gitlab, and others to support wildcard patterns declaratively without custom Python code.
Related
- airbytehq/airbyte-python-cdk#714 - Survey showing 74.3% of certified manifest-only connectors require custom components
- Requested by @aaronsteers in https://airbytehq-team.slack.com/archives/C08BHPUMEPJ/p1762665961303909
Code References
source-github/spec.json:80-96- Repository pattern configurationsource-github/source.py:215-313-_get_org_repositories()pattern expansion logic
- Dominant language
- Python
- Stars
- 27
- Forks
- 56
- Avg merge
- 1d 20h
- Merged PRs (30d)
- 26
Getting set up
- Ships a Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from airbytehq/airbyte-python-cdk
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
airbytehq/airbyte-python-cdk#1080 ·
Maintainers usually reply within 1 day
-
community
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
airbytehq/airbyte-python-cdk#782 ·
Maintainers usually reply within 1 day
-
community
Difficulty 5/5 Over a week Newbie friendliness 35/100
airbytehq/airbyte-python-cdk#1148 · 1 comment ·
Maintainers usually reply within 1 day
-
community
Difficulty 2/5 1-3 hours Newbie friendliness 45/100
airbytehq/airbyte-python-cdk#1146 · 1 comment · 3 reactions ·
Maintainers usually reply within 1 day
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 48/100
airbytehq/airbyte-python-cdk#1120 · 2 comments ·
Maintainers usually reply within 1 day
All issues in airbytehq/airbyte-python-cdk
Similar issues
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
SwiftKickMobile/skai#84 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 82/100
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
jxxghp/MoviePilot#7070 ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
flop-labs/technocore-chat#997 ·
Maintainers usually reply within 1 day
-
tunneld on Windows: Wi-Fi devices are not discovered because uvicorn runs on a ProactorEventLoopOpen
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
doronz88/pymobiledevice3#2051 ·
Maintainers usually reply within 1 day