Contributing ============ Contributions to drf-commons are welcome. Please read this guide before submitting issues or pull requests. A shorter version is available in ``CONTRIBUTING.md`` at the project root. Reporting Issues ---------------- Before opening an issue: 1. Search existing issues to avoid duplicates. 2. Verify the issue reproduces with the latest release. 3. Provide a minimal, reproducible example. 4. Include: drf-commons version, Python version, Django version, DRF version. Feature Requests ---------------- Feature requests are evaluated based on: * **General utility** — Is this useful beyond a single specific use case? * **Composability** — Can it be implemented as a mixin without breaking existing compositions? * **API consistency** — Does it follow the existing naming and interface conventions? * **Maintenance burden** — Does it introduce optional dependencies? Development Process ------------------- See :doc:`development` for the full development workflow including environment setup, Makefile commands, code style, and test configuration. Commit Conventions ------------------ This project uses `Conventional Commits `_. .. code-block:: text (): Allowed types: .. list-table:: :widths: 20 80 :header-rows: 1 * - Type - When to use * - ``feat`` - New feature or behavior * - ``fix`` - Bug fix * - ``test`` - Adding or updating tests only * - ``docs`` - Documentation only * - ``ci`` - CI/CD configuration * - ``chore`` - Build scripts, tooling, non-production code * - ``refactor`` - Code restructure without behavior change * - ``perf`` - Performance improvement * - ``release`` - Version bump commit before tagging Rules: * One concern per commit. If you need "and" in the message, split it into two commits. * Keep commits small and focused — a reviewer should be able to understand the full change without switching context. * Use the imperative mood: "add" not "added", "fix" not "fixing". * No typos in commit messages. * The body should explain *why*, not *what* — the diff already shows what changed. Test Requirements ----------------- * Every new feature must include tests. * Every bug fix must include a regression test. * Tests live in the top-level ``tests/`` directory, mirroring the package structure. * Run the full suite before opening a PR: ``make test`` * Coverage must not drop below 85%: ``make coverage`` Pull Request Checklist ---------------------- Before opening a PR, verify: * ``make quality`` passes (black, isort, flake8, mypy) * ``make test`` passes with no failures * ``make coverage`` shows ≥ 85% total coverage * New public API has type annotations * ``docs/changelog.rst`` and ``CHANGELOG.md`` updated under *Unreleased* * Commit messages follow the conventions above * Each commit addresses a single concern Code of Conduct --------------- This project follows the `Contributor Covenant `_. All contributors are expected to maintain professional, respectful communication. License ------- By contributing, you agree that your contributions will be licensed under the MIT License, the same license that covers drf-commons.