Contributing to StreamForge¶
Thank you for your interest in contributing to StreamForge! This guide will help you get started.
Ways to Contribute¶
1. Report Bugs¶
Found a bug? Please create an issue on GitHub:
- Use a clear, descriptive title
- Describe the expected behavior
- Describe the actual behavior
- Include steps to reproduce
- Include your environment (OS, Python version, StreamForge version)
2. Suggest Features¶
Have an idea for a new feature?
- Check if it's already been suggested
- Clearly describe the feature and its use case
- Explain why it would be useful to other users
3. Improve Documentation¶
Documentation improvements are always welcome:
- Fix typos or clarify unclear sections
- Add examples
- Improve API documentation
- Translate documentation
4. Submit Code¶
Ready to code? Here's how:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
Commit Message Format:
feat:
- New featurefix:
- Bug fixdocs:
- Documentation changestest:
- Adding testsrefactor:
- Code refactoringstyle:
- Formatting changeschore:
- Maintenance tasks
Code Style¶
Python Style¶
- Follow PEP 8
- Use black for formatting (line length: 100)
- Use type hints
- Write docstrings for public APIs
Example¶
from typing import List, Optional
def process_symbols(
symbols: List[str],
timeframe: str = "1m",
limit: Optional[int] = None
) -> List[dict]:
"""
Process cryptocurrency symbols.
Args:
symbols: List of trading pair symbols
timeframe: Candle interval (default: "1m")
limit: Maximum number of results (optional)
Returns:
List of processed data dictionaries
Example:
>>> process_symbols(["BTCUSDT"], timeframe="5m")
[{'symbol': 'BTCUSDT', ...}]
"""
results = []
# Implementation...
return results
Docstring Format¶
Use Google-style docstrings:
def function(arg1: str, arg2: int) -> bool:
"""
Short description.
Longer description if needed.
Args:
arg1: Description of arg1
arg2: Description of arg2
Returns:
Description of return value
Raises:
ValueError: If arg2 is negative
Example:
>>> function("test", 5)
True
"""
pass
Documentation¶
Building Docs Locally¶
# Install docs dependencies
pip install -r docs/requirements.txt
# Serve locally
mkdocs serve
# Build static site
mkdocs build
Visit http://localhost:8000
Pull Request Process¶
Before Submitting¶
- Code follows style guidelines
- All tests pass
- Added tests for new features
- Updated documentation
- Commit messages are clear
PR Description¶
Include in your PR:
- What problem does it solve?
- How does it solve it?
- Any breaking changes?
- Screenshots (if UI changes)
Review Process¶
- Submit PR
- Automated checks run
- Maintainer reviews code
- Address feedback
- PR is merged!
Code of Conduct¶
Our Standards¶
- Be respectful and inclusive
- Welcome newcomers
- Accept constructive criticism
- Focus on what's best for the community
Unacceptable Behavior¶
- Harassment or discriminatory language
- Personal attacks
- Publishing private information
- Other unprofessional conduct
Questions?¶
- General Questions: GitHub Discussions
- Bug Reports: GitHub Issues
- Email: paulohmbueno@gmail.com
License¶
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank You!¶
Your contributions help make StreamForge better for everyone. Thank you for taking the time to contribute! 🎉