Metadata-Version: 2.4
Name: genericissuetracker
Version: 0.6.3
Summary: Reusable, versioned, schema-safe Django Issue Tracker application.
Author: BinaryFleet
License-Expression: MIT
Project-URL: Homepage, https://github.com/binaryfleet/issuetracker
Project-URL: Repository, https://github.com/binaryfleet/issuetracker
Project-URL: Issues, https://github.com/binaryfleet/issuetracker/issues
Project-URL: Documentation, https://github.com/binaryfleet/issuetracker#readme
Keywords: django,django-rest-framework,issue-tracker,bug-tracker,project-management,openapi,drf,api,versioned-api
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: Django
Classifier: Framework :: Django :: 4.2
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Topic :: Software Development :: Bug Tracking
Classifier: Topic :: Internet :: WWW/HTTP :: Dynamic Content
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: Django>=4.2
Requires-Dist: djangorestframework>=3.14
Requires-Dist: drf-spectacular>=0.27
Provides-Extra: dev
Requires-Dist: ruff>=0.4.0; extra == "dev"
Requires-Dist: pytest>=7.0; extra == "dev"
Requires-Dist: pytest-django>=4.5; extra == "dev"
Dynamic: license-file

# genericissuetracker

**A reusable, versioned, schema-safe Django Issue Tracker application.**

<u>Maintained by: <a href="https://djangoplay.org"></a> https://djangoplay.org</u>

`genericissuetracker` is a production-grade, installable Django app that drops issue
tracking -- issues, comments, labels, and attachments -- into any Django project behind
a versioned REST API.

## Features

* Issue management with human-friendly, sequential issue numbers
* Comments and labels
* Attachments, including atomic multipart creation alongside an issue or comment
* Deterministic lifecycle state machine with a full status-history audit trail
* Soft delete throughout
* No dependency on `AUTH_USER_MODEL` -- reporter/uploader identity stored by email/user id
* Versioned REST API (`/api/v1/...`)
* Configurable permissions, pagination, and filtering
* OpenAPI schema support via drf-spectacular

## Requirements

* Python 3.8 or later
* Django 4.2 or later
* djangorestframework 3.14 or later
* drf-spectacular 0.27 or later

## Installation

```bash
pip install genericissuetracker
```

Add it to `INSTALLED_APPS`:

```python
INSTALLED_APPS = [
    ...
    "genericissuetracker",
]
```

Include its URLs:

```python
path("api/", include("genericissuetracker.urls.root")),
```

Then run migrations:

```bash
python manage.py migrate
```

## Configuration

All settings are namespaced under `GENERIC_ISSUETRACKER_<SETTING>`:

| 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"
]
```

## API Endpoints

| Resource | Endpoint |
|---|---|
| Issues | `/api/v1/issues/` |
| Issue detail | `/api/v1/issues/{issue_number}/` |
| Status change | `/api/v1/issues/{issue_number}/change-status/` |
| Comments | `/api/v1/comments/` |
| Labels | `/api/v1/labels/` |
| Attachments | `/api/v1/attachments/` |

Filtering and ordering are supported out of the box:

```
/api/v1/issues/?search=bug
/api/v1/issues/?ordering=-created_at
```

An OpenAPI schema and interactive docs are available at `/schema/` and `/docs/`
(drf-spectacular).

## Identity Model

Reporters and uploaders are tracked by `reporter_email` / `uploaded_by_email` plus an
optional `reporter_user_id` / `uploaded_by_user_id` -- there is no hard foreign key to a
user model, so the package drops into any Django auth setup unmodified.

## Issue Identifiers

* `id` -- UUID, internal
* `issue_number` -- sequential, human-friendly, public

```
/api/v1/issues/12/
```

## Links

* **Homepage:** https://gitlab.com/binaryfleet/issuetracker
* **Repository:** https://gitlab.com/binaryfleet/issuetracker
* **Issues:** https://gitlab.com/binaryfleet/issuetracker/issues
* **Documentation:** https://docs.djangoplay.org/view#projects/issuetracker/

## License

`genericissuetracker` is released under the MIT License.
