Files
LandPPT/CONTRIBUTING.md
2025-11-07 09:05:56 +08:00

420 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 贡献指南 / 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/) 格式:
```
<type>[optional scope]: <description>
[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:
```
<type>[optional scope]: <description>
[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! 🎉