Models API

This module contains the data models used throughout IssueDB.

Enumerations

Priority

class issuedb.models.Priority[source]

Priority levels for issues.

LOW = "low"
MEDIUM = "medium"
HIGH = "high"
CRITICAL = "critical"
classmethod from_string(value: str) Priority[source]

Create Priority from string value.

Parameters:

value – Priority string (case-insensitive)

Returns:

Priority enum value

Raises:

ValueError – If value is not a valid priority

Example:

from issuedb.models import Priority

p = Priority.from_string("high")
assert p == Priority.HIGH

p = Priority.from_string("HIGH")  # Case insensitive
assert p == Priority.HIGH
to_int() int[source]

Convert priority to integer for sorting (higher number = higher priority).

Returns:

Integer value (1=low, 2=medium, 3=high, 4=critical)

Example:

assert Priority.LOW.to_int() == 1
assert Priority.CRITICAL.to_int() == 4

Status

class issuedb.models.Status[source]

Status levels for issues.

OPEN = "open"
IN_PROGRESS = "in-progress"
CLOSED = "closed"
classmethod from_string(value: str) Status[source]

Create Status from string value.

Parameters:

value – Status string (case-insensitive)

Returns:

Status enum value

Raises:

ValueError – If value is not a valid status

Data Classes

Issue

class issuedb.models.Issue[source]

Represents an issue in the tracking system.

id: int | None

Unique issue identifier. None for new issues, set after creation.

title: str

Issue title (required).

description: str | None

Detailed description (optional).

priority: Priority

Issue priority. Default: Priority.MEDIUM

status: Status

Issue status. Default: Status.OPEN

created_at: datetime

Creation timestamp. Default: current time.

updated_at: datetime

Last update timestamp. Default: current time.

to_dict() dict[source]

Convert issue to dictionary for JSON serialization.

Returns:

Dictionary with all issue fields

Example:

issue = Issue(id=1, title="Fix bug", priority=Priority.HIGH)
d = issue.to_dict()
# {'id': 1, 'title': 'Fix bug', 'priority': 'high', ...}
classmethod from_dict(data: dict) Issue[source]

Create Issue from dictionary.

Parameters:

data – Dictionary with issue fields

Returns:

Issue instance

Example:

data = {'title': 'New issue', 'priority': 'high'}
issue = Issue.from_dict(data)
assert issue.title == 'New issue'
assert issue.priority == Priority.HIGH

Comment

class issuedb.models.Comment[source]

Represents a comment on an issue.

id: int | None

Unique comment identifier. None for new comments.

issue_id: int

ID of the issue this comment belongs to.

text: str

Comment text content.

created_at: datetime

Creation timestamp.

to_dict() dict[source]

Convert comment to dictionary for JSON serialization.

Returns:

Dictionary with all comment fields

AuditLog

class issuedb.models.AuditLog[source]

Represents an audit log entry for tracking changes.

id: int | None

Unique log entry identifier.

issue_id: int

ID of the affected issue.

action: str

Type of action: CREATE, UPDATE, DELETE, BULK_CREATE, BULK_UPDATE

field_name: str | None

Name of the field that changed (for UPDATE actions).

old_value: str | None

Previous value (for UPDATE/DELETE actions).

new_value: str | None

New value (for CREATE/UPDATE actions).

timestamp: datetime

When the change occurred.

to_dict() dict[source]

Convert audit log to dictionary for JSON serialization.

Returns:

Dictionary with all audit log fields

Usage Examples

Creating Issues Programmatically

from issuedb.models import Issue, Priority, Status

# Create a new issue
issue = Issue(
    title="Implement feature X",
    description="Detailed description here",
    priority=Priority.HIGH,
    status=Status.OPEN
)

# Convert to dict for JSON
issue_dict = issue.to_dict()

# Create from dict (e.g., from JSON input)
data = {
    'title': 'Another issue',
    'priority': 'critical',
    'status': 'in-progress'
}
issue2 = Issue.from_dict(data)

Working with Priorities

from issuedb.models import Priority

# Parse from user input
user_input = "HIGH"
try:
    priority = Priority.from_string(user_input)
except ValueError as e:
    print(f"Invalid priority: {e}")

# Sort issues by priority
issues = [...]  # List of Issue objects
sorted_issues = sorted(issues, key=lambda i: i.priority.to_int(), reverse=True)