Rust extractor#29
Merged
Merged
Conversation
- Rename extractor to python-extractor for clarity - Rename distiller to rust-extractor for consistency - Move both extractors into a single extractor/ directory - Update all references in docker-compose.yml, CI/CD workflows, and scripts - Add extractor service alias for backwards compatibility - Update Rust crate name from distiller to rust_extractor - Update ASCII art and logging to reflect new naming - Maintain drop-in replacement functionality with same environment variables This change provides better organization by grouping both extractor implementations together while maintaining clear separation between Python and Rust versions. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add dynamic UV version fetching in update-project.sh (no hardcoded versions) - Add update_precommit_hooks() function to auto-update pre-commit hooks - Update .gitignore with comprehensive Rust patterns and target exclusions - Add taskipy clean and deep-clean commands that preserve .claude directory - Clean command removes __pycache__, .pytest_cache, build artifacts, etc. - Deep-clean also removes Docker volumes and prunes system - Fix duplicate clean command definition in pyproject.toml 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
The --freeze flag ensures exact version pinning for pre-commit hooks, providing more reproducible builds and preventing unexpected updates. 🤖 Generated with Claude Code Co-Authored-By: Claude <noreply@anthropic.com>
- Rename python-extractor Docker service to extractor (default) - Remove redundant extractor alias service - Update GitHub workflows to reference both extractor implementations: * extractor/python-extractor (Python implementation) * extractor/rust-extractor (Rust implementation) - Standardize naming conventions: * Technical references: rust-extractor (kebab-case) * Documentation: "Rust extractor" (proper capitalization) * Code/config: retain technical naming (snake_case for Rust crate) - Fix docker-compose service list to match expected workflow validation - Update switch-extractor.sh script with correct service names Resolves build validation issue where service list didn't match expectations. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
…build warnings - Add rustfmt.toml with 150-character max_width configuration - Update .clippy.toml to accommodate longer lines and increase thresholds - Reformat all Rust code to use the new 150-character line length - Fix dead code warnings by adding #[allow(dead_code)] attributes to: * DistillerConfig::from_file() - utility method for file-based config * DataType::all() - utility method for getting all data types * ExtractionProgress::get() - utility method for progress queries * ProcessingState::clear() - utility method for state cleanup - Ensure all Rust build and clippy checks pass without warnings This improves code readability by allowing longer lines and resolves all compilation warnings while maintaining clean, formatted code. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update Dockerfile to use correct pyproject.toml path (extractor/python-extractor/pyproject.toml) - Fix source copy path to use extractor/python-extractor/ directory - Change dependency extra from 'extractor' to 'python-extractor' to match pyproject.toml - Update README.md with correct installation and build commands Resolves Docker build error: "/extractor/pyproject.toml": not found 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Downgrade problematic dependencies (reqwest 0.11, thiserror 1.0, bytes 1.5) - Comment out benchmarks section causing edition2024 requirement - Remove benchmark directory copy from Dockerfile - Add --no-install-recommends to apt-get install commands - Add hadolint ignore directives for system package versioning Note: Build still fails due to transitive dependencies requiring edition2024 features not available in Rust 1.82/1.83. The rust-extractor needs either: 1. A Rust version that supports edition2024, or 2. Further dependency downgrading to avoid edition2024 requirements The python-extractor Docker build has been successfully fixed. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Python fixes: - Create compatibility modules extractor/extractor.py and extractor/discogs.py - These modules proxy imports to extractor/python-extractor/ for backwards compatibility - Fix ModuleNotFoundError in tests/extractor/test_discogs.py - All linting issues resolved with proper noqa directives Rust fixes: - Fix type mismatch in DataType::from_str test assertions - Change from Some()/None pattern to Ok()/is_err() pattern to match Result<T, E> return type - Tests now properly validate the Result<DataType, String> return type Rust version limitation: - Attempted upgrade to Rust 1.84+ but dependency base64ct v1.8.0 requires edition2024 - edition2024 support is not available until Rust 1.85.0 (scheduled Feb 20, 2025) - Keeping Rust 1.83 for now as the highest stable version that works - Will upgrade to 1.85+ once edition2024 is stabilized 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update Rust version from 1.83 to 1.89 in Dockerfile - Upgrade Rust edition from 2021 to 2024 - Update major crate versions: - tokio: 1.42 → 1.43 - quick-xml: 0.36 → 0.37 - lapin: 2.5 → 3.2 - reqwest: 0.11 → 0.12 - bytes: 1.5 → 1.8 - Enable benchmark compilation (now compatible with edition 2024) - Fix unsafe function calls required for edition 2024 - Update config to properly read BATCH_SIZE environment variable - Fix clippy warnings for collapsible if statements - Apply cargo fmt formatting for consistency - All tests passing with updated dependencies 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Copy benches directory during dependency caching to fix Cargo.toml validation error. The build was failing because Cargo validates benchmark configurations but the benchmark file wasn't available during the dummy build step. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add missing rust.yml workflow file with proper Rust CI pipeline - Fix mypy configuration to exclude python-extractor directory (invalid package name) - Update rust-toolchain.toml to include rustfmt and clippy components - Update pre-commit hooks to auto-install Rust components if missing - Use modern dtolnay/rust-toolchain action instead of deprecated actions-rs Resolves build failures related to: - Missing rust.yml workflow reference in build.yml - mypy validation error for python-extractor directory name - cargo-fmt and cargo-clippy component installation issues - Deprecated GitHub Actions causing actionlint failures 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Remove dedicated rust.yml workflow file - Update build.yml to remove rust.yml dependency - Rust checks are already integrated into code-quality.yml workflow: - Rust toolchain setup with rustfmt and clippy components - Cargo dependency caching - Pre-commit hooks include Rust formatting and linting This consolidates CI workflows while maintaining all Rust quality checks. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Fix circular import issue in python-extractor by changing relative import from 'extractor.discogs' to 'discogs' for local module access - Improve compatibility import mechanism in extractor/extractor.py to use importlib.util for direct module loading, avoiding path conflicts - Replace fragile wildcard import with explicit function imports - Add error handling with fallback placeholder functions - Fix mypy configuration to explicitly target specific files/directories and exclude problematic python-extractor path from pre-commit scanning This resolves the failing integration tests: - TestServiceIntegration.test_extractor_import - TestServiceIntegration.test_extractor_has_main_function All integration tests now pass: ✅ 5/5 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Rename directories to fix Python package name validation issues: - python-extractor → pyextractor - rust-extractor → rustextractor This resolves mypy validation errors and import issues caused by hyphens in directory names, which Python treats as invalid package names. Changes include: - Renamed directories with git mv to preserve history - Updated all path references in configuration files: - pyproject.toml: workspace members, dependencies, tasks - docker-compose.yml: service names and build paths - GitHub workflows: build paths and service references - pre-commit config: file patterns and commands - Scripts: switch-extractor.sh, update-project.sh - Fixed extractor compatibility import with proper type checking - Removed mypy exclusions - now runs properly on all code - Updated Dockerfile paths in rustextractor All integration tests pass: ✅ 5/5 MyPy validation now works correctly on all code including pyextractor 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
Complete the directory rename by fixing all remaining references: Dockerfiles: - extractor/pyextractor/Dockerfile: Fixed build paths and extra name - extractor/rustextractor/Dockerfile: Fixed build paths, user names, and binary names Documentation and Config: - README files: Updated build/run examples and migration instructions - pyproject.toml: Fixed package names - Config files: Updated comments and references (.clippy.toml, rustfmt.toml) This resolves Docker build failures where old python-extractor paths were still referenced in the pyextractor Dockerfile, causing: "python-extractor": not found errors during build All integration tests continue to pass: ✅ 5/5 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Add comprehensive Rust test coverage collection using cargo-llvm-cov - Include conditional logic to skip Rust tests when extractor doesn't exist - Upload Rust coverage reports to Codecov with consistent formatting - Add Rust file patterns to workflow triggers for proper CI activation - Fix test imports to use correct module paths for current branch structure - Implement parallel test execution for Python and Rust components 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update import paths in test_discogs.py from extractor.discogs to pyextractor.discogs - Fix patch decorator paths to match new module structure - Resolves ModuleNotFoundError in test collection 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update import path to extractor.pyextractor.discogs - Fix patch decorator paths to match full module hierarchy - Resolves ModuleNotFoundError for pyextractor module 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Update imports to use pyextractor directly without extractor prefix - Fix circular import in extractor.py - Correct patch decorator paths in test_discogs.py - Tests now pass when PYTHONPATH includes extractor directory 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Set PYTHONPATH to include extractor directory in test workflow - Ensures pyextractor module can be imported during test runs - Apply to both individual test runs and coverage report generation 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
- Change imports from extractor.extractor to pyextractor.extractor - Fix both test_extractor_import and test_extractor_has_main_function - Resolves ModuleNotFoundError in integration tests 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Introduces a fast, Rust-based extractor.