Thank you for your interest in contributing to File Organizer! This project is designed to be beginner-friendly and welcomes contributions from developers of all skill levels.
- Perfect for beginners: Simple codebase with clear structure
- Immediate impact: Your changes help people organize their files
- Learning opportunity: Practice Python, testing, and open source workflows
- Community: Join a friendly, supportive development community
- Python 3.6 or higher
- Git
- A GitHub account
-
Fork the repository
- Click the "Fork" button on the GitHub page
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/file-organizer.git
-
Create a development environment
cd file-organizer python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install dependencies
pip install -r requirements.txt
-
Run tests to make sure everything works
python -m pytest tests/
Look for issues labeled with:
good first issue- Perfect for beginnershelp wanted- Community contributions welcomebug- Fix a problemenhancement- Add a new feature
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-description- Write clean, readable code
- Add comments for complex logic
- Follow the existing code style
- Test your changes
# Run all tests
python -m pytest tests/
# Run specific test file
python -m pytest tests/test_file_organizer.py
# Run with verbose output
python -m pytest tests/ -vgit add .
git commit -m "Add: brief description of your changes"Commit Message Guidelines:
- Use present tense: "Add feature" not "Added feature"
- Be descriptive but concise
- Reference issues: "Fix #123" or "Closes #456"
git push origin feature/your-feature-nameThen create a Pull Request on GitHub with:
- Clear title and description
- Reference to related issues
- Screenshots if applicable
- Follow PEP 8 (Python style guide)
- Use meaningful variable and function names
- Add docstrings to functions and classes
- Keep functions small and focused
def organize_files(directory_path: str, dry_run: bool = False) -> None:
"""
Organize files in the specified directory.
Args:
directory_path: Path to the directory to organize
dry_run: If True, only show what would be moved
"""
directory = Path(directory_path)
if not directory.exists():
print(f"Error: Directory '{directory_path}' does not exist.")
return
# Rest of the function...def org(d, dr=False): # Unclear names
# No docstring
p = Path(d) # Unclear variable name
if not p.exists(): # No error handling
return
# etc...- Write tests for new functionality
- Test edge cases and error conditions
- Use descriptive test names
- Follow the existing test structure
def test_function_name_what_it_tests(self):
"""Test that function_name does what it should do."""
# Arrange - set up test data
test_data = "example"
# Act - call the function
result = function_name(test_data)
# Assert - check the result
self.assertEqual(result, expected_value)# Run all tests
python -m pytest
# Run with coverage
python -m pytest --cov=py_sort
# Run specific test
python -m pytest tests/test_file_organizer.py::TestFileOrganizer::test_get_file_extensionHere are some great issues for beginners:
Difficulty: β (Easy)
Description: Add more file extensions to the sorting rules
Files to modify: config.json, py_sort.py
Difficulty: β (Easy)
Description: Make error messages more helpful and user-friendly
Files to modify: py_sort.py
Difficulty: ββ (Easy-Medium)
Description: Use a library like rich or colorama to add colors
Files to modify: py_sort.py, requirements.txt
Difficulty: β (Easy)
Description: Create example config files for different use cases
Files to create: examples/minimal_config.json, examples/extended_config.json
Difficulty: ββ (Easy-Medium)
Description: Show progress when organizing many files
Files to modify: py_sort.py
Difficulty: β (Easy)
Description: Add more examples and improve README
Files to modify: README.md
- Check if the issue already exists
- Try the latest version
- Test with a simple example
**Bug Description**
A clear description of what the bug is.
**Steps to Reproduce**
1. Go to '...'
2. Run command '...'
3. See error
**Expected Behavior**
What you expected to happen.
**Actual Behavior**
What actually happened.
**Environment**
- OS: [e.g., Windows 10, macOS 12, Ubuntu 20.04]
- Python version: [e.g., 3.9.7]
- File Organizer version: [e.g., 1.0.0]
**Additional Context**
Any other context about the problem.**Feature Description**
A clear description of the feature you'd like to see.
**Use Case**
Why would this feature be useful? What problem does it solve?
**Proposed Solution**
How do you think this feature should work?
**Alternatives Considered**
Any alternative solutions you've thought about.
**Additional Context**
Any other context, mockups, or examples.Contributors will be recognized in:
- README.md contributors section
- Release notes
- GitHub contributors page
- π¬ GitHub Discussions: Ask questions and get help
- π GitHub Issues: Report bugs and request features
- π§ Email: Contact maintainers directly
- π¬ Discord/Slack: Join our community chat (if available)
Before submitting your PR, make sure:
- Code follows the style guidelines
- Tests pass:
python -m pytest - New functionality has tests
- Documentation is updated if needed
- Commit messages are clear
- PR description explains the changes
- Related issues are referenced
Your contributions make this project better for everyone. Whether you're fixing a typo, adding a feature, or improving documentation, every contribution matters!
Happy Contributing! π
Remember: Every expert was once a beginner. Don't be afraid to ask questions!