Contributing
Thank you for considering contributing to Jupyter Export HTML Style!
Development Setup
Prerequisites
Python 3.11+
Git
pip or conda
Setting Up Development Environment
Fork the repository on GitHub
Clone your fork:
git clone https://github.com/YOUR_USERNAME/jupyter_export_html_style.git
cd jupyter_export_html_style
Create a virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
Install in development mode:
pip install -e ".[dev,docs]"
Development Workflow
Running Tests
Run the test suite:
pytest
With coverage:
pytest --cov=jupyter_export_html_style --cov-report=html
Code Style
This project uses:
Black for code formatting
Ruff for linting
MyPy for type checking
Format code:
black jupyter_export_html_style tests
Lint code:
ruff check jupyter_export_html_style tests
Type check:
mypy jupyter_export_html_style
Building Documentation
Build the documentation locally:
cd docs
make html
View the documentation:
python -m http.server -d docs/_build/html
Making Changes
Branch Naming
Use descriptive branch names:
feature/add-new-exporterfix/style-preprocessing-bugdocs/improve-installation-guide
Commit Messages
Follow these guidelines:
Use present tense (“Add feature” not “Added feature”)
Use imperative mood (“Move cursor to…” not “Moves cursor to…”)
Limit first line to 72 characters
Reference issues and pull requests when relevant
Pull Request Process
Update documentation for any changed functionality
Add tests for new features
Ensure all tests pass
Update CHANGELOG.md with your changes
Submit a pull request with a clear description
Testing Guidelines
Writing Tests
Place tests in the
tests/directoryUse descriptive test names:
test_style_preprocessor_extracts_metadata()Test both success and failure cases
Use fixtures for common test setup
Example test structure:
import pytest
from jupyter_export_html_style import StylePreprocessor
def test_style_preprocessor_basic():
"""Test basic style preprocessing."""
preprocessor = StylePreprocessor()
# Test implementation
assert True
def test_style_preprocessor_with_custom_key():
"""Test preprocessor with custom metadata key."""
preprocessor = StylePreprocessor()
preprocessor.style_metadata_key = "custom_style"
# Test implementation
assert True
Building and Packaging
Building Python Wheels
pip install build
python -m build
Building Conda Packages
conda install conda-build
conda build conda.recipe
Publishing
Maintainers can publish packages to PyPI and Anaconda Cloud.
Publishing to PyPI
pip install twine
# Using token authentication (recommended)
python -m twine upload --username __token__ --password $PYPI_TOKEN dist/*
Set the PYPI_TOKEN environment variable or GitHub secret with your PyPI API token.
Publishing to Anaconda Cloud
Modern conda-build (3.18+) creates .conda format packages by default, which are more efficient than .tar.bz2 packages.
conda install anaconda-client
# Find the built package (supports both .conda and .tar.bz2 formats)
anaconda upload --token $ANACONDA_TOKEN $(conda info --base)/conda-bld/noarch/jupyter-export-html-style-*.conda
# Or if using older format:
anaconda upload --token $ANACONDA_TOKEN $(conda info --base)/conda-bld/noarch/jupyter-export-html-style-*.tar.bz2
Set the ANACONDA_TOKEN environment variable or GitHub secret with your Anaconda Cloud API token.
Required GitHub Secrets for CI/CD
If setting up automated publishing in GitHub Actions, configure these secrets in your repository settings:
ANACONDA_TOKEN: API token from Anaconda Cloud for uploading conda packagesPYPI_TOKEN: API token from PyPI for uploading Python packages
Documentation Guidelines
Use Markdown for documentation files
Include code examples
Keep explanations clear and concise
Add links to related resources
Update API documentation for code changes
Code of Conduct
Our Standards
Be respectful and inclusive
Welcome newcomers
Accept constructive criticism
Focus on what’s best for the community
Show empathy towards others
Reporting Issues
Report unacceptable behavior to the project maintainers.
Getting Help
Documentation: Check the docs first
Issues: Search existing issues
Discussions: Use GitHub Discussions for questions
Email: Contact maintainers for sensitive matters
License
By contributing, you agree that your contributions will be licensed under the MIT License.