issues/factories.py
Rama main · réplica de lectura del repositorio original.
import hashlib
from django.utils import timezone
from projects.models import Project
from .models import Issue, Grouping
from .utils import get_key_with_mechanism_for_data
def get_or_create_issue(project=None, event_data=None):
"""create issue for testing purposes (code basically stolen from ingest/views.py)"""
if event_data is None:
from events.factories import create_event_data
event_data = create_event_data()
if project is None:
project = Project.objects.create(name="Test project")
key_with_mechanism = get_key_with_mechanism_for_data(event_data, grouping_mechanism=project.grouping_mechanism)
grouping_key = key_with_mechanism.key
if not Grouping.objects.filter(
project=project, grouping_key=grouping_key, grouping_mechanism=key_with_mechanism.mechanism).exists():
issue = Issue.objects.create(
project=project,
**denormalized_issue_fields(),
)
issue_created = True
grouping = Grouping.objects.create(
project=project,
grouping_key=grouping_key,
grouping_key_hash=hashlib.sha256(grouping_key.encode()).hexdigest(),
grouping_mechanism=key_with_mechanism.mechanism,
issue=issue,
)
else:
grouping = Grouping.objects.get(
project=project, grouping_key=grouping_key, grouping_mechanism=key_with_mechanism.mechanism)
issue = grouping.issue
issue_created = False
return issue, issue_created
def denormalized_issue_fields():
"""placeholder values for the "denormalized" (cached, calculated) fields on Issue for which there is no default"""
return {
"first_seen": timezone.now(),
"last_seen": timezone.now(),
"digested_event_count": 1,
}