Files
@ cadd69061f18
Branch filter:
Location: website/conservancy/usethesource/models.py - annotation
cadd69061f18
1.9 KiB
text/x-python
Mirror UTS comments to an email list
cadd69061f18 cadd69061f18 cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cadd69061f18 cadd69061f18 cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cadd69061f18 cadd69061f18 cc3224bb60dd cc3224bb60dd 7a682ed6d0ff 7a682ed6d0ff 7a682ed6d0ff 7a682ed6d0ff cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cc3224bb60dd cadd69061f18 cadd69061f18 cc3224bb60dd cc3224bb60dd cc3224bb60dd cc3224bb60dd cadd69061f18 cc3224bb60dd cc3224bb60dd cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cadd69061f18 cc3224bb60dd cc3224bb60dd cc3224bb60dd | import uuid
from django.contrib.auth.models import User
from django.db import models
class Candidate(models.Model):
"""A source/binary release we'd like to verify CCS status of."""
name = models.CharField('Candidate name', max_length=50)
slug = models.SlugField(max_length=50, unique=True)
vendor = models.CharField('Vendor name', max_length=50)
device = models.CharField('Device name', max_length=50)
release_date = models.DateField(null=True, blank=True)
description = models.TextField(blank=True)
source_url = models.URLField()
binary_url = models.URLField(blank=True)
ordering = models.SmallIntegerField(default=0)
class Meta:
ordering = ['ordering', 'name']
def __str__(self):
return self.name
def gen_message_id():
"""Generate a time-based identifier for use in "In-Reply-To" header."""
return f'<{uuid.uuid1()}@sfconservancy.org>'
class Comment(models.Model):
"""A comment about experiences or learnings building the candidate."""
candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.PROTECT)
time = models.DateTimeField(auto_now_add=True)
message = models.TextField()
email_message_id = models.CharField(max_length=255, default=gen_message_id)
def __str__(self):
return f'{self.id}: {self.candidate.name}, {self.user}, {self.time}'
def _find_previous_comment(self):
try:
return self.__class__.objects.filter(candidate=self.candidate, id__lt=self.id).latest('id')
except self.__class__.DoesNotExist:
return None
def in_reply_to(self):
"""Determine the message_id of the previous comment.
Used for email threading.
"""
if prev_comment := self._find_previous_comment():
return prev_comment.email_message_id
else:
return None
class Meta:
ordering = ['id']
|