Thank you for your interest in contributing to the Scientific Dataset Catalog! This project helps researchers manage scientific datasets, their relationships, and metadata across research workflows.
- 🐛 Reporting Bugs - Found an issue? Start here
- 💻 Code Contributions - Want to submit code changes?
- 📋 Code Standards - Style and testing guidelines
- 🔄 Pull Request Process - Step-by-step PR workflow
- 🔒 Security & Conduct - Important policies
- ❓ Getting Help - Where to ask questions
Found a bug? We appreciate your help in improving the project!
- Search existing issues to see if the bug has already been reported
- Try the latest version to see if the issue has been fixed
- Gather information about your environment (Python version, operating system)
A bug is when the software doesn't work as documented or expected. Examples:
- Functions that raise unexpected errors
- Incorrect data returned from API calls
- Installation or setup issues
- Documentation that doesn't match the actual behavior
Not bugs: Feature requests, questions about usage, or requests for new functionality should be submitted as regular GitHub issues with appropriate labels.
When creating a bug report, please include:
- Clear title - Briefly describe the issue
- Python and package versions - Run
python --versionandpip show catalog-client - Operating system - Windows, macOS, Linux distribution
- Steps to reproduce - Minimal code example that demonstrates the issue
- Expected behavior - What you expected to happen
- Actual behavior - What actually happened, including full error messages
- Additional context - Screenshots, logs, or other relevant information
**Title:** CatalogClient.datasets.list() fails with SSL error on macOS
**Environment:**
- Python: 3.12.1
- catalog-client: 0.1.0
- OS: macOS 14.2
**Steps to reproduce:**
```python
from catalog_client import CatalogClient
with CatalogClient(base_url="https://example.com", api_token="test") as client:
client.datasets.list()
```
**Expected:** Returns list of datasets
**Actual:** Raises SSLError: certificate verify failed
**Full error:** [paste complete traceback]Want to contribute code? Great! Here's how to get set up and submit your changes.
Before you start, make sure you have:
- Python 3.12 or higher - Run
python --versionto check - Git - For version control
- uv - Python package manager (installation guide)
This is the minimal setup for external contributors making small bug fixes or improvements:
-
Fork and clone the repository
# Fork the repo on GitHub, then clone your fork git clone https://github.com/YOUR-USERNAME/dataset-catalog.git cd dataset-catalog/dataset-catalog-client
-
Install dependencies
# Install the package with development dependencies uv sync --group dev -
Verify setup works
# Run tests to make sure everything is working uv run pytest -
Make your changes
- Create a new branch:
git checkout -b fix-issue-123 - Make your code changes
- Add or update tests as needed
- Create a new branch:
-
Test your changes
# Run tests to make sure your changes work uv run pytest # Format and check code style uv run ruff format . uv run ruff check .
-
Submit a pull request
- Push to your fork:
git push origin fix-issue-123 - Create a pull request on GitHub
- Push to your fork:
Use descriptive branch names that indicate the type of change:
feature/add-collection-filtering- New featuresbugfix/fix-ssl-error- Bug fixesdocs/update-readme- Documentation changestest/add-lineage-tests- Test improvements
# Run all tests
uv run pytest
# Run specific test file
uv run pytest tests/client/test_datasets.py
# Run with verbose output
uv run pytest -v
# Run tests and show coverage
uv run pytest --cov=catalog_clientWe use ruff for code formatting and linting. Run these before submitting:
# Format code
uv run ruff format .
# Check for style issues
uv run ruff check .
# Fix auto-fixable issues
uv run ruff check --fix .For integration testing, you can test against a live catalog instance:
-
Set up environment variables:
export CATALOG_BASE_URL="https://your-catalog-instance.com" export CATALOG_API_TOKEN="your-api-token"
-
Run integration tests:
# Run examples to verify they work uv run jupyter execute examples/quickstart.ipynb
- Work in the
dataset-catalog-client/directory - This is where the Python package lives - Check existing tests - Look at
tests/for examples of how to test similar functionality - Use examples/ - The
examples/directory contains working code you can reference - Keep changes focused - Smaller, focused changes are easier to review and merge
We use automated tools to handle code formatting, so you don't need to worry about manual style requirements:
- Formatting: We use
rufffor code formatting - runuv run ruff format . - Linting: We use
rufffor linting - runuv run ruff check . - Import sorting: Handled automatically by ruff
- Line length: Follows ruff defaults (we ignore E501 in our config)
Just run the formatting and linting commands, and the tools will handle the rest!
When contributing code, please:
- Add tests for new functionality - If you're adding a new feature, include tests that verify it works
- Ensure existing tests pass - Run
uv run pytestto make sure you didn't break anything - Focus on testing public API behavior - Test the functionality users will interact with, not internal implementation details
- Use mocking for external services - Follow examples in existing test files for how to mock HTTP calls and external dependencies
For code contributions:
- Update docstrings - Add or update docstrings for new public methods and classes
- Update examples - If you're adding new features, consider adding examples to the
examples/directory - Focus on code clarity - Write clear, readable code rather than extensive comments
Ready to submit your changes? Here's the step-by-step process:
-
Fork the repository
- Click "Fork" on the GitHub repository page
- Clone your fork locally
-
Create a feature branch
git checkout -b feature/your-feature-name # or git checkout -b bugfix/fix-description -
Make your changes and test locally
# Make your code changes # Run tests uv run pytest # Format code uv run ruff format . uv run ruff check .
-
Push to your fork
git push origin feature/your-feature-name
-
Create a pull request
- Go to the original repository on GitHub
- Click "New Pull Request"
- Select your branch and fill out the PR template
-
Wait for review
- Our CI will automatically run tests and linting
- A maintainer will review your changes
- We may ask questions or request changes
For your PR to be accepted, it must:
- Have a clear description - Explain what the change does and why it's needed
- Reference related issues - Link to any GitHub issues this addresses (e.g., "Fixes #123")
- Pass all CI checks - Tests and linting must pass
- Have at least one approving review - A maintainer must approve your changes
- Response time: We typically respond to pull requests within a few business days
- Automated testing: Our CI system will automatically run tests and code quality checks
- Code review: A maintainer will review your code for correctness and fit with project goals
- Questions and feedback: We may ask questions or request changes - this is normal and helps ensure quality
- Merge process: Once approved, a maintainer will merge your PR (you don't need to handle the merge)
- Clean up your branch - You can delete your feature branch after it's merged
- Thank you! - Your contribution helps make the project better for everyone
If you believe you have found a security issue, please do not create a public GitHub issue. Instead:
- Contact us privately: Send an email to security@chanzuckerberg.com
- Include details: Provide a clear description of the issue and steps to reproduce it
- Be patient: We'll respond as quickly as possible and work with you to resolve the issue
For more information, see our Security Policy.
This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code.
Examples of behavior that contributes to a positive environment:
- Using welcoming and inclusive language
- Being respectful of differing viewpoints and experiences
- Gracefully accepting constructive criticism
- Focusing on what is best for the community
If you experience or witness unacceptable behavior, please contact opensource@chanzuckerberg.com.
Need help getting started or have questions? Here's where to find answers:
- Check the documentation - Start with USAGE.md for comprehensive usage examples
- Browse examples - Look at the examples/ directory for interactive Jupyter notebooks
- Review the README - The client README has quick start instructions
- Search existing issues - Check GitHub Issues to see if someone else has reported the same problem
- Create a new issue - If you don't find an existing issue, create a new one
- Security issues - Email security@chanzuckerberg.com for security-related concerns
- Don't create public issues - Security issues should be reported privately
- GitHub Issues - For project-related questions, feel free to create a GitHub issue
- Code of Conduct issues - Contact opensource@chanzuckerberg.com
Thank you for taking the time to contribute to the Scientific Dataset Catalog. Whether you're reporting bugs, submitting code, or improving documentation, your contributions help make this project better for the entire research community.
We appreciate your effort and look forward to collaborating with you! 🚀