Contributing

We welcome contributions to dj-flexi-tag! Here’s how you can help:

Setting Up for Development

  1. Fork the repository on Bitbucket

  2. Clone your fork locally:

    git clone https://bitbucket.org/your-username/dj-flexi-tag.git
    cd dj-flexi-tag
    
  3. Create a virtual environment and install development dependencies:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    pip install -e ".[dev,test,docs]"
    
  4. Set up pre-commit hooks:

    pre-commit install
    

Running Tests

We use tox to run tests across different Python and Django versions:

tox

To run tests for a specific environment:

tox -e py39-django32

Or to run tests with your current Python version:

python runtests.py

You can also run specific tests:

python -m pytest flexi_tag/tests/test_utils/test_service.py -v

Code Style

We follow PEP 8 and use Black for code formatting. Run Black before submitting:

black flexi_tag

We also use ruff for linting:

ruff flexi_tag

Documentation

To build the documentation locally:

cd docs
make html

The documentation will be available in _build/html/.

Pull Request Process

  1. Create a new branch for your feature or bugfix: git checkout -b feature/your-feature-name

  2. Make your changes and add tests

  3. Ensure all tests pass: tox

  4. Update documentation if needed

  5. Push your branch: git push origin feature/your-feature-name

  6. Submit a pull request to the main repository

We aim to review and respond to pull requests within a few days.

Reporting Issues

When reporting issues, please include:

  • A clear description of the problem

  • Steps to reproduce

  • Expected vs. actual behavior

  • Django and Python versions

  • Any relevant logs or error messages

Feature Requests

Feature requests are welcome! Please provide:

  • A clear description of the feature

  • Any relevant use cases

  • How the feature would benefit the project

Release Process

For maintainers, the release process is:

  1. Update version in setup.py

  2. Update CHANGELOG.md

  3. Create a new tag: git tag vX.Y.Z

  4. Push the tag: git push origin vX.Y.Z

  5. The CI/CD pipeline will build and publish to PyPI

Code of Conduct

We expect all contributors to be respectful and considerate of others. Any form of harassment or discriminatory behavior will not be tolerated.