Skip to content

Commit e1b5e9d

Browse files
authored
Merge pull request doccano#390 from CatalystCode/enhancement/improve-annotation-creation-performance
Enhancement/Improve annotation creation performance
2 parents e8842a8 + b40b2e8 commit e1b5e9d

File tree

3 files changed

+25
-10
lines changed

3 files changed

+25
-10
lines changed

app/api/tests/test_api.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1351,6 +1351,12 @@ def test_returns_label_count(self):
13511351
self.assertIn('user', response.data)
13521352
self.assertIsInstance(response.data['user'], dict)
13531353

1354+
def test_returns_partial_response(self):
1355+
self.client.login(username=self.super_user_name,
1356+
password=self.super_user_pass)
1357+
response = self.client.get(f'{self.url}?include=user', format='json')
1358+
self.assertEqual(list(response.data.keys()), ['user'])
1359+
13541360

13551361
class TestUserAPI(APITestCase):
13561362

@@ -1527,4 +1533,4 @@ def test_disallows_project_member_to_delete_mapping(self):
15271533
self.client.login(username=self.project_member_name,
15281534
password=self.project_member_pass)
15291535
response = self.client.delete(self.url, format='json')
1530-
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
1536+
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

app/api/views.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,22 @@ class StatisticsAPI(APIView):
6868

6969
def get(self, request, *args, **kwargs):
7070
p = get_object_or_404(Project, pk=self.kwargs['project_id'])
71-
label_count, user_count = self.label_per_data(p)
72-
progress = self.progress(project=p)
73-
response = dict()
74-
response['label'] = label_count
75-
response['user'] = user_count
76-
response.update(progress)
71+
72+
include = set(request.GET.getlist('include'))
73+
response = {}
74+
75+
if not include or 'label' in include or 'user' in include:
76+
label_count, user_count = self.label_per_data(p)
77+
response['label'] = label_count
78+
response['user'] = user_count
79+
80+
if not include or 'total' in include or 'remaining' in include:
81+
progress = self.progress(project=p)
82+
response.update(progress)
83+
84+
if include:
85+
response = {key: value for (key, value) in response.items() if key in include}
86+
7787
return Response(response)
7888

7989
def progress(self, project):
@@ -177,8 +187,7 @@ def create(self, request, *args, **kwargs):
177187
return super().create(request, args, kwargs)
178188

179189
def perform_create(self, serializer):
180-
doc = get_object_or_404(Document, pk=self.kwargs['doc_id'])
181-
serializer.save(document=doc, user=self.request.user)
190+
serializer.save(document_id=self.kwargs['doc_id'], user=self.request.user)
182191

183192

184193
class AnnotationDetail(generics.RetrieveUpdateDestroyAPIView):

app/server/static/components/annotationMixin.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ export default {
242242

243243
annotations() {
244244
// fetch progress info.
245-
HTTP.get('statistics').then((response) => {
245+
HTTP.get('statistics?include=total&include=remaining').then((response) => {
246246
this.total = response.data.total;
247247
this.remaining = response.data.remaining;
248248
});

0 commit comments

Comments
 (0)