DocsGeneric Issue Tracker
Generic Issue Tracker
A production-grade, reusable, installable Django issue tracking library — versioned, schema-safe, soft-delete-compatible, built to integrate into any Django application.
Latest v0.6.0Updated Oct 1, 202628 pages
bash
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtStart here
The shortest path from nothing to your first result.
- 11 min readInstallationUse the repository's declared dependency and bootstrap mechanism.
- 21 min readConfigurationKeep environment-specific values outside committed source code.
- 31 min readPermissionsPermissions should be evaluated from the authenticated identity and project membership.
Browse by topic
Grouped the same way as the sidebar.
Works with
Projects that Generic Issue Tracker declares a relationship with in project.json.
Full project README
- Website:: https://djangoplay.org
- Documentation:: https://docs.djangoplay.org
- Contact: contact@djangoplay.org
🚀 Overview
It provides:
- Issue management
- Comments
- Labels
- Attachments
- Human-friendly issue numbers
- Versioned REST API
- Configurable permissions
- Configurable pagination
- Configurable filtering
- OpenAPI schema support (drf-spectacular compatible)
Designed for:
- SaaS platforms
- Internal tools
- Public open-source issue hubs
- Enterprise-grade Django systems
🏗 Architecture
Layered Design
plaintext
Models (Domain)
↓
Services (Identity / Permissions / Pagination / Filtering)
↓
Serializers (Validation & Representation)
↓
Versioned Views
↓
Versioned URLs
↓
OpenAPI SchemaDesign Principles
- No dependency on AUTH_USER_MODEL
- Soft delete first-class
- UUID internal identity
- Sequential issue_number public identity
- Strict versioning (
/api/v1/) - Deterministic schema
- Zero business logic in views
- Fat serializers, thin views
- No runtime schema mutation
📦 Installation
bash
pip install genericissuetrackerAdd to INSTALLED_APPS:
python
INSTALLED_APPS = [
...
"genericissuetracker",
]Include URLs:
python
path("api/", include("genericissuetracker.urls.root")),🛠 Required Dependencies
- Django >= 4.2
- djangorestframework >= 3.14
- drf-spectacular >= 0.27
⚙ Configuration
All settings are namespaced:
python
GENERIC_ISSUETRACKER_<SETTING>Available Settings
| Setting | Description |
|---|---|
| IDENTITY_RESOLVER | Custom identity resolver path |
| ALLOW_ANONYMOUS_REPORTING | Allow anonymous issue creation |
| MAX_ATTACHMENTS | Max attachments per issue |
| MAX_ATTACHMENT_SIZE_MB | Max file size |
| DEFAULT_PERMISSION_CLASSES | Default DRF permissions |
| DEFAULT_PAGINATION_CLASS | Pagination class |
| PAGE_SIZE | Pagination size |
| DEFAULT_FILTER_BACKENDS | Filtering backends |
Example:
python
GENERIC_ISSUETRACKER_DEFAULT_PERMISSION_CLASSES = [
"rest_framework.permissions.IsAuthenticated"
]🔐 Identity Model
Reporter is stored as:
- reporter_email
- reporter_user_id (optional)
No direct ForeignKey to user model.
🧾 Issue Identifiers
id→ UUID (internal)issue_number→ Sequential public identifier
Example:
plaintext
/api/v1/issues/12/📚 API Endpoints
Issues
| Method | Endpoint |
|---|---|
| GET | /api/v1/issues/ |
| GET | /api/v1/issues/{issue_number}/ |
| POST | /api/v1/issues/ |
| PUT | /api/v1/issues/{issue_number}/ |
| PATCH | /api/v1/issues/{issue_number}/ |
| DELETE | /api/v1/issues/{issue_number}/ |
Comments
plaintext
/api/v1/comments/Labels
plaintext
/api/v1/labels/Attachments
plaintext
/api/v1/attachments/🔎 Filtering
Supports:
- SearchFilter
- OrderingFilter
Example:
plaintext
/api/v1/issues/?search=bug
/api/v1/issues/?ordering=-created_at📄 Pagination
Configurable via:
plaintext
GENERIC_ISSUETRACKER_PAGE_SIZE📖 OpenAPI Schema
Fully compatible with drf-spectacular.
plaintext
/schema/
/docs/🧪 Development
Install dev tools:
bash
pip install -e ".[dev]"
ruff check .🧩 Integration Guide
- Install package
- Add to INSTALLED_APPS
- Include URLs
- Configure permissions
- Run migrations
- Start creating issues
🧱 Versioning Policy
- Minor releases: new features (backward compatible)
- Patch releases: internal improvements
- Major releases: breaking changes
📜 License
MIT License.
👤 Maintainer
BinaryFleet
🌟 Contributing
Pull requests welcome. Follow:
- DRY principles
- Schema determinism
- Versioned serializers
- No business logic in views
License
Licensed under the Apache License.