Skip to content

Conversation

@tobixen
Copy link
Member

@tobixen tobixen commented Feb 1, 2026

Apparently I managed to close #580 even before pushing the code to GitHub. Well, here is the fix.

tobixen and others added 2 commits February 1, 2026 18:19
Consolidates duplicated code pattern for cloning searcher with removed
property filters. This pattern was repeated 3 times each in search()
and async_search() methods for:
- Category filter workaround
- Substring search workaround
- Combined search workaround

The new _clone_without_filters() method handles:
- Removing specific filters by key
- Clearing all filters
- Updating _explicit_operators set

Addresses #580

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Refactor search.py to eliminate duplication between search() and async_search()
by using a generator-based implementation pattern:

- Add SearchAction enum for action types (RECURSIVE_SEARCH, REQUEST_REPORT, etc.)
- Create _search_impl() generator containing all search logic
- Generator yields (action, data) tuples for I/O operations
- search() and async_search() are now thin wrappers that execute actions
- Reduces ~600 lines of duplicated logic to ~200 lines of shared implementation

The generator pattern allows:
- Single source of truth for search logic and compatibility workarounds
- sync wrapper executes actions directly
- async wrapper awaits async operations
- Easy to maintain and extend

Addresses #580

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@tobixen tobixen merged commit 757c2ab into master Feb 1, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

search.py is already ripe for refactoring

2 participants