# 贡献指南 / Contributing Guide [English](#english) | [中文](#中文) --- ## 中文 感谢您对 LandPPT 项目的关注!我们欢迎所有形式的贡献,包括但不限于: ### 🤝 贡献方式 - 🐛 **Bug 报告**:发现问题并报告 - 💡 **功能建议**:提出新功能想法 - 📝 **代码贡献**:修复bug或实现新功能 - 📚 **文档改进**:完善文档和示例 - 🌐 **翻译工作**:帮助翻译界面和文档 - 🧪 **测试用例**:编写和改进测试 ### 🚀 开始贡献 #### 1. 准备开发环境 ```bash # Fork 并克隆仓库 git clone https://github.com/your-username/LandPPT.git cd LandPPT # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # Linux/Mac # 或 .venv\Scripts\activate # Windows # 安装依赖 pip install uv uv pip install -e ".[dev]" # 配置环境变量 cp .env.example .env # 编辑 .env 文件配置必要的API密钥 # 初始化数据库 python setup_database.py # 运行项目 python run.py ``` #### 2. 开发流程 1. **创建分支** ```bash git checkout -b feature/your-feature-name # 或 git checkout -b fix/your-bug-fix ``` 2. **编写代码** - 遵循现有的代码风格 - 添加必要的注释和文档字符串 - 确保代码通过所有测试 3. **运行测试** ```bash # 运行所有测试 pytest # 运行特定测试 pytest tests/test_specific.py # 生成覆盖率报告 pytest --cov=src/landppt ``` 4. **代码格式化** ```bash # 格式化代码 black src/ isort src/ # 检查代码质量 flake8 src/ mypy src/ ``` 5. **提交更改** ```bash git add . git commit -m "feat: add new feature description" # 或 git commit -m "fix: fix bug description" ``` 6. **推送并创建PR** ```bash git push origin feature/your-feature-name ``` 然后在GitHub上创建Pull Request ### 📝 代码规范 #### 提交信息格式 使用 [Conventional Commits](https://www.conventionalcommits.org/) 格式: ``` [optional scope]: [optional body] [optional footer(s)] ``` 类型包括: - `feat`: 新功能 - `fix`: Bug修复 - `docs`: 文档更新 - `style`: 代码格式化 - `refactor`: 代码重构 - `test`: 测试相关 - `chore`: 构建过程或辅助工具的变动 #### Python代码规范 - 遵循 [PEP 8](https://pep8.org/) 规范 - 使用类型提示 (Type Hints) - 编写清晰的文档字符串 - 保持函数和类的单一职责 #### 示例代码风格 ```python from typing import Optional, Dict, Any import logging logger = logging.getLogger(__name__) class PPTGenerator: """PPT生成器类 负责根据输入内容生成PPT演示文稿 """ def __init__(self, config: Dict[str, Any]) -> None: """初始化PPT生成器 Args: config: 配置字典 """ self.config = config async def generate_ppt( self, content: str, template_id: Optional[str] = None ) -> Dict[str, Any]: """生成PPT Args: content: 输入内容 template_id: 模板ID,可选 Returns: 生成的PPT数据 Raises: ValueError: 当输入内容为空时 """ if not content.strip(): raise ValueError("内容不能为空") logger.info(f"开始生成PPT,内容长度: {len(content)}") # 实现逻辑... return {"status": "success", "data": {}} ``` ### 🧪 测试指南 #### 编写测试 - 为新功能编写单元测试 - 确保测试覆盖率不低于80% - 使用有意义的测试名称 - 测试边界条件和异常情况 #### 测试示例 ```python import pytest from unittest.mock import Mock, patch from src.landppt.core.ppt_generator import PPTGenerator class TestPPTGenerator: """PPT生成器测试类""" @pytest.fixture def generator(self): """创建PPT生成器实例""" config = {"template_dir": "/tmp/templates"} return PPTGenerator(config) async def test_generate_ppt_success(self, generator): """测试成功生成PPT""" content = "这是测试内容" result = await generator.generate_ppt(content) assert result["status"] == "success" assert "data" in result async def test_generate_ppt_empty_content(self, generator): """测试空内容异常""" with pytest.raises(ValueError, match="内容不能为空"): await generator.generate_ppt("") ``` ### 📋 Issue 和 PR 模板 #### Bug 报告 报告bug时请包含: - 问题描述 - 复现步骤 - 期望行为 - 实际行为 - 环境信息(操作系统、Python版本等) - 相关日志或截图 #### 功能请求 提出新功能时请包含: - 功能描述 - 使用场景 - 预期收益 - 可能的实现方案 ### 🎯 开发重点 当前项目重点关注以下方面: 1. **AI集成优化** - 支持更多AI提供商 - 优化AI调用性能 - 改进错误处理 2. **模板系统** - 丰富模板库 - 改进模板编辑器 - 支持自定义模板 3. **用户体验** - 优化Web界面 - 改进响应速度 - 增强错误提示 4. **文档和测试** - 完善API文档 - 增加测试覆盖率 - 改进用户指南 ### 📞 联系方式 如有疑问,可以通过以下方式联系: - 创建 [GitHub Issue](https://github.com/your-username/LandPPT/issues) - 参与 [GitHub Discussions](https://github.com/your-username/LandPPT/discussions) --- ## English Thank you for your interest in the LandPPT project! We welcome all forms of contributions, including but not limited to: ### 🤝 Ways to Contribute - 🐛 **Bug Reports**: Find and report issues - 💡 **Feature Suggestions**: Propose new feature ideas - 📝 **Code Contributions**: Fix bugs or implement new features - 📚 **Documentation**: Improve docs and examples - 🌐 **Translation**: Help translate interface and documentation - 🧪 **Testing**: Write and improve test cases ### 🚀 Getting Started #### 1. Development Environment Setup ```bash # Fork and clone the repository git clone https://github.com/your-username/LandPPT.git cd LandPPT # Create virtual environment python -m venv .venv source .venv/bin/activate # Linux/Mac # or .venv\Scripts\activate # Windows # Install dependencies pip install uv uv pip install -e ".[dev]" # Configure environment variables cp .env.example .env # Edit .env file to configure necessary API keys # Initialize database python setup_database.py # Run the project python run.py ``` #### 2. Development Workflow 1. **Create Branch** ```bash git checkout -b feature/your-feature-name # or git checkout -b fix/your-bug-fix ``` 2. **Write Code** - Follow existing code style - Add necessary comments and docstrings - Ensure code passes all tests 3. **Run Tests** ```bash # Run all tests pytest # Run specific tests pytest tests/test_specific.py # Generate coverage report pytest --cov=src/landppt ``` 4. **Code Formatting** ```bash # Format code black src/ isort src/ # Check code quality flake8 src/ mypy src/ ``` 5. **Commit Changes** ```bash git add . git commit -m "feat: add new feature description" # or git commit -m "fix: fix bug description" ``` 6. **Push and Create PR** ```bash git push origin feature/your-feature-name ``` Then create a Pull Request on GitHub ### 📝 Code Standards #### Commit Message Format Use [Conventional Commits](https://www.conventionalcommits.org/) format: ``` [optional scope]: [optional body] [optional footer(s)] ``` Types include: - `feat`: New feature - `fix`: Bug fix - `docs`: Documentation update - `style`: Code formatting - `refactor`: Code refactoring - `test`: Test related - `chore`: Build process or auxiliary tool changes #### Python Code Standards - Follow [PEP 8](https://pep8.org/) guidelines - Use Type Hints - Write clear docstrings - Maintain single responsibility for functions and classes ### 🧪 Testing Guidelines #### Writing Tests - Write unit tests for new features - Ensure test coverage is not less than 80% - Use meaningful test names - Test boundary conditions and exceptions ### 📋 Issue and PR Templates #### Bug Reports When reporting bugs, please include: - Problem description - Steps to reproduce - Expected behavior - Actual behavior - Environment info (OS, Python version, etc.) - Relevant logs or screenshots #### Feature Requests When proposing new features, please include: - Feature description - Use cases - Expected benefits - Possible implementation approaches ### 📞 Contact If you have questions, you can contact us through: - Create a [GitHub Issue](https://github.com/your-username/LandPPT/issues) - Join [GitHub Discussions](https://github.com/your-username/LandPPT/discussions) --- Thank you for contributing to LandPPT! 🎉