mirror of https://github.com/doccano/doccano.git
pythonannotation-tooldatasetsactive-learningtext-annotationdatasetnatural-language-processingdata-labelingmachine-learning
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
24 lines
881 B
24 lines
881 B
import abc
|
|
from collections import defaultdict
|
|
from typing import Dict, List, Tuple
|
|
|
|
from django.db.models import QuerySet
|
|
|
|
from data_export.models import ExportedComment, ExportedExample
|
|
|
|
|
|
class Comments(abc.ABC):
|
|
comment_class = ExportedComment
|
|
column = "Comments"
|
|
fields: Tuple[str, ...] = ("example", "user") # To boost performance
|
|
|
|
def __init__(self, examples: QuerySet[ExportedExample], user=None):
|
|
self.comment_groups = defaultdict(list)
|
|
comments = self.comment_class.objects.filter(example__in=examples)
|
|
if user:
|
|
comments = comments.filter(user=user)
|
|
for comment in comments.select_related(*self.fields):
|
|
self.comment_groups[comment.example.id].append(comment)
|
|
|
|
def find_by(self, example_id: int) -> Dict[str, List[ExportedComment]]:
|
|
return {self.column: self.comment_groups[example_id]}
|