Skip to main content

Reusable, versioned, schema-safe Django Issue Tracker application.

Project description

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.


👤 Maintainer

BinaryFleet


🌟 Contributing

Pull requests welcome. Follow:

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

Project details


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.1.tar.gz (32.6 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.1-py3-none-any.whl (55.3 kB view details)

Uploaded Python 3

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

Hashes for genericissuetracker-0.6.1.tar.gz
Algorithm Hash digest
SHA256 8d70096d9869803c9317c9210aedcc2a0464e0353f1e9fcc1110c4b3bfda8e44
MD5 2e1b7046bdc1810dfbd9b9c3ba8f4ff1
BLAKE2b-256 222e7702712bd23ad5b55525f9b8ab67e0ebe974e5a07f15856ac6391912cba3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for genericissuetracker-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 da2f555c54230f3200c285332983083d190f8541fe695c7caa79e1f8b58b29cc
MD5 fc404e5981da3ccc55a3dc4df90d4186
BLAKE2b-256 8974a7411b70f3609fbfd643401ca7267d2fe29c878d680b2f1104263423308a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page