Message ID | 20180510144506.9702-2-stephen@that.guru |
---|---|
State | Accepted |
Headers | show |
Series | [1/2] REST: Resolve performance issues with '/events' web view | expand |
Stephen Finucane <stephen@that.guru> writes: > This reverts commit 90d9ee14e73e8ec9248e89c788d64867c4a4bb74. > > The root cause of this performance issue was not the use of the > JSONRenderer but rather the population of filter forms. The latter is > now disabled, meaning we can start using the original renderer. > > Signed-off-by: Stephen Finucane <stephen@that.guru> > Cc: Daniel Axtens <dja@axtens.net> Acked-by: Daniel Axtens <dja@axtens.net> I have applied the series; thanks so much for following this up. Regards, Daniel > --- > patchwork/api/event.py | 15 --------------- > patchwork/templates/patchwork/event-list.html | 17 ----------------- > 2 files changed, 32 deletions(-) > delete mode 100644 patchwork/templates/patchwork/event-list.html > > diff --git a/patchwork/api/event.py b/patchwork/api/event.py > index b6626ec7..cce25a75 100644 > --- a/patchwork/api/event.py > +++ b/patchwork/api/event.py > @@ -18,13 +18,10 @@ > # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA > > from collections import OrderedDict > -import json > > from rest_framework.generics import ListAPIView > from rest_framework.serializers import ModelSerializer > from rest_framework.serializers import SerializerMethodField > -from rest_framework.renderers import JSONRenderer > -from rest_framework.renderers import TemplateHTMLRenderer > > from patchwork.api.embedded import CheckSerializer > from patchwork.api.embedded import CoverLetterSerializer > @@ -88,21 +85,9 @@ class EventSerializer(ModelSerializer): > read_only_fields = fields > > > -# The standard template html renderer is broken: > -# https://github.com/encode/django-rest-framework/issues/5236 > -class JSONListHTMLRenderer(TemplateHTMLRenderer): > - def get_template_context(self, data, renderer_context): > - response = renderer_context['response'] > - if response.exception: > - data['status_code'] = response.status_code > - return {'data': json.dumps(data, indent=4)} > - > - > class EventList(ListAPIView): > """List events.""" > > - renderer_classes = (JSONRenderer, JSONListHTMLRenderer) > - template_name = 'patchwork/event-list.html' > serializer_class = EventSerializer > filter_class = EventFilterSet > page_size_query_param = None # fixed page size > diff --git a/patchwork/templates/patchwork/event-list.html b/patchwork/templates/patchwork/event-list.html > deleted file mode 100644 > index 821c6897..00000000 > --- a/patchwork/templates/patchwork/event-list.html > +++ /dev/null > @@ -1,17 +0,0 @@ > -{% extends "base.html" %} > - > -{% load person %} > -{% load static %} > - > -{% block title %}Event List{% endblock %} > -{% block patch_active %}active{% endblock %} > - > -{% block body %} > - > -<p>Due to a currently undiagnosed issue with django-rest-framework, the browsable API is very CPU intensive and has been disabled. The JSON output is:</p> > - > -<pre> > -{{data}} > -</pre> > - > -{% endblock %} > -- > 2.14.3
diff --git a/patchwork/api/event.py b/patchwork/api/event.py index b6626ec7..cce25a75 100644 --- a/patchwork/api/event.py +++ b/patchwork/api/event.py @@ -18,13 +18,10 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA from collections import OrderedDict -import json from rest_framework.generics import ListAPIView from rest_framework.serializers import ModelSerializer from rest_framework.serializers import SerializerMethodField -from rest_framework.renderers import JSONRenderer -from rest_framework.renderers import TemplateHTMLRenderer from patchwork.api.embedded import CheckSerializer from patchwork.api.embedded import CoverLetterSerializer @@ -88,21 +85,9 @@ class EventSerializer(ModelSerializer): read_only_fields = fields -# The standard template html renderer is broken: -# https://github.com/encode/django-rest-framework/issues/5236 -class JSONListHTMLRenderer(TemplateHTMLRenderer): - def get_template_context(self, data, renderer_context): - response = renderer_context['response'] - if response.exception: - data['status_code'] = response.status_code - return {'data': json.dumps(data, indent=4)} - - class EventList(ListAPIView): """List events.""" - renderer_classes = (JSONRenderer, JSONListHTMLRenderer) - template_name = 'patchwork/event-list.html' serializer_class = EventSerializer filter_class = EventFilterSet page_size_query_param = None # fixed page size diff --git a/patchwork/templates/patchwork/event-list.html b/patchwork/templates/patchwork/event-list.html deleted file mode 100644 index 821c6897..00000000 --- a/patchwork/templates/patchwork/event-list.html +++ /dev/null @@ -1,17 +0,0 @@ -{% extends "base.html" %} - -{% load person %} -{% load static %} - -{% block title %}Event List{% endblock %} -{% block patch_active %}active{% endblock %} - -{% block body %} - -<p>Due to a currently undiagnosed issue with django-rest-framework, the browsable API is very CPU intensive and has been disabled. The JSON output is:</p> - -<pre> -{{data}} -</pre> - -{% endblock %}
This reverts commit 90d9ee14e73e8ec9248e89c788d64867c4a4bb74. The root cause of this performance issue was not the use of the JSONRenderer but rather the population of filter forms. The latter is now disabled, meaning we can start using the original renderer. Signed-off-by: Stephen Finucane <stephen@that.guru> Cc: Daniel Axtens <dja@axtens.net> --- patchwork/api/event.py | 15 --------------- patchwork/templates/patchwork/event-list.html | 17 ----------------- 2 files changed, 32 deletions(-) delete mode 100644 patchwork/templates/patchwork/event-list.html