Extral is a versatile ETL (Extract, Transform, Load) application designed to move data from a source database to a destination database.
All information including a Getting Started Guide can be found in the User Documentation.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
See CONTRIBUTING.md for all information on how to contribute to Extral.
Extral uses pytest for testing with both unit and integration tests.
# Run all tests
uv run pytest
# Run only unit tests (fast, no external dependencies)
uv run pytest -m unit
# Run only integration tests (requires external services)
uv run pytest -m integration
# Run tests with coverage report
uv run pytest --cov=src/extral --cov-report=html
# Run tests in verbose mode
uv run pytest -v
# Run specific test file
uv run pytest tests/unit/test_config.pyTests are organized using markers:
unit: Fast tests that don't require external dependenciesintegration: Tests requiring external services (databases, files)database: Tests requiring database connectionsfile: Tests requiring file system accessslow: Tests that take longer to runnetwork: Tests requiring network access
Extral includes comprehensive Sphinx documentation covering installation, configuration, and API reference.
User documentation can be found here: https://extral.readthedocs.io/en/latest/. Instructions below focus on developers to add and build documentation.
To build the documentation locally:
# Install development dependencies (includes Sphinx)
uv sync --group dev
# Build HTML documentation
cd docs && make html
# Or use the convenience script
./docs/build_docs.shThe built documentation will be available at docs/_build/html/index.html.
- Getting Started - Installation and basic usage guide
- Configuration - Complete YAML configuration syntax reference
- API Reference - Auto-generated API documentation for all modules
- Content: Edit the
.rstfiles in thedocs/directory - API docs: Automatically generated from docstrings in the source code
- Version: Automatically synced from
src/extral/__init__.py
After making changes, rebuild the documentation using the commands above.