247 lines
5.7 KiB
Markdown
247 lines
5.7 KiB
Markdown
# Development Environment Setup
|
|
|
|
This guide explains how to set up your development environment for Edison.
|
|
|
|
## Prerequisites
|
|
|
|
Before beginning development on Edison, ensure you have:
|
|
|
|
- **Python 3.6+**: Required for core development
|
|
- **Git**: For version control
|
|
- **OpenAI API Key**: For testing API integration
|
|
- **pip**: For package management
|
|
|
|
## Setting Up Your Development Environment
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
A[Clone Repository] --> B[Set Up Virtual Environment]
|
|
B --> C[Install Dependencies]
|
|
C --> D[Configure API Key]
|
|
D --> E[Run Tests]
|
|
E --> F[Start Development]
|
|
|
|
style A fill:#f9d5e5,stroke:#333,stroke-width:2px
|
|
style B fill:#eeeeee,stroke:#333,stroke-width:2px
|
|
style C fill:#d3f6db,stroke:#333,stroke-width:2px
|
|
style D fill:#d3f6f5,stroke:#333,stroke-width:2px
|
|
style E fill:#f5d5f5,stroke:#333,stroke-width:2px
|
|
style F fill:#f5f5d5,stroke:#333,stroke-width:2px
|
|
```
|
|
|
|
### Step 1: Clone the Repository
|
|
|
|
```bash
|
|
# If you're a contributor, fork the repository first, then:
|
|
git clone https://github.com/YOUR_USERNAME/command-assistant.git
|
|
|
|
# If you're a maintainer:
|
|
git clone https://github.com/user/command-assistant.git
|
|
|
|
# Navigate to the directory
|
|
cd command-assistant
|
|
```
|
|
|
|
### Step 2: Create a Virtual Environment
|
|
|
|
```bash
|
|
# Create virtual environment
|
|
python -m venv venv
|
|
|
|
# Activate virtual environment
|
|
# On macOS/Linux:
|
|
source venv/bin/activate
|
|
|
|
# On Windows:
|
|
venv\Scripts\activate
|
|
```
|
|
|
|
### Step 3: Install in Development Mode
|
|
|
|
```bash
|
|
# Install Edison in development mode
|
|
pip install -e .
|
|
|
|
# Install development dependencies
|
|
pip install pylint pytest
|
|
```
|
|
|
|
### Step 4: Configure OpenAI API Key
|
|
|
|
For development, it's best to use environment variables:
|
|
|
|
```bash
|
|
# On macOS/Linux:
|
|
export OPENAI_API_KEY="your-api-key-here"
|
|
|
|
# On Windows:
|
|
set OPENAI_API_KEY=your-api-key-here
|
|
```
|
|
|
|
Or create a `.env` file in the project root:
|
|
|
|
```
|
|
OPENAI_API_KEY="your-api-key-here"
|
|
```
|
|
|
|
## Directory Structure Setup
|
|
|
|
The development environment should match this structure:
|
|
|
|
```
|
|
command-assistant/ # Root directory
|
|
├── docs/ # Documentation
|
|
├── edison/ # Main package
|
|
├── tests/ # Test directory (future addition)
|
|
├── venv/ # Virtual environment (generated)
|
|
├── .gitignore # Git ignore file
|
|
├── LICENSE # License file
|
|
├── README.md # Project readme
|
|
├── install_edison.sh # Installation script for Linux/macOS
|
|
├── install_edison.bat # Installation script for Windows
|
|
├── requirements.txt # Package dependencies
|
|
└── setup.py # Package setup file
|
|
```
|
|
|
|
## Running Edison in Development Mode
|
|
|
|
```bash
|
|
# Run Edison from the command line
|
|
edison your query here
|
|
|
|
# Run Edison as a module
|
|
python -m edison your query here
|
|
|
|
# Run with verbose logging
|
|
edison -v your query here
|
|
```
|
|
|
|
## Development Tools
|
|
|
|
### Code Linting
|
|
|
|
Edison uses `pylint` for code linting:
|
|
|
|
```bash
|
|
# Lint the entire package
|
|
pylint edison
|
|
|
|
# Lint a specific file
|
|
pylint edison/cli.py
|
|
```
|
|
|
|
### Testing
|
|
|
|
In the future, Edison will use `pytest` for testing:
|
|
|
|
```bash
|
|
# Run all tests
|
|
pytest
|
|
|
|
# Run specific tests
|
|
pytest tests/test_api_client.py
|
|
|
|
# Run with coverage
|
|
pytest --cov=edison
|
|
```
|
|
|
|
## Debugging
|
|
|
|
### Logging
|
|
|
|
Enable verbose logging for debugging:
|
|
|
|
```bash
|
|
edison -v your query here
|
|
```
|
|
|
|
Logs are stored in `edison/logs/edison.log`.
|
|
|
|
### Using a Debugger
|
|
|
|
For detailed debugging, you can use Python's built-in debugger or an IDE:
|
|
|
|
```python
|
|
import pdb; pdb.set_trace() # Add this line where you want to break
|
|
|
|
# Or with Python 3.7+
|
|
breakpoint()
|
|
```
|
|
|
|
## Development Workflow
|
|
|
|
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> Feature
|
|
Feature --> Development
|
|
Development --> Testing
|
|
Testing --> Refinement
|
|
Refinement --> Testing: Issues found
|
|
Testing --> PullRequest: Tests pass
|
|
PullRequest --> Review
|
|
Review --> Refinement: Changes requested
|
|
Review --> Merge: Approved
|
|
Merge --> [*]
|
|
```
|
|
|
|
1. **Pick a Feature/Issue**: Select something to work on
|
|
2. **Create a Branch**: Make a new branch for your work
|
|
3. **Development**: Write code, docstrings, and comments
|
|
4. **Testing**: Test your changes thoroughly
|
|
5. **Pull Request**: Submit your changes for review
|
|
6. **Review**: Address any feedback
|
|
7. **Merge**: Changes are merged into main branch
|
|
|
|
## IDE Setup
|
|
|
|
### VS Code
|
|
|
|
Recommended settings for `settings.json`:
|
|
|
|
```json
|
|
{
|
|
"python.linting.pylintEnabled": true,
|
|
"python.linting.enabled": true,
|
|
"python.formatting.provider": "black",
|
|
"python.formatting.blackArgs": ["--line-length", "100"],
|
|
"editor.formatOnSave": true,
|
|
"python.testing.pytestEnabled": true,
|
|
"python.testing.unittestEnabled": false,
|
|
"python.testing.nosetestsEnabled": false,
|
|
"python.testing.pytestArgs": ["tests"]
|
|
}
|
|
```
|
|
|
|
### PyCharm
|
|
|
|
Recommended settings:
|
|
- Enable pylint integration
|
|
- Set code style to PEP 8
|
|
- Configure pytest as the test runner
|
|
|
|
## Pre-Commit Hooks (Future Addition)
|
|
|
|
In the future, we'll add pre-commit hooks for:
|
|
- Code formatting with `black`
|
|
- Import sorting with `isort`
|
|
- Linting with `pylint`
|
|
- Type checking with `mypy`
|
|
|
|
## Troubleshooting Development Issues
|
|
|
|
### Common Issues and Solutions
|
|
|
|
| Issue | Solution |
|
|
|-------|----------|
|
|
| `ModuleNotFoundError` | Ensure your virtual environment is activated and package is installed with `pip install -e .` |
|
|
| Import errors | Check your PYTHONPATH and package structure |
|
|
| API errors | Verify your API key is set correctly |
|
|
| Permission denied | Check file permissions, especially for executable scripts |
|
|
|
|
### Getting Help
|
|
|
|
If you encounter issues during development:
|
|
- Check the documentation
|
|
- Search for similar issues on GitHub
|
|
- Ask for help in your pull request
|
|
- Open a new issue describing your problem |