Thank you for your interest in contributing! This document provides guidelines for contributing to projects in this workspace.
- Be respectful and inclusive
- Provide constructive feedback
- Focus on the issue, not the person
- Python 3.9 or higher
- Git
- VS Code (recommended)
-
Clone the repository
-
Install system dependencies:
# Ubuntu/Debian sudo apt install $(grep -v '^#' apt-packages.txt | grep -v '^$' | xargs)
-
Install Python dependencies:
pip install -r requirements.txt pip install pytest pytest-cov black flake8 mypy
-
Run tests:
pytest tests/ -v
- Follow PEP 8 with 100-character line limit
- Use type hints for all functions
- Write Google-style docstrings
- Use
blackfor formatting - Use
isortfor import sorting
- Single Entry Point: One main executable per project
- Portability: No hardcoded paths - use
Path(__file__).parent - Configuration: YAML with environment variable substitution
- Three Interfaces: CLI, Desktop GUI (Tkinter), Web GUI (FastAPI)
from pathlib import Path
from dataclasses import dataclass
from typing import Optional
@dataclass
class Result:
"""Operation result with status and message."""
success: bool
message: str
details: Optional[dict] = None
def process_file(
file_path: Path,
verbose: bool = False,
) -> Result:
"""
Process a file and return the result.
Args:
file_path: Path to the file to process.
verbose: Whether to print verbose output.
Returns:
Result object with operation status.
"""
if not file_path.exists():
return Result(success=False, message=f"File not found: {file_path}")
# Process the file...
return Result(success=True, message="File processed successfully")- Fork the repository
- Create a branch for your feature:
git checkout -b feature/my-feature - Make your changes following the coding standards
- Write tests for new functionality
- Run the test suite:
pytest tests/ -v - Run linting:
black . && flake8 src/ - Commit with a descriptive message
- Push to your fork
- Create a Pull Request
- Code follows project style guidelines
- All tests pass
- New tests added for new functionality
- Documentation updated if needed
- No hardcoded paths or credentials
- Commits are atomic and well-described
- Write tests for all new features
- Maintain 90%+ code coverage
- Test on multiple platforms when possible
- Include unit and integration tests
# Run tests with coverage
pytest tests/ -v --cov=src --cov-report=term-missing- Update README.md for user-facing changes
- Add docstrings to all public functions
- Include examples for new features
- Keep CHANGELOG.md updated
Open an issue for questions or discussions about potential contributions.