Skip to main content

Generic Issue Tracker

PyPI Python License Django


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

  1. Install package
  2. Add to INSTALLED_APPS
  3. Include URLs
  4. Configure permissions
  5. Run migrations
  6. Start creating issues

🧱 Versioning Policy

  • Minor releases: new features (backward compatible)
  • Patch releases: internal improvements
  • Major releases: breaking changes

📜 License

MIT License.

See the LICENSE and NOTICE file for details.


👤 Maintainer

BinaryFleet


🌟 Contributing

Pull requests welcome. Follow:

  • DRY principles
  • Schema determinism
  • Versioned serializers
  • No business logic in views

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

genericissuetracker-0.6.2.tar.gz (32.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

genericissuetracker-0.6.2-py3-none-any.whl (55.4 kB view details)

Uploaded Python 3

File details

Details for the file genericissuetracker-0.6.2.tar.gz.

File metadata

  • Download URL: genericissuetracker-0.6.2.tar.gz
  • Upload date:
  • Size: 32.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.11.16

File hashes

Hashes for genericissuetracker-0.6.2.tar.gz
Algorithm Hash digest
SHA256 dfdb2c8db313ff787365f2def31e57251c5f799357d668d20bafdf18e10e2cc6
MD5 c5d4eb67048df7ddb0a7ca5614fafa5c
BLAKE2b-256 397434d5de7c3493813355dcc2d04ca8d731923a3eee8234fb1330a2b926649b

See more details on using hashes here.

File details

Details for the file genericissuetracker-0.6.2-py3-none-any.whl.

File metadata

File hashes

Hashes for genericissuetracker-0.6.2-py3-none-any.whl
Algorithm Hash digest
SHA256 fa0c2ed954b1fc425eecca6d66158a4d20a8619852e6fa3a70f7506ec7b4f3c7
MD5 19f71745e601a52327a768126ca34303
BLAKE2b-256 bbe20bc82ecc43a0638fbe4e79c7605274bf695e5445734e7f5814950dc74d85

See more details on using hashes here.

Release history Release notifications | RSS feed

0.6.3

2 files

This release

0.6.2 This release

2 files

0.6.1

2 files

0.6.0

2 files

0.5.3

2 files

0.5.2

2 files

0.5.1

2 files

0.5.0

2 files

0.4.3

2 files

0.4.2

2 files

0.4.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page