Skip to content

Commit

Permalink
Jkmarx/limit events api response (#2944)
Browse files Browse the repository at this point in the history
* Update API to return last 50 items.

* Fix unit test and fix bug in serializer.

* Update ui for avoid performance costing sort.

* Fix comments.

* Fix text.

* Refactor to save lines.
  • Loading branch information
jkmarx committed Aug 13, 2018
1 parent 6063d16 commit dbf1a76
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 38 deletions.
4 changes: 2 additions & 2 deletions refinery/core/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class DataSetSerializer(serializers.ModelSerializer):

def get_is_owner(self, data_set):
try:
data_set.is_owner
return data_set.is_owner
except:
owner = data_set.get_owner()
try:
Expand All @@ -37,7 +37,7 @@ def get_is_owner(self, data_set):

def get_public(self, data_set):
try:
data_set.public
return data_set.public
except:
is_public = data_set.is_public()
return is_public
Expand Down
42 changes: 21 additions & 21 deletions refinery/core/test_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,7 @@ class EventApiV2Tests(APIV2TestCase):
def setUp(self):
super(EventApiV2Tests, self).setUp(
api_base_name="events/",
view=EventViewSet.as_view({"get": "list"})
view=EventViewSet.as_view()
)

def test_get_event_list_provides_access_control_between_users(self):
Expand Down Expand Up @@ -952,16 +952,27 @@ def test_get_event_list(self):

get_request = self.factory.get(urljoin(self.url_root, '/'))
get_request.user = self.user
get_response = self.view(get_request).render()

get_response = self.view(get_request)
self.assertEqual(
json.loads(get_response.content),
get_response.data,
[
{
'date_time': date_times[0],
'message': messages[0],
'date_time': date_times[3],
'message': messages[3],
'data_set': DataSetSerializer(
data_sets[0], context={'request': get_request}
data_sets[3], context={'request': get_request}
).data,
'group': None,
'user': UserSerializer(self.user).data,
'type': 'UPDATE',
'sub_type': 'ANALYSIS_CREATION',
'details': {'display_name': display_names[3]}
},
{
'date_time': date_times[2],
'message': messages[2],
'data_set': DataSetSerializer(
data_sets[2], context={'request': get_request}
).data,
'group': None,
'user': UserSerializer(self.user).data,
Expand All @@ -982,27 +993,16 @@ def test_get_event_list(self):
'details': {'display_name': display_names[1]}
},
{
'date_time': date_times[2],
'message': messages[2],
'date_time': date_times[0],
'message': messages[0],
'data_set': DataSetSerializer(
data_sets[2], context={'request': get_request}
data_sets[0], context={'request': get_request}
).data,
'group': None,
'user': UserSerializer(self.user).data,
'type': 'CREATE',
'sub_type': '',
'details': {}
},
{
'date_time': date_times[3],
'message': messages[3],
'data_set': DataSetSerializer(
data_sets[3], context={'request': get_request}).data,
'group': None,
'user': UserSerializer(self.user).data,
'type': 'UPDATE',
'sub_type': 'ANALYSIS_CREATION',
'details': {'display_name': display_names[3]}
}
]
)
2 changes: 1 addition & 1 deletion refinery/core/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,9 @@
# DRF url routing
core_router = DefaultRouter()
core_router.register(r'workflows', WorkflowViewSet)
core_router.register(r'events', EventViewSet)
core_router.urls.extend([
url(r'^data_sets/$', DataSetsViewSet.as_view()),
url(r'^events/$', EventViewSet.as_view()),
url(r'^user_profile/(?P<uuid>' + UUID_RE + r')/$',
UserProfileViewSet.as_view()),
url(r'^data_sets/(?P<uuid>' + UUID_RE + r')/$',
Expand Down
28 changes: 15 additions & 13 deletions refinery/core/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -626,21 +626,23 @@ def graph(self, request, *args, **kwargs):
)


class EventViewSet(viewsets.ModelViewSet):
class EventViewSet(APIView):
"""API endpoint that allows Events to be viewed"""
queryset = Event.objects.all()
serializer_class = EventSerializer
http_method_names = ['get']

def list(self, request, *args, **kwargs):
"""Overrides ModelViewSet.list to create an updated queryset based
on DataSets that the requesting User has permission to access
"""
def get(self, request):
"""Queryset based on DataSets that the requesting User has permission
to access"""
data_sets_for_user = get_objects_for_user(
request.user, 'core.read_meta_dataset'
request.user,
'core.read_meta_dataset',
accept_global_perms=False
)
self.queryset = self.queryset.filter(data_set__in=data_sets_for_user)
return super(EventViewSet, self).list(request, *args, **kwargs)

user_events = Event.objects.filter(
data_set__in=data_sets_for_user
).order_by('-date_time')[0:50]
serializer = EventSerializer(user_events, many=True,
context={'request': request})
return Response(serializer.data)


class DataSetsViewSet(APIView):
Expand Down Expand Up @@ -671,7 +673,7 @@ def get(self, request):

filtered_data_sets = []
check_own = filters.get('is_owner')
all_owner_perms = ObjectPermissionChecker(self.request.user)
all_owner_perms = ObjectPermissionChecker(request.user)
all_owner_perms.prefetch_perms(user_data_sets)

check_public = filters.get('is_public')
Expand Down
2 changes: 1 addition & 1 deletion refinery/ui/source/js/dashboard/partials/history-card.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ <h4 class="emphasized text-align-center m-t-1-5">
</h4>
</div>
<ul class="list-unstyled scrollable-list main-content-list">
<li ng-repeat="event in $ctrl.events | orderBy: '-date_time'" class="event-item">
<li ng-repeat="event in $ctrl.events" class="event-item">
<span class="history-col-date">
{{ event.date_time | date:"MM/dd/yyyy" }}
</span>
Expand Down

0 comments on commit dbf1a76

Please sign in to comment.