Skip to content

Commit 35e4a35

Browse files
committed
Avoid computing label_count on each annotation
1 parent 6fec0e3 commit 35e4a35

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

app/api/tests/test_api.py

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

1334+
def test_returns_partial_response(self):
1335+
self.client.login(username=self.super_user_name,
1336+
password=self.super_user_pass)
1337+
response = self.client.get(f'{self.url}?include=user', format='json')
1338+
self.assertEqual(list(response.data.keys()), ['user'])
1339+
13341340

13351341
class TestUserAPI(APITestCase):
13361342

@@ -1507,4 +1513,4 @@ def test_disallows_project_member_to_delete_mapping(self):
15071513
self.client.login(username=self.project_member_name,
15081514
password=self.project_member_pass)
15091515
response = self.client.delete(self.url, format='json')
1510-
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
1516+
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

app/api/views.py

Lines changed: 16 additions & 6 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):

app/server/static/components/annotationMixin.js

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

237237
annotations() {
238238
// fetch progress info.
239-
HTTP.get('statistics').then((response) => {
239+
HTTP.get('statistics?include=total&include=remaining').then((response) => {
240240
this.total = response.data.total;
241241
this.remaining = response.data.remaining;
242242
});

0 commit comments

Comments
 (0)