Reusable, versioned, schema-safe Django Issue Tracker application.
Project description
Generic Issue Tracker
A production-grade, reusable, installable Django Issue Tracking library.
🚀 Overview
GenericIssueTracker is a versioned, schema-safe, soft-delete-compatible issue tracking engine designed to integrate into any Django application.
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
Models (Domain)
↓
Services (Identity / Permissions / Pagination / Filtering)
↓
Serializers (Validation & Representation)
↓
Versioned Views
↓
Versioned URLs
↓
OpenAPI Schema
Design 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
pip install genericissuetracker
Add to INSTALLED_APPS:
INSTALLED_APPS = [
...
"genericissuetracker",
]
Include URLs:
path("api/", include("genericissuetracker.urls.root")),
🛠 Required Dependencies
- Django >= 4.2
- djangorestframework >= 3.14
- drf-spectacular >= 0.27
⚙ Configuration
All settings are namespaced:
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:
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:
/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
/api/v1/comments/
Labels
/api/v1/labels/
Attachments
/api/v1/attachments/
🔎 Filtering
Supports:
- SearchFilter
- OrderingFilter
Example:
/api/v1/issues/?search=bug
/api/v1/issues/?ordering=-created_at
📄 Pagination
Configurable via:
GENERIC_ISSUETRACKER_PAGE_SIZE
📖 OpenAPI Schema
Fully compatible with drf-spectacular.
/schema/
/docs/
🧪 Development
Install dev tools:
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file genericissuetracker-0.6.1.tar.gz.
File metadata
- Download URL: genericissuetracker-0.6.1.tar.gz
- Upload date:
- Size: 32.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d70096d9869803c9317c9210aedcc2a0464e0353f1e9fcc1110c4b3bfda8e44
|
|
| MD5 |
2e1b7046bdc1810dfbd9b9c3ba8f4ff1
|
|
| BLAKE2b-256 |
222e7702712bd23ad5b55525f9b8ab67e0ebe974e5a07f15856ac6391912cba3
|
File details
Details for the file genericissuetracker-0.6.1-py3-none-any.whl.
File metadata
- Download URL: genericissuetracker-0.6.1-py3-none-any.whl
- Upload date:
- Size: 55.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da2f555c54230f3200c285332983083d190f8541fe695c7caa79e1f8b58b29cc
|
|
| MD5 |
fc404e5981da3ccc55a3dc4df90d4186
|
|
| BLAKE2b-256 |
8974a7411b70f3609fbfd643401ca7267d2fe29c878d680b2f1104263423308a
|