From 53a1205dd03703e6f93bbf7bcb2686c617638242 Mon Sep 17 00:00:00 2001 From: Vadim Date: Fri, 24 Jun 2016 15:04:18 +0300 Subject: [PATCH 01/25] Fix partial update for the ListSerializer. --- rest_framework/serializers.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3fcc85c3b..9f06f5a4f 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -533,6 +533,10 @@ class ListSerializer(BaseSerializer): super(ListSerializer, self).__init__(*args, **kwargs) self.child.bind(field_name='', parent=self) + def bind(self, field_name, parent): + super(ListSerializer, self).bind(field_name, parent) + self.partial = self.parent.partial + def get_initial(self): if hasattr(self, 'initial_data'): return self.to_representation(self.initial_data) @@ -584,6 +588,9 @@ class ListSerializer(BaseSerializer): }) if not self.allow_empty and len(data) == 0: + if self.partial: + raise SkipField() + message = self.error_messages['empty'] raise ValidationError({ api_settings.NON_FIELD_ERRORS_KEY: [message] From c0f4dfd8f33819dab001b5b23da148cc7830b1ba Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 29 Jun 2016 09:48:31 +0300 Subject: [PATCH 02/25] Add tests for the ListSerializer for the TestSerializerPartialUsage. Additional fix partial update for the ListSerializer. --- rest_framework/serializers.py | 2 +- tests/test_serializer_lists.py | 214 +++++++++++++++++++++++++++++++++ 2 files changed, 215 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 9f06f5a4f..c4057dc46 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -588,7 +588,7 @@ class ListSerializer(BaseSerializer): }) if not self.allow_empty and len(data) == 0: - if self.partial: + if self.parent and self.partial: raise SkipField() message = self.error_messages['empty'] diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 607ddba04..740197c28 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -318,3 +318,217 @@ class TestSerializerPartialUsage: assert serializer.is_valid() assert serializer.validated_data == {} assert serializer.errors == {} + + def test_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + + serializer = ListSerializer(instance, data=[], partial=True, many=True) + assert serializer.is_valid() + assert serializer.validated_data == [] + assert serializer.errors == [] + + def test_update_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + input_data = [{'update_field': 31}, {'update_field': 41}] + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=input_data, partial=True, many=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == [] + + def test_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=[], allow_empty=False, partial=True, many=True) + assert not serializer.is_valid() + assert serializer.validated_data == [] + assert len(serializer.errors) == 1 + assert serializer.errors['non_field_errors'] == [u'This list may not be empty.'] + + def test_update_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + instance = [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + input_data = [{'update_field': 31}, {'update_field': 41}] + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + serializer = ListSerializer( + instance, data=input_data, allow_empty=False, partial=True, many=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == [] + + def test_as_field_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + + serializer = Serializer(instance, data={}, partial=True) + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {} + + def test_udate_as_field_allow_empty_true(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + input_data_1 = {'extra_field': 2} + input_data_2 = { + 'list_field': [ + {'update_field': 31}, + {'update_field': 41}, + ] + } + + # data_1 + serializer = Serializer(instance, data=input_data_1, partial=True) + assert serializer.is_valid() + assert len(serializer.validated_data) == 1 + assert serializer.validated_data['extra_field'] == 2 + assert serializer.errors == {} + + # data_2 + serializer = Serializer(instance, data=input_data_2, partial=True) + assert serializer.is_valid() + + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + for index, data in enumerate(serializer.validated_data['list_field']): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == {} + + def test_as_field_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True, allow_empty=False) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + + serializer = Serializer(instance, data={}, partial=True) + assert serializer.is_valid() + assert serializer.validated_data == {} + assert serializer.errors == {} + + def test_update_as_field_allow_empty_false(self): + class ListSerializer(serializers.Serializer): + update_field = serializers.IntegerField() + store_field = serializers.IntegerField() + + class Serializer(serializers.Serializer): + extra_field = serializers.IntegerField() + list_field = ListSerializer(many=True, allow_empty=False) + + instance = { + 'extra_field': 1, + 'list_field': [ + {'update_field': 11, 'store_field': 12}, + {'update_field': 21, 'store_field': 22}, + ] + } + input_data_1 = {'extra_field': 2} + input_data_2 = { + 'list_field': [ + {'update_field': 31}, + {'update_field': 41}, + ] + } + updated_data_list = [ + {'update_field': 31, 'store_field': 12}, + {'update_field': 41, 'store_field': 22}, + ] + + # data_1 + serializer = Serializer(instance, data=input_data_1, partial=True) + assert serializer.is_valid() + assert serializer.errors == {} + + # data_2 + serializer = Serializer(instance, data=input_data_2, partial=True) + assert serializer.is_valid() + + for index, data in enumerate(serializer.validated_data['list_field']): + for key, value in data.items(): + assert value == updated_data_list[index][key] + + assert serializer.errors == {} From c752e9618fedc6eb3e103cf8740742ff3e731899 Mon Sep 17 00:00:00 2001 From: Vadim Date: Wed, 29 Jun 2016 10:21:28 +0300 Subject: [PATCH 03/25] Fix test for py32-django18. --- tests/test_serializer_lists.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 740197c28..a7955d83c 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -374,7 +374,7 @@ class TestSerializerPartialUsage: assert not serializer.is_valid() assert serializer.validated_data == [] assert len(serializer.errors) == 1 - assert serializer.errors['non_field_errors'] == [u'This list may not be empty.'] + assert serializer.errors['non_field_errors'][0] == 'This list may not be empty.' def test_update_allow_empty_false(self): class ListSerializer(serializers.Serializer): From ec4761225e5a1683b046752e7090e91abfa52f54 Mon Sep 17 00:00:00 2001 From: dfavato Date: Tue, 23 Aug 2016 14:52:20 -0300 Subject: [PATCH 04/25] Set self.count before self.limit in LimitOffsetPagination By doing this it is possible to override get_limit in order to return all records if the request has a predefined param. For example, if one wants that all records are retrieved if url has &limit=-1, get_limit could return self.count in this case. Otherwise, if self.count is set after self.limit then, to achive the same result, one has to override get_limit and paginate_queryset, or run get_limit twice. --- rest_framework/pagination.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index c54894efc..755debea3 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -303,12 +303,12 @@ class LimitOffsetPagination(BasePagination): template = 'rest_framework/pagination/numbers.html' def paginate_queryset(self, queryset, request, view=None): + self.count = _get_count(queryset) self.limit = self.get_limit(request) if self.limit is None: return None self.offset = self.get_offset(request) - self.count = _get_count(queryset) self.request = request if self.count > self.limit and self.template is not None: self.display_page_controls = True From b558c9ecc4d0ebd9d7e3730ea80fa06d9d01591a Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Wed, 15 Mar 2017 08:07:12 +0100 Subject: [PATCH 05/25] Allow the documentation and schema shortcut functions to get a list of urls to introspect. --- rest_framework/documentation.py | 18 +++++++++++------- rest_framework/schemas.py | 6 ++++-- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/rest_framework/documentation.py b/rest_framework/documentation.py index 3a56b7cb1..6ade12210 100644 --- a/rest_framework/documentation.py +++ b/rest_framework/documentation.py @@ -6,7 +6,7 @@ from rest_framework.renderers import ( from rest_framework.schemas import get_schema_view -def get_docs_view(title=None, description=None, schema_url=None, public=True): +def get_docs_view(title=None, description=None, schema_url=None, public=True, patterns=None): renderer_classes = [DocumentationRenderer, CoreJSONRenderer] return get_schema_view( @@ -14,11 +14,12 @@ def get_docs_view(title=None, description=None, schema_url=None, public=True): url=schema_url, description=description, renderer_classes=renderer_classes, - public=public + public=public, + patterns=patterns, ) -def get_schemajs_view(title=None, description=None, schema_url=None, public=True): +def get_schemajs_view(title=None, description=None, schema_url=None, public=True, patterns=None): renderer_classes = [SchemaJSRenderer] return get_schema_view( @@ -26,22 +27,25 @@ def get_schemajs_view(title=None, description=None, schema_url=None, public=True url=schema_url, description=description, renderer_classes=renderer_classes, - public=public + public=public, + patterns=patterns, ) -def include_docs_urls(title=None, description=None, schema_url=None, public=True): +def include_docs_urls(title=None, description=None, schema_url=None, public=True, patterns=None): docs_view = get_docs_view( title=title, description=description, schema_url=schema_url, - public=public + public=public, + patterns=patterns, ) schema_js_view = get_schemajs_view( title=title, description=description, schema_url=schema_url, - public=public + public=public, + patterns=patterns, ) urls = [ url(r'^$', docs_view, name='docs-index'), diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index ecfe835a9..5af3ab1f0 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -690,11 +690,13 @@ class SchemaView(APIView): return Response(schema) -def get_schema_view(title=None, url=None, description=None, urlconf=None, renderer_classes=None, public=False): +def get_schema_view( + title=None, url=None, description=None, urlconf=None, + renderer_classes=None, public=False, patterns=None): """ Return a schema view. """ - generator = SchemaGenerator(title=title, url=url, description=description, urlconf=urlconf) + generator = SchemaGenerator(title=title, url=url, description=description, urlconf=urlconf, patterns=patterns) return SchemaView.as_view( renderer_classes=renderer_classes, schema_generator=generator, From 1ee54fb85ccc71ab689515dc33f9e99a4d872472 Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Wed, 15 Mar 2017 23:45:41 -0400 Subject: [PATCH 06/25] Added test for DateTimeField validation when server has timezone with DST and input is a native time in a DST shift interval. Added pytz to requirements-testing.txt to reproduce the case. --- requirements/requirements-testing.txt | 1 + tests/test_fields.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/requirements/requirements-testing.txt b/requirements/requirements-testing.txt index b9e168442..ea2022512 100644 --- a/requirements/requirements-testing.txt +++ b/requirements/requirements-testing.txt @@ -2,3 +2,4 @@ pytest==3.0.5 pytest-django==3.1.2 pytest-cov==2.4.0 +pytz==2016.10 diff --git a/tests/test_fields.py b/tests/test_fields.py index 16221d4cc..971e7f0e1 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,7 +9,7 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import utc +from django.utils.timezone import utc, pytz import rest_framework from rest_framework import serializers @@ -1205,6 +1205,23 @@ class TestNaiveDateTimeField(FieldValues): field = serializers.DateTimeField(default_timezone=None) +class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): + """ + Invalid values for `DateTimeField` with datetime in DST shift (non-existing or ambiguous) and timezone with DST. + Timezone America/New_York has DST shift from 2017-03-12T02:00:00 to 2017-03-12T03:00:00 and + from 2017-11-05T02:00:00 to 2017-11-05T01:00:00 in 2017. + """ + valid_inputs = {} + invalid_inputs = { + '2017-03-12T02:30:00': [ + 'Datetime can not be converted to server timezone due to NonExistentTimeError.'], + '2017-11-05T01:30:00': [ + 'Datetime can not be converted to server timezone due to AmbiguousTimeError.'] + } + outputs = {} + field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) + + class TestTimeField(FieldValues): """ Valid and invalid values for `TimeField`. From d4726dab81412af779cb7fcdc7c29fc07edc4bea Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Sat, 18 Mar 2017 22:43:08 -0400 Subject: [PATCH 07/25] Fix bug for not existent or ambiguous datetime during native to aware conversion in timezone with DST. Ref: #4986 --- rest_framework/fields.py | 6 +++++- tests/test_fields.py | 8 +++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 5a881c772..fa6ff0bf8 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1085,6 +1085,7 @@ class DateTimeField(Field): default_error_messages = { 'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'), 'date': _('Expected a datetime but got a date.'), + 'make_aware': _('Datetime can not be represented in timezone "{timezone}".') } datetime_parser = datetime.datetime.strptime @@ -1105,7 +1106,10 @@ class DateTimeField(Field): field_timezone = getattr(self, 'timezone', self.default_timezone()) if (field_timezone is not None) and not timezone.is_aware(value): - return timezone.make_aware(value, field_timezone) + try: + return timezone.make_aware(value, field_timezone) + except Exception: + self.fail('make_aware', timezone=field_timezone) elif (field_timezone is None) and timezone.is_aware(value): return timezone.make_naive(value, utc) return value diff --git a/tests/test_fields.py b/tests/test_fields.py index 971e7f0e1..da4a05091 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,7 +9,7 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import utc, pytz +from django.utils.timezone import pytz, utc import rest_framework from rest_framework import serializers @@ -1213,10 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): """ valid_inputs = {} invalid_inputs = { - '2017-03-12T02:30:00': [ - 'Datetime can not be converted to server timezone due to NonExistentTimeError.'], - '2017-11-05T01:30:00': [ - 'Datetime can not be converted to server timezone due to AmbiguousTimeError.'] + '2017-03-12T02:30:00': ['Datetime can not be represented in timezone "America/New_York".'], + '2017-11-05T01:30:00': ['Datetime can not be represented in timezone "America/New_York".'] } outputs = {} field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) From e4a1bd140b3c96dd6724b413a337f639b5a949ef Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Mon, 20 Mar 2017 18:47:25 -0400 Subject: [PATCH 08/25] Update error message. Ref: #4986 --- rest_framework/fields.py | 2 +- tests/test_fields.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index fa6ff0bf8..6dd40acd9 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1085,7 +1085,7 @@ class DateTimeField(Field): default_error_messages = { 'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'), 'date': _('Expected a datetime but got a date.'), - 'make_aware': _('Datetime can not be represented in timezone "{timezone}".') + 'make_aware': _('Invalid datetime for the timezone "{timezone}".') } datetime_parser = datetime.datetime.strptime diff --git a/tests/test_fields.py b/tests/test_fields.py index da4a05091..457e368cc 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -1213,8 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): """ valid_inputs = {} invalid_inputs = { - '2017-03-12T02:30:00': ['Datetime can not be represented in timezone "America/New_York".'], - '2017-11-05T01:30:00': ['Datetime can not be represented in timezone "America/New_York".'] + '2017-03-12T02:30:00': ['Invalid datetime for the timezone "America/New_York".'], + '2017-11-05T01:30:00': ['Invalid datetime for the timezone "America/New_York".'] } outputs = {} field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) From b0a0c30bfe4643e6824a3ad4d428a9742997aabe Mon Sep 17 00:00:00 2001 From: Sergey Petrunin Date: Wed, 22 Mar 2017 00:01:07 -0400 Subject: [PATCH 09/25] Added pytz exception in compat module. Mock pytz.timezone localize in tests. Ref: #4986 --- requirements/requirements-testing.txt | 1 - rest_framework/compat.py | 9 +++++++++ rest_framework/fields.py | 5 +++-- tests/test_fields.py | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/requirements/requirements-testing.txt b/requirements/requirements-testing.txt index ea2022512..b9e168442 100644 --- a/requirements/requirements-testing.txt +++ b/requirements/requirements-testing.txt @@ -2,4 +2,3 @@ pytest==3.0.5 pytest-django==3.1.2 pytest-cov==2.4.0 -pytz==2016.10 diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 45ac49841..168bccf83 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -275,6 +275,14 @@ except ImportError: def pygments_css(style): return None + +try: + import pytz + from pytz.exceptions import InvalidTimeError +except ImportError: + InvalidTimeError = Exception + + # `separators` argument to `json.dumps()` differs between 2.x and 3.x # See: http://bugs.python.org/issue22767 if six.PY3: @@ -339,6 +347,7 @@ def set_many(instance, field, value): field = getattr(instance, field) field.set(value) + def include(module, namespace=None, app_name=None): from django.conf.urls import include if django.VERSION < (1,9): diff --git a/rest_framework/fields.py b/rest_framework/fields.py index 6dd40acd9..7ee3f1016 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -33,7 +33,8 @@ from django.utils.translation import ugettext_lazy as _ from rest_framework import ISO_8601 from rest_framework.compat import ( - get_remote_field, unicode_repr, unicode_to_repr, value_from_object + InvalidTimeError, get_remote_field, unicode_repr, unicode_to_repr, + value_from_object ) from rest_framework.exceptions import ErrorDetail, ValidationError from rest_framework.settings import api_settings @@ -1108,7 +1109,7 @@ class DateTimeField(Field): if (field_timezone is not None) and not timezone.is_aware(value): try: return timezone.make_aware(value, field_timezone) - except Exception: + except InvalidTimeError: self.fail('make_aware', timezone=field_timezone) elif (field_timezone is None) and timezone.is_aware(value): return timezone.make_naive(value, utc) diff --git a/tests/test_fields.py b/tests/test_fields.py index 457e368cc..968c41d3f 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -9,10 +9,10 @@ import pytest from django.http import QueryDict from django.test import TestCase, override_settings from django.utils import six -from django.utils.timezone import pytz, utc +from django.utils.timezone import utc import rest_framework -from rest_framework import serializers +from rest_framework import compat, serializers from rest_framework.fields import is_simple_callable try: @@ -1217,7 +1217,16 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): '2017-11-05T01:30:00': ['Invalid datetime for the timezone "America/New_York".'] } outputs = {} - field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) + + class MockTimezone: + @staticmethod + def localize(value, is_dst): + raise compat.InvalidTimeError() + + def __str__(self): + return 'America/New_York' + + field = serializers.DateTimeField(default_timezone=MockTimezone()) class TestTimeField(FieldValues): From 5e185aa26b5a1f4f87eaac610bec85bcdb118bbb Mon Sep 17 00:00:00 2001 From: Maciej Urbanski Date: Fri, 14 Apr 2017 01:56:44 +0200 Subject: [PATCH 10/25] add URL path unquote to HyperlinkedRelatedField.to_internal_value --- rest_framework/relations.py | 6 +++++- tests/test_relations.py | 29 ++++++++++++++++++++++++++++- tests/test_routers.py | 14 +++++++++++++- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index eac9647b0..54e67cd16 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -7,7 +7,9 @@ from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.db.models import Manager from django.db.models.query import QuerySet from django.utils import six -from django.utils.encoding import python_2_unicode_compatible, smart_text +from django.utils.encoding import ( + python_2_unicode_compatible, smart_text, uri_to_iri +) from django.utils.six.moves.urllib import parse as urlparse from django.utils.translation import ugettext_lazy as _ @@ -324,6 +326,8 @@ class HyperlinkedRelatedField(RelatedField): if data.startswith(prefix): data = '/' + data[len(prefix):] + data = uri_to_iri(data) + try: match = resolve(data) except Resolver404: diff --git a/tests/test_relations.py b/tests/test_relations.py index a070ad6de..c903ee557 100644 --- a/tests/test_relations.py +++ b/tests/test_relations.py @@ -1,7 +1,9 @@ import uuid import pytest +from django.conf.urls import url from django.core.exceptions import ImproperlyConfigured +from django.test import override_settings from django.utils.datastructures import MultiValueDict from rest_framework import serializers @@ -87,10 +89,21 @@ class TestProxiedPrimaryKeyRelatedField(APISimpleTestCase): assert representation == self.instance.pk.int +@override_settings(ROOT_URLCONF=[ + url(r'^example/(?P.+)/$', lambda: None, name='example'), +]) class TestHyperlinkedRelatedField(APISimpleTestCase): def setUp(self): + self.queryset = MockQueryset([ + MockObject(pk=1, name='foobar'), + MockObject(pk=2, name='baz qux'), + ]) self.field = serializers.HyperlinkedRelatedField( - view_name='example', read_only=True) + view_name='example', + lookup_field='name', + lookup_url_kwarg='name', + queryset=self.queryset, + ) self.field.reverse = mock_reverse self.field._context = {'request': True} @@ -98,6 +111,20 @@ class TestHyperlinkedRelatedField(APISimpleTestCase): representation = self.field.to_representation(MockObject(pk='')) assert representation is None + def test_hyperlinked_related_lookup_exists(self): + instance = self.field.to_internal_value('http://example.org/example/foobar/') + assert instance is self.queryset.items[0] + + def test_hyperlinked_related_lookup_url_encoded_exists(self): + instance = self.field.to_internal_value('http://example.org/example/baz%20qux/') + assert instance is self.queryset.items[1] + + def test_hyperlinked_related_lookup_does_not_exist(self): + with pytest.raises(serializers.ValidationError) as excinfo: + self.field.to_internal_value('http://example.org/example/doesnotexist/') + msg = excinfo.value.detail[0] + assert msg == 'Invalid hyperlink - Object does not exist.' + class TestHyperlinkedIdentityField(APISimpleTestCase): def setUp(self): diff --git a/tests/test_routers.py b/tests/test_routers.py index dc3df2e7b..97f43b91a 100644 --- a/tests/test_routers.py +++ b/tests/test_routers.py @@ -156,6 +156,7 @@ class TestCustomLookupFields(TestCase): """ def setUp(self): RouterTestModel.objects.create(uuid='123', text='foo bar') + RouterTestModel.objects.create(uuid='a b', text='baz qux') def test_custom_lookup_field_route(self): detail_route = notes_router.urls[-1] @@ -164,12 +165,19 @@ class TestCustomLookupFields(TestCase): def test_retrieve_lookup_field_list_view(self): response = self.client.get('/example/notes/') - assert response.data == [{"url": "http://testserver/example/notes/123/", "uuid": "123", "text": "foo bar"}] + assert response.data == [ + {"url": "http://testserver/example/notes/123/", "uuid": "123", "text": "foo bar"}, + {"url": "http://testserver/example/notes/a%20b/", "uuid": "a b", "text": "baz qux"}, + ] def test_retrieve_lookup_field_detail_view(self): response = self.client.get('/example/notes/123/') assert response.data == {"url": "http://testserver/example/notes/123/", "uuid": "123", "text": "foo bar"} + def test_retrieve_lookup_field_url_encoded_detail_view_(self): + response = self.client.get('/example/notes/a%20b/') + assert response.data == {"url": "http://testserver/example/notes/a%20b/", "uuid": "a b", "text": "baz qux"} + class TestLookupValueRegex(TestCase): """ @@ -211,6 +219,10 @@ class TestLookupUrlKwargs(TestCase): response = self.client.get('/example2/notes/fo/') assert response.data == {"url": "http://testserver/example/notes/123/", "uuid": "123", "text": "foo bar"} + def test_retrieve_lookup_url_encoded_kwarg_detail_view(self): + response = self.client.get('/example2/notes/foo%20bar/') + assert response.data == {"url": "http://testserver/example/notes/123/", "uuid": "123", "text": "foo bar"} + class TestTrailingSlashIncluded(TestCase): def setUp(self): From ed72603d35f9bcbcd2a0bd268791c8e3907ce3e9 Mon Sep 17 00:00:00 2001 From: nerlin Date: Wed, 19 Apr 2017 03:18:52 +0300 Subject: [PATCH 11/25] Fixed render error of required nested serializer. Fixes an error that occurs on rendering response with error that says that required nested serializer field must be specified in data. --- rest_framework/utils/serializer_helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index 4734332af..e7c53ae00 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -101,7 +101,7 @@ class NestedBoundField(BoundField): def __getitem__(self, key): field = self.fields[key] value = self.value.get(key) if self.value else None - error = self.errors.get(key) if self.errors else None + error = self.errors.get(key) if isinstance(self.errors, dict) else None if hasattr(field, 'fields'): return NestedBoundField(field, value, error, prefix=self.name + '.') return BoundField(field, value, error, prefix=self.name + '.') From 36e5759498386d858aeb01261fdd3078ed8f17b8 Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Wed, 19 Apr 2017 07:49:13 +0200 Subject: [PATCH 12/25] Add documentation for the `get_schema_view` new argument: `patterns` --- docs/api-guide/schemas.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index f43ff56bd..5bbe8f533 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -170,6 +170,22 @@ May be used to pass the set of renderer classes that can be used to render the A renderer_classes=[CoreJSONRenderer, APIBlueprintRenderer] ) +#### `patterns` + +List of url patterns to limit the schema introspection to. If you only want the `myproject.api` urls +to be exposed in the schema: + + schema_url_patterns = [ + url(r'^api/', include('myproject.api.urls')), + ] + + schema_view = get_schema_view( + title='Server Monitoring API', + url='https://www.example.org/api/', + patterns=schema_url_patterns, + ) + + ## Using an explicit schema view If you need a little more control than the `get_schema_view()` shortcut gives you, From 72da73310d6da11e4beeba815498fa4aecc6635a Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Wed, 19 Apr 2017 09:43:28 +0300 Subject: [PATCH 13/25] SchemaGenerator: Avoid crashing with pagesizeless paginators --- rest_framework/schemas.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/schemas.py b/rest_framework/schemas.py index ec6d7f3c3..52e14759f 100644 --- a/rest_framework/schemas.py +++ b/rest_framework/schemas.py @@ -604,7 +604,7 @@ class SchemaGenerator(object): return [] pagination = getattr(view, 'pagination_class', None) - if not pagination or not pagination.page_size: + if not pagination or not getattr(pagination, 'page_size', None): return [] paginator = view.pagination_class() From b8520a1f2eda4973610358458d65be839b492ce3 Mon Sep 17 00:00:00 2001 From: Mike Lissner Date: Thu, 20 Apr 2017 11:37:46 -0700 Subject: [PATCH 14/25] Updates the core json media type in the docs Per: http://www.django-rest-framework.org/topics/3.5-announcement/#corejson-media-type (I was *wondering* why this didn't seem to work!) --- docs/api-guide/schemas.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index f43ff56bd..a90ee8a86 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -117,7 +117,7 @@ The simplest way to include a schema in your project is to use the Once the view has been added, you'll be able to make API requests to retrieve the auto-generated schema definition. - $ http http://127.0.0.1:8000/ Accept:application/vnd.coreapi+json + $ http http://127.0.0.1:8000/ Accept:application/coreapi+json HTTP/1.0 200 OK Allow: GET, HEAD, OPTIONS Content-Type: application/vnd.coreapi+json From 4be21cf854979de46d43f413a3759b6b5da1d503 Mon Sep 17 00:00:00 2001 From: Daniel Roy Greenfeld Date: Tue, 25 Apr 2017 14:36:36 -0700 Subject: [PATCH 15/25] add Two Scoops of Django 1.11 to tutorials and resources --- docs/topics/tutorials-and-resources.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/topics/tutorials-and-resources.md b/docs/topics/tutorials-and-resources.md index 46cbefea6..1158c23c0 100644 --- a/docs/topics/tutorials-and-resources.md +++ b/docs/topics/tutorials-and-resources.md @@ -58,6 +58,7 @@ There are a wide range of resources available for learning and using Django REST ## Books +* [Two Scoops of Django 1.11, Chapter 16, 17, 26, and more][two-scoops-of-django-11] * [Hello Web App: Intermediate Concepts, Chapter 10][hello-web-app-intermediate] ### Documentations @@ -108,3 +109,4 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [building-a-restful-api-with-drf]: http://agiliq.com/blog/2014/12/building-a-restful-api-with-django-rest-framework/ [submit-pr]: https://github.com/encode/django-rest-framework [anna-email]: mailto:anna@django-rest-framework.org +[two-scoops-of-django-11]: https://www.twoscoopspress.com/products/two-scoops-of-django-1-11 From dfb0e6ff2d2d60b8b90bc32fd1c74e39a74a323f Mon Sep 17 00:00:00 2001 From: Daniel Roy Greenfeld Date: Tue, 25 Apr 2017 17:42:14 -0700 Subject: [PATCH 16/25] Corrected order of books. Apologies to @limedaring --- docs/topics/tutorials-and-resources.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/topics/tutorials-and-resources.md b/docs/topics/tutorials-and-resources.md index 46cbefea6..1f9e58246 100644 --- a/docs/topics/tutorials-and-resources.md +++ b/docs/topics/tutorials-and-resources.md @@ -59,6 +59,7 @@ There are a wide range of resources available for learning and using Django REST ## Books * [Hello Web App: Intermediate Concepts, Chapter 10][hello-web-app-intermediate] +* [Two Scoops of Django 1.11, Chapter 16, 17, 26, and more][two-scoops-of-django-11] ### Documentations * [Classy Django REST Framework][cdrf.co] @@ -108,3 +109,4 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [building-a-restful-api-with-drf]: http://agiliq.com/blog/2014/12/building-a-restful-api-with-django-rest-framework/ [submit-pr]: https://github.com/encode/django-rest-framework [anna-email]: mailto:anna@django-rest-framework.org +[two-scoops-of-django-11]: https://www.twoscoopspress.com/products/two-scoops-of-django-1-11 From d45c12ff8c9c501893bf0486214ed69aaba39716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Padilla?= Date: Wed, 26 Apr 2017 09:15:29 -0400 Subject: [PATCH 17/25] Improve books section --- docs/img/books/hwa-cover.png | Bin 0 -> 30506 bytes docs/img/books/tsd-cover.png | Bin 0 -> 118271 bytes docs/topics/tutorials-and-resources.md | 19 +++++++++++-------- docs_theme/css/default.css | 5 +++++ 4 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 docs/img/books/hwa-cover.png create mode 100644 docs/img/books/tsd-cover.png diff --git a/docs/img/books/hwa-cover.png b/docs/img/books/hwa-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..93d7a3088f9463b81a97ebe8e21eeb20768123c2 GIT binary patch literal 30506 zcmbTdW0WSrvp(3iZBE;^ZB5(ev~AnAZQGu!+mZ3M3hg6oBYiTDKKOkOGK3X&96a&x5Uc{Od~_~=9qghov#<*?y#z_(?pldiy??+Jtg=UN2MMyG8|g2N1+ z?fb^7Lr(m@F_vaWvU_|!kpcFVhGi-f^Ta=)4y^z9wBqe;re-A|3qZtg?PS)K zBHxJWRBu97_U0AWv_um70)p8eXb{S7Nz3@%Y;FRf%VLdQ%8lcD~l!6eu7;6?4K?o4cXf86y!R_zw7atgT47q&x2*!jbWgj}d^lHEn9}OUn za^I?|zt8NGsqoe8R)yyF9+xyWsM0Y8oICbN)agj2^(otk-m8eWbSIxZV)p%S+7M++DH zX6G^PF^jni5mlRBBKrfbzgOVy@`L^$wizfD&p%*{)D~-Y0&)kO^C5VnadQAaLDCy` zZ|UXox$m9X-S=zhY-`x58bIgY!oic%w|nEf!Y}w!1!NxM2b`bht*U77ZTHVVK-)`d zIspN}qWTF2l z{>R4FiQAozle}rNP3RknY0vp4v z`3E%+$EA0tr5&3(09wzmXh~&mb->%4{i?t z8XjZ3pQMt5LR5&N{08IfNxd7pWzvx(JVY?`96b|umm~xzA;6vuvdH6>!R~uPtlh#H zdWNzF9e{ZIFMF-0EW)Z84vbiW+Jx6d{s&eJeRFJ%NB99b5Ympt|2m|?*dS0$74{Mo zvH$UwqDFs9Jc@oG+`XgHvs8Q1?+6gAftu6>Ilsq+v=S=^FE|0hD@QND2+9O)Az5Np zbn17?zecu_D(3?FPy0yz$v=Dx+!Ed`Ub$DW7K#-@e}ERU6;nBvB8@N|C>ta% zYH%i~eZHns!AXC|K!AasdNR2ZE@9Rx74Hy?g8h34=Z`3|G!&S?P>3iCi5W7ZG`}#% zYPa}^0Bj;;;7r&|J4q!o^qtdm5e%TdUg@nZoi#?d=~P}fv0BiX{FM#KGMQ*L-Uga~ zUfdA`ZXcQ(KZi(&#sCjt7ZjKbDZRKV@{tAmTC=K;>yZ!u zoIpwg77_?e;J1@RJ@XeZFOuF9e0$F#=vg_jgp`>>n~tR%iWZb7)d^wpTWualwT%2X zdNHr3G%ME2mXWG}+^d^jg8Ed;&X$<9?XkE&Ms}@G333d|cM320z6$Og?~x8Jc8r(= z81DRB&94Fr7?rSj9l7~gNOFhi&rl zG$2KDkxD5duW*pU#6O@2d~$9%3;D3oiL6!AK>FN75EvCBMb@S#HaL z11XwRwE7h;iw-;;-0qVoj->Q+sx@Q+JJ<#JG(Nf&si{mq7@hH-r=Z?mqzs=}!W>^j zIJ)eYIl#!Rt9S0H+^KSYi}bx~rP;Xm$gJp{CBm|I9d*OsDhSg@lx1I0ZKNL33rJ}q z-Z;EPDRh38bWy%ImGVxXwEc`(Y5jf>PL%68v!Juzxc$=k92AW0K zSjs_PmmNh8%x>lrP{suO=*?J`NsmFpQMTIIh=2^{6x z{7Ik8?bu|a(0dx-m--w%@~ znr$}*h)A1a=`vtmt7)f&@CT}g$y5hPj7T3k`rP~~rq<&F zao}Ou=M?66W@{;+j;HNsk&?2pUeWofUetr7*REOuO$lgY-+8i2_i&Uj|IVvNX4RHV zOJsVmg1FfsekX<9RcvxG-T5zd=wcPSBBnaG+gFw*+xf3ZR5ahDD&|I*_Ff^ejpybT ze<^Aba6Eg6fn(jBXmfI4?0N7FHug)NWEhWO&Pl_4K3?OsM154c`SMgJHF;QPoJkT7 zN9wA^Dn}ShoxayfRwwu-l0_cu-2$rH=IGfys7p-!P{N@uIoCfRQ;Mg<^x~onPSdMD z!PYu2W?DaT+j!O2Pg;!CEC=OA`4f~HUrdO9GbsaO3ec1s3;J_JOI|g50*7x?pwUqV zh4l)EiVhHtFR4HS@WsJIff>6mG!bBL_OXXBz7cZ3L1_dl19_blZ$bJja)l@=0O=B{ zy`*6-uM`{9r{{B`&XBGqmrh_Nl*!e?zYCzrEOb8HbRXD$(quR)I7YztF%iwhlJ@u_ zYbgi~2?tPIlp)}nys5vSIK{zKPEcy;#djVTa4GA-?YDIR!QIlYfMAQQ2yx1^`RirR zt&W$2$@r_~ac+^r#W6*HKLGjlC()s_8UYWC|6uHNgB2^gPE@o-u$8t+WU7oS?DU%v zvZ%~+nL>Mn-3R^&!_CXoGDr}HDn@@!OJqGzHx}}-QFAzHq9c9aIwNF5GD`QpfLn?n z-#~S;zh`8aGY)e)f;!Fpy>c+Y=#*IGu+9Q@Za&gJ7pAvMrXE81$nNF+;cOvL-(_Yi z3Z-um80j?VZvinMs9r0q4Rec@ZnT0(rXDt?qZ$jj=AGKS4u@FPFcUv{32VK6l(WC) zx}Ikr8JOPT3xhXGDMbA)=jrI3DiWGLNzmZ7MyAaJCqYJAlcLB=()G~KgNv6cTX9G# zmvfG2yx4DsbnsO%VFb_QQKWW^vDrh7V9nF>>{(t(+S|j{e#sPF=cLonk$QqpgY@36 zds3^uCsp+3eWU`FIRGPu$ggyhD>C|?TQ#&RSGBxa!C&ci<642ulOo8!9-GnDufw*N zD180dPK8&N`Z4*=s!QwwQvgz}x0oXY7As3RrqI6yZ18eD2iR7Ma&feC39&1=fC&)+m%9o-ew^y5l~!nTHK)g=j`Cy`LeNUDgKC1%u>j@G*U$tg!>*paWy-h(3HIfwo44$R9&S#&WxJlQ~ zhAj8P*{;#$-QFoQ;_+%)o0`RV^1-sf=ju`T>j8vvCy&5 z_shFNBr#7)vGOv%1IieOEcu=VbT8T^b}XSDR`hIQ z=vzJXE~0J-S|or1_Kh5gH(f4_IyHl>NlB%do=(Aqgsr-xdE9^U%1zdk9_|q}j zK)}!`z^wd^M2c@(pKE_TNr=Eh;PfjD11JT~nZedNyjAIV-qj7X zc{CG6E0hVmJk)-T2T^j0R7a~u_E#ylK3yOoSRhm=aZo&OS%r#$;>RT7sIm7q>b_uH zHJDJ@Rzr|rVQ~o}7do>?#q9tNa^h~M$@(f;<g%UO3QpvP*JA}iste%n zd#rLe{OU=bEGc0%b!NF=uDX;?kKYXefAw;^Lz}X z$qfBr04OP|_+GrZ(zNMi@(wlAbS|-e=8?BsOF9-RK`mAS^_Q!|ed8EYdAwVA=|Mx! zO($l&AlwWc^O0#q`F_6bk8Db)2=Png@p>%m$0NRUvpfmO)lIap&)M51kuB^}V-IsX zo=JRQ+^Hzh4?%WbaQRuL4rFv8Y-tO7haIu_xboM{fGc-ue+;Jax{Oq2JhgBjf(Zr9 z(FS*8iP*MhkOrWN*q%~~BI}iWvY6E_zzuv+er)&1oxH=DRMO1;)GuUwv;;7`v zmBPbdW8Z=GMDAP;mq)n{t0Ffx6%iAw1_EN;<=ebmK&Wh-c}6PLBOSn0fv-3Xoml~h zvTBZ9`8L6^PJM|v6sKAFSM78+=m}a5{n4cn<3d#N(;d z0OanY5e3hyPN^L7Mf5aN>`3Kt8Zk+Z?yZ&=pADKpq*vwp-nxHt{+A(EJl~f4X$(nm+Ll@NllGBlzVihcw)zw#O*7svv zz3udcHwNBZk%s1w{t?d#*Hmfg>F5UyHMv7cwPGjgoEK`y0Dx z`6k8ESRce^g#0?l$+HtNc$q|#54FPn?PkWsQ^X6=o4LYK$T%>}*(Og(z|_1Sr~;m{ z0kEYM)+@rZp6=z->Bz}7m5`Gz#vJB2+|9A_Qt;SL{%Wd#WCgy6F# zFSw4-tIoLg8f!u`P0=k*uEU9{p@a8T9tEVvli?My*Ea)~wKou#i0k{kj)QOdX7`)! zOic&$(0tH%!|0_G_C;cXrd&0S67q@WQb~r+gjUzOQ+{3Y3;}vg)wVmo12IRf)AnaU z4tOlEhorp{1YJL?{)gcSrk2Er?-ai%ODA*sGGki{1%k{`#n+@JGDy=?_C;NJ8@PvP zq!k}?P{V;`joA_6{(gn~0|S~aiQF5hII#lXVcv-PTsbSBJSNepCq8%R^WjevW$=11 z-;x5N^BoCZM^^ijZmk1=foa1h)}(XRQ&%Vrtq=X+%yKXkG1sQHfhI^`iy9VYu(A`GK1FQBiyJer%BTZ3%%d& zbg|z5I81YVHDLJGmo>KXadfDA5$=!bJD(E zRUBh)L!#G6p9YaiC5f<)5xCTZ{S3?X-i^V?O3#N~8-*t`c4xRx@0yf52U%}_Tx6>n z%*y;tj>Ctbd5-=q@jecZ>NHZa`NOR){he3qu#OK#+u{}TI}jl#`VSHpLYWjF?Y27? zVdkq?`V5SS1L|OQgE3_)-;al_+K0&PpI{rRAuJuGo3qxKq1`t~Q&%vbJ2VR9MG zjBG8edT(e70hhIw>mP9Pe8hQS$M)^h3)0_YIxKq2Ad`1Cy$2%neVNPn?CK)AE)UNJ z5EFTdLHq=r8oe{myy5jfzY@nQMuJNuvpzwH-_=llZtL1FGjB}l_R#t1kG93OpU@}r z3w|F~awMLp*>-&7Pr9C$^2j&f`y~^v8Xt+cEgo%J0d_AFqimgGuH5cBDtOMMI5o&1 z3l_4-PKMb#ZXfL)-nAK<8lKEn*WMdJ+{#PWjS$W_E1px(OkYLR_^`;MWsoBs%W!K& z)oQcp9PnSg-^;D}?l)%|3eHTnE9~f}H<{YkzTe*rx#E&65T%eslQPY3Y@8Bt$?lW7 z_Acr={xCm5L)TIr~wp(IL z34AFv8&3xLlaU#;&~TH(+e%8Hkec^quqr1|Mckt`;_y3@OYLFXm_;D)xkYS?_*IE~ z8>jHdd5a38_dQQD;UB~Uz#+1-P0$IIyI*cPSKeiG9!hUs0?O>iV{SrC_X{%;@Q_f`zL4|4Kpp@ z2fDNszM)oU2!7(!5$EH+#VQ*!bx?JJjd17%fv`<5)NRa7(%tU;YHvZows(>ly7D+A z_@+kFs_{B$EMFCEj2+*`!Pvc3vN*By{(%g+B+<$g)CLkW+_}KsaFRnR`3-)83tSR( ztlwOyD_QofCNmhl9BoW}cgx09pd7JBShn(hC)>8~QG}*^fjrTJ@w0Hr;t2`!k}9#w z@hB7aw}v}7Q1lm-%epjO%D~(n5vj^LY%cuGB5Akh6g?QR;I4d+v6vTNdU z{M6aERvL_11qlQ1?t%?afvKgUHczuA_$pD`WcAA0^aSGFGUev0Hl zY+vC@$FN5AU>RSSW6M@ICr#y}O%kY@qoai9p9@OI}}| zXF=6aF^}G#I}c0L@R|Hx2udOF&=)lQesE2CQk70iBx=d-a@Km{t1In^&Tj4 zFVo5nUu@sM_H2zY}~ zyz_Yowy;Tq_9|L|@ChA)Qg@w1h!!kE7{PR0aMM~L2xu?&B#Oq3rbCFY`Jghe+`%I5 zCWQ%?6ok9^VBAKo;X~XUfqX0zPQ(nAS-wxGW!Y8w!qXY4pYd#=UzYc;d_E3(x12(2 zZ}pNpMnSjDwSi^n*1M;Puy&?(inYXz60YrfjIkNinQrTjMjw2OPlr4 z`IbxX*r8Si-4pbk_20qP+oeTWlDyF#7@xXOZz9Y`SyL_I9==(-0~Rh7eW&!p1mA;y|h9Y$}C zyG1&0;XFof96U$DIPHS*l;Qk5_aE(nC9$8GLY?M%$5dYwkF4N3jzr-xwF={UZcFu~kZ`tE z{-qPR`U8k=3zQzuaUhr@pNPS;Q`#@;(D(6>0y?2o@lIhpRBgCqi%K_^@id=6hD|FAC3(gBbci z>C;V&h6qxg4j=eKNGEiZphr_>9Kbh%Za~74?x9dUANYTf4yGX=F${)S1cz^S1YYjP z9!K3p^uA6hht72&z<(wc;v=^=~Kwd%jGqsyyR2LP9GR zF>9)Y;xW#rI4W&mx%HbEy6Oq9hJaBE+q`6SsSZyFDqv*lwo_*ZeA`;xL>U^V`^()q z?hGpD)L!P-`(_7Cx?qxArPR{HxiXountGxUTEzFskg}Cj=}lF9GUE(ikG_`nD}sP( zsQI1bL)CK%F_v`<;_^?7$kyEh5_x({F8;jI{e|-TeYLf=GJ2wu8cc=>KrOs1J}I6d zlf3J!1^e}lQ!TBhQ@z?MMcdho&iV_z<>u_$!a&Qia_hQ+-sweTn#9bSR4g|lsVKa;5C<5( zU>thnPqX>5#w$HRQRnJud%Kk29wPnzH~jK<~h~WeZlaJq@{y6 z^0Yj`<@SJc0WL}9*n3d-_YtspUbkxeD^UQQyy$Pz487B}$4z&&KG669Ns1|cBXaQE z&3U#SB}Yh@zuKt7Nc7&CUlq6BcBiqI{t(nhcRk1-AN-5!I4$1m`r=pL%!!1tvoeml zEU3@%&2S!XYF~687Wo|8vYhr;oPi95sO`*;{d9fKk)Ujn6XW3R( zf->GUdBibEvFRKo!?Z{bx}cFH@bf*j)M~7on15kRcI6F~`44+P_ z+W+|L6}W)3TD$+A){@(qo>we^D|;k{swzghHa7qKbK@CKJTCJ)+xFl7r^!rk8Q6y_ zKU5qRuG2Q`213?*>}PuG$cJ+1VJSfEAe7Gjal~6qwD>Ia3hD(P>Qtz>CC^{lBEqvgJj?s17+c=;@%Mvb3i#1euJ=d#T z@{}dy3{n83fR6|`F85d;s2V122xLoG;O}B>l#l^UUO*|aGnna|;u)J?+z5QZBC$sd z){Jgir|K4T^S(T)qP_-G_2sYIPga5UQ?=3kEtTTh<{Nu5X$CA+xHgVr?K5QVr+I~l zbjr4lDa)r4?|n0`;POEl9Q$?H+53=WJGczO-^GL&CdL*pe*(en<-tFv?3FPJpW$Ncia;$EE0fls53lUcaQ31vINv- z-15OI(HBk|nH{$}I?EJj=!9!&Es1cuM@Gy^)OPTU0!YWrA{DSFxhPxDx9+P%n?r>J6`;1i>5O{H(+@XJg zI^PV|ljuEqu$nGw{da*qZ%{c8xmv48`!`L`^KrkPX@PySd+hyf{ogn3Qy(n1>kllM zBAiKUSz?K4jd6T){Bt3A} z?JFpupGJF)ePEIp`E zd*+8AYJ0W$4jn6OwcbJ2Ix|rH$<3m6&@FmwgtBTnpxd+ejs(Q$E@}zaHn7ZMk}JBS zibpM%N4^=6fW}`j0o?Lk-M`6?6&O6}>?6~%#7r~0jqHYai96D#3$`f(<LmZXLgLo zq-%bB;cufC&=(SEdl9g^EqhlwuB@oNVk?@tHR)*0Jr@j7So*P8Hr~GT z?7O?KpcGQ)avLqXg@u@#b#j=n7)>arD*Q zFhV8*1%Pe@5wg%cXmS*2nVRLnvlJrCq4q!R3+vKgHT)v6k0hZQCxP|>`a{1|5jqW$ z+@N!p70N`z@qw%VP&~_wMrI3W8mJ^b_0CoOM1ei z+U`j=Kj>s53Eg51lWW|CL?s9&`bqmB3-+WsOc88Dss!DXLwrLc~lpeQ$9`o zHg}R_Nv7G~ll9!M((!tspseDod`2H_abqbpUuV?_n4zpmKfzAB>PB3Xn?W;#$Ohp> zRmsp+#C~Hsfktg+_2wO9mRYW-nK<9quU0T!ae%I=zZff_~9vO@50t^pb0;$`m0 z=a6kR__HxvJve$%9cS#6ca=aww8mV3;01(#hJ@OKWC6|IbGxbgAvQ%qPCS5zQj}`` z@Wg7h){6GvPty27IoQIUcLO_FT6yfy5h%Vgi(B^z2?Z=8(aORL`#CBCjSUN5_PR0W zlsz(zI9J(NXgt9Pt3w)Cngkf&@jUqZuUao0+j%M0%xc;E$;|cH&TZOSBfQ;zr>_pB zUnW`bWVgo4H_6i{T~CjEJ*+@f%g45pC`64Ld(_fpyf>?~p%_ek&;z-Kl}5%V1aWFA;k`AGAI~o78lp=vYT%XywZ0uwVPrviGC?#fJ$DHpBEbO zGI31Hje+hrDkFkZNOS}6LkI+4pj)q_7uP;GXFiIsJLM1h4I3Cz`ElvcFmzW zAeh-)R-v^?CthH5!?%Vn@5NVjosTR5JH7zI)@K7Q3jN4ld7Gk9^#=4l=pybI)>nh9 z!zmlb?;5y_+A4bQavQbCMnJC(o##xNq|K!*6-+l@g%5g#m;8#4fCz(H#p4?_{J;te z?YV3+P36LUkcp3vN@N*CEUN4Fa~(y|T{jl?Lg*_8jMcy)b>u$j=vUh3uhW#iKv!t5 z6confiPz4f$1lG<`Jer;Q)opHPmr-`T(jIh_Yf=&74cC3`ameHbERuybPQX|Wh29a zh3R6|WqHY%My;y;`dh*_{qB!PqJQkqdM>0U(gx^aK-#TZyUCMys19vWV%W6UlD(~2 zgj$>KcuG^FU>waMqj&2Ky(i6R@8OnQD{tj@c>1e4xC%lQtsu5V^vw|_n9nH7oZd`r zIWE1yxa%%pBhD{-|0GXSq#RZjl3{CVEQhw%VcxCnp4P94sW&6T>8;_r zCxsRh;o$_DUn&(@yyA^rq&JE?LZfJ47c9;WOl`B8Hsb+ znpO;6dPc36&-UCQpZS`mj$8qQFzvc&(fc(o_FEapgk|&NDbPg~hJsnA4 zx*m?j(6;NgRslza1mWz0HPe%>t6Ey5D8zn_^7!UuQLzFK6EP2sLY?<>QurI44>VLf zU`0A`kE16X;jv8H);Y=Ut<3h`OF(9OYqWBezK}gh8h)nZf<)|gu#9E!?8N%2Fv4Ve zvjg;W;d~*g0je}quw&(+W!%J-o)NBk-RWh%u>J_c)1QErzwY-52ClxDM+xrEh%G>j zPmzy7s8$|-RQ{yN_n~V{ryJ4}jsYbWSl~(i_|^S&spFTR>9Sox&S}71N?*9zyb+8_ zK|v|4mByNH*E`SF5zh~eOpTjzoN}m3@MgM40j#6=t($sGV1MIKmJw|6*DoGaq$%q6 z_%!^jff21dVMc8E2G;abtMrHmE~ZgFE(zag2LUgT6&SI>{O%)@%eD}L{e&MIGt9q4 zAB7-cbXmQx;93llZEr%wlLQy;-&#@pagplpGYL!Omxl%PgCqf^LfmhK+e%B*O+ZS` zo-^oGTvhcLy$w(cn&M>4OCe~(<0jyPXe347cFw4F->bIghc{+Y_*DiNY@Z`gO3#4s zwkjw!B2`|(n-d_387PW@YGG6hW7#l6kjJSsh9TSCoRh}|oNdJdQ`u^XEXu*V9=Hq* z@$D_U5viubP-`9MEbIBKUs-hpgSX`*q95T6&^>^udcUCl+l!I0$ zep&hh-{aO?*$>pGRh8NXBYrGCe{~KUc{={w@xC`YwRH!*Py;jEZ+L_A&B15; z!iv-@>kVQii-fv#^}+CiSGv*|ptCUm9LyLl_ZqAGLT>%5Db)}+kWQlJaYJ@2f{o5B z43f~RZy5G!8%^m68o+YeTyLqf^2d>Dd6w^o5IJAAZn~a>PW$Bq2ISCxpf-MO71!8! z^TwXU*g36p=V4T^4=~h@AQKuZ7aM8JVr3aI*LjB5CsM@}$c9PV8Q zjTbYEZhOG?^Wje`CNO!D>wovPrbJF@N=s(5}ZuN_ue90 z(5C{YYw;v|bn<(WHh&h2-nqvZs{e#KH5v$%5R-JL?o%uVl2RdNA`#ynBH=W(0ra17 zEl*(1ERK62*O{8*3(UBB4<0l8(6GCeU!woU92|;Qt&;j9(-(dW4XzPvUJ?3RGTSDA zv0tX$aHESvhhZfqFzk(cnT{JrqA4>ee9>m9*(G;PCz#Yzp+0E7crfUvMCgg2GAiMr(z=NNZFGl|sXIs0sn zbA|SH7T>!*>V=$xo|xbds+Y@(+L7wa0*@>a9~j@99Y@s}>ZqmJ)S!!P^nEiiByNkv zD11JJYE>|OSUuQKmi}1l_OBjTRm)?-Y-rne7_(T8MO_)$x#@+geUg_)j1ns~&ojXg zS;iq%3!R4e%(Pez)f8LWZDZ$&t?c9F4*?_0;(*zVK||0Oe{W5RhNhL!Ch~D_1UI^gWxQXuZc2RI4+uAKY;te3!ZK z5K7?%6DX50^C+w*X$bAWn_rinjYS{WFh5K&II5MSe}Jw=BoeI zEaD!5#!!a-&3X$-e515S^h$cdP?CURp(jGh`t_Dq1niYufZp}S=XQ{5=o-uQ@vp+H z20CAMkXg-t>dXhMO14W~KaU{ufTh%?7Cj;gkRMjZnH869#J>$RuRZSh;^`VxVbiiRCaF5(X zSd%+3b}I7gQ08Rg<&G#k+7Sf{B&p%vBQdxrZz|ed?{M(c(0!t|Y)(Bf(mx`xGSQV z3&5iiBK!*_IrDDL0{8&=+c{ZN?;~S8L{upxl4ZH_LvBG<>6-LGTyOgOaxKmm)YKCs zh#xKBx~-1peo}ueVjs}+?TgP7%(8o)FYNLVlC5iS(gXY6Mj5r;KL6KAgA45@Md)QN z6L+{y6CJ4A3QV#7^HE7H2&?h>C)HZOt8Fsxi&LZ!AJ21R*cXgXkeuvvQDd5Vwghp@ z#^Ux45Az9(s<+Sa4XXqDk>YmiT`^+%(xZMiOK)}y1* z@E9n2B?<{~bCahx*xs=yc$=Aj^*%_3XEqZ|=JkoH$~e6j&o@~?pdQQNok{_2)ovri z^0F9^J#gAb%kTf(#7fO|hnz|9%93cTKyF#DWfJz-m4X7R45jLYG5Dpz!Rn;Rpl=hQ zfPyfEIU@DAPQuc7(JISy&FM2<&icNU9}SvCj7!q+&JrN{=z@%| z3{;g~i}EPPt_&tZnn9Ef_A0`{r1D-6PI(T=OvGDk=3RFzk(CvlNJANbU*ij5vRknl z7#rW>X_7@~6g(EeVkb~M?r`UcBqzgAo3Z&a@QzBp5^k!C$+-@Xy*(B`7MvBKkz9`H zXJ^f1TSc;a?8d?{TqL0*Y@_q+%R0(fAPd||J(EU%#CQqa7x@m|E=(YeeV@>WC%{6F zkRZ_f3T*5Svw80XYF0fNhYfIzFcymY0=QO4&~4veLP{LV!?)RRD$)!#R-AX{2mOa4 zx?Xaa4E=ZLi#DsW7M45w9|dnT{A@A8BxUfXf$d8EP`pf!>{SK0i33{#iZNA#6QN_ zdx2S8w!Z6G^HRA)Ao1nK2}zA61XoftHxPr@^@N<$+i*PHBq7U)Sigl34JV$jJRVZ! zm-V(f999=_v?eJtFomZnZCJY7=$kU#Dq2qy%F+ObpfsT*5Xm3CBQM{%5gHe_HirAP zu1Sg36JRDZlXD`^KRK*Y0A)l_;}!bX@i3FvMzQ7W*CG?OC+0h;_D4dMBhbuPFi8#wzYD!iCl+=XBQPPL*!;0TEPTN;~j!orJ zID*&3$M{x$D&h7;>Cb_k)BPFo4u>++zP*I$L{9Mk~zrax0T6^ossXA|sw;Q)*ZAmu@eU1^1QoKteL)ge7 zL+9v)?=oBMrz;Qazl3WR?DPaiLEEB>3MGZ}MQ!=#ElYOg5zY)|uK)M!dys^8`aA;L z-{{TS<7#xH_`N6UKz@?>4TZR_oH+R(!AJNOAEV50SW__Wavd;4(Llcgy*{k|icxhHU6GF9-IH|6o0_lvP4)6bl5kl_)) z&-ckZ?@QEyHkdH?Y-50$Cf>!%1xUR59}bl1K2L4ad)>En_*p^j)|ri$DGZr)7SyVR z_SfCBD1(vfQ`PV=XYbtZT#xlFpKF7zm7y;+h;$yDxY)U_4?!X8w#b>8FFK}HRC=dj zj5`!cuTo5`r|JKSkA!^$_wz^GmsWHIW)JpSGckha5ZAxxvLH3eH}YRdUja&0}JDAtGCLjPfzVr7O{uA$S5s5UH;SAR)hw}DL0PXe2dKO^2FlX zYbwjWD6Rkgf@OpUB!LAR7c|U_5WE~5b&H@|$TWxXIdqEQ?GJAWyOqe0qAOtgX{+NM zmGya@=bB{q0r&E0KR0R-N!|`?{a8BNL zqlfkmX|eY_NP@P713$1ze*)A(L;-Gqez3&PkMklzzwO$Dc-`DMV!bSaE(?CT33HHULI|4R?(Wt&G;RSJ z8h5wg?(Xgq2=1M^jUCJb%Ed^>pvryO!Md_1G~jU%37f^_(iy zq6@qf({947`f!I*@v0gVG|JijOgw+#X6ih(W652T>VX$m$yvFz@1ciD&N-Q|dzfu` z%O1mWc7hwh(yq;+cm>~Joj9`t*g7*CXck(xfV7xQv~YbHNsq&OtG>aC^<6PJ{*E&v z+G2G@Bib~<1Z*CN-rrrXDuv}>@1d)EGT7%vrc{l7A>Of`9v^1w-1DW{cGn~57vVPM z{Kffi&t1Nu4N@+B4?FNNiSR50652W4fS}Eq2SU7$OrO+AE9U)H;~Fxl65soM1oM%USivRE4}YVGiho zaZ3$S^{4aU^2#G@DA|#+C%BsC=csx_UvyhmWM5lSgaRed!$I7U`jz zOFs{w6rfXllybwnTk?W>LbH|bO&$yqa*58|FpwJ`?5?HjOv(dRZ%D9X6sCsAHbfO+ z_TaB`xN>(z(+h!}Y|+35!(QJ;Q5sMYZ9MkdKdc^T@InrrDHC+T5r&Pw-Pc#w=8U?x zPU@E4aw(f01Izb=epxSyRoxzyn1Sd_`_g4JlqWV%XIxg(pzQ9Q$oD}-XCLA?wd0gb zP~ELOlkXGvGKb{xvyWmG^RJCCk?Y9GmW9Q4%qPxEbzNyzHKL7HAg|W=r_Cq1v}zId z`=ks)+4}SC*~Zkio2&DEPg}4*HR^3r)j#|=6~-tzpK4Epad>P{BMWS(L?GVbZo}Us zTX*8zuO7(v0%WcDv7lJoT^?jpG z3wYt@zFg@>$}-0(e4ak-OGHa$W1JIg2#p-Hn;W$g^^R$qqZ(f9LNG9BRzv+aB*rSj z7~v`@Wq*uQ-B|k}LB?pHGBq2NS+c=fhgcVQFZooxevZ!fS^8VrEUPeMWSt6{^?c#T z9OM_Q-H`%ovRI-ussE`wjeAitRm$l4E;Rw)Fr-#P+A8dTiakUUZy~5f55wK%-w}$I*4Gy zvFnU2K*yVDm6@(s620jBJ-Oe^(RuLPAs>DF={0SqZ#C9?rt!P!XYMhah}o9AGgQKf zl6m!DRv(_gs`3zBFi^oZ(Hjspp*SlS_4l;C>Xb#Z@EeXCG`9|g3Tjf?-(kh$YlR~2 z;PcRuQgD)-#-Ogm5rVMX)uiD?gF7r_#R7-!OTJRv%N}W0@(WIv#a*fwgITJX8|el6 z==mjuj-4^vu*zQxG(rx6h@m!i)$CzR#adiM??1-ILlc$hrYNHD&ys^ieoo>fb%cpI zQ1k#{0nsgdCT)zbr6&l)JCm7TzHrjc)s_Fws@>pO%s zRsl1#{#vbFQ~}=F*F8|%e!SVL|MV8JOIAcK3un3}o=~MYNduz01S<`HcJ&C=4DjE* z&PTM!56nXkoF7AYo2ff&>L1ZpOmuZ3=iss#;SIj6C^JUlR_GFlyw<#HhjlD41eWSl zy>gsPlu@Up3JwhQ=`2}Uy{t4}b@XsDdGk_@+im;dmaC#zCiCUtiMveR$tofH&tm$s z<26Gs3 zOaHdcawa%CVrN>u(x`yZ)6C28FQP{2JR1G=Z!S?I_36d#ED8s9Nk6&g*WC6;S@EQ( zFEEz7G=_N`%hLk6FppF9W^tCC*c>r_d9J9v9im5|B=F7hMu+v5&l5EG#u|>fR z_L8ZD;%=9rlli9T#wa&Pnm34^q*4J?rroz=(Yse%r zXk#$#>Bh(0C!zTK+&OXcmRai-K&zJK&*5n@g8T+s9oK2wfmDKKNY`s{B z7uEPRrvzSjcb8+MGSB0LaKMDEvit%8DzipyPM2x@`|u5DLVI4cPonqX%9L5)>`E7G zOsis`^3NSvjr7lPo7`Ie>XH9wz_?bRF-~U&kYORO=i7CJLBwh?udsI-rG0u94Y03& zB^*}wIIS0BQ@|uN$MsA%w`OEQ8M(!bJj-j+>`{n$6L@fw60D949bgc^*_)r;+;+Fy z9fiu;ToZl_qY20lIvy;q8E&QxO>2c&PFy%Nvmhe(t~y3?Jr5KJbxZEB*EG`-%W z9{tKSg%A6;_-||*=x9VQur>^ru`snpV*1oFX!5fLeA(Hg9e>2JW>}>mtxxAm(-{2x zwX05(UUtdd-0Yjl@SSkP_KH-5MQjMJCC}hKjIO$KD9<$THoBmNuWLBL-p8xkYW?0$ z{?10KHHYRWU4=GQgn{ye3+eJidxVb|qg$ypo*X#g?1c>Z5++JwNi1?jRM#znC)>jc z^e*-`6=QRPp_0Rv;NFGcpMDwi3578JE3H4A<=?c-uFQ?Iz2*x43vd?^){wLWk~2=g zhS<+ALRMkgHeL5w$64^BeCqi-2i1LQ-g}zmT&HLWR~b$|=7Tjx;$CO>P)%twVPmX{ zB1pXap`B^w%2k27%h{~$lT-Iz z-M9Cg%O}d9Zny#OB{#`Yl_>_wg8kgLD?3Anr^GROrh@U$<6;M*W=VGglN|-0C>tzo zmg?LO^bQ*FOdU*nt8Zvxh{Y&Yy-k*DUdIH3Eb0zsFW6>rj5eM7_A4e{Sop_LDUHeN zi?T<46El__m8g%$p1Y{#zL|mIuV$M94&ciIg3T&GSmR}4(_=ZkH-|zy+Td56C7}`2 z`v&Gk{6Yr{Qvs(sq7aFpyVko2MTo#cjTW0c(d1GwV$aAeYOGLj{tCh=&|1pekmp*J zmP%;}0=~8Rm_N}G{3ic{D~Id)J{<*TMj`?zvOdF5H0OdpNY8exr0zb__I*TQ628Et z@jsA5Wwhpze!+J#$@q;;9x8mH6XI4`?K5XG`G)IJEw4oDg!#ol=1$)%Dm>*9C_w|4 zFK-toIO&!E%lL>CO--L=YJXtGZE^Z^9=@LMglz8ZLBZUW+&?qK$z+6au1pC0++&oEa&#MV8XlobIPhS`i*s!aJ^){3v%2r^{L<5J;AbAsPrv~tv4v; z*U1fC7y>;nGqYDeD{j2J3b@XmX$Vai{P4G;OjACW5UD2nF)EFEGJ{?1)$LU6Ma*od zCoEbF;nEk<;Cc&}?4_u`@z@L&<{fVbTlL<~zQO83;EW6T9|T8Yb+SL=ly9coYFYS^Ao0>uHe+w;_O#nssKNF_DX?XkIXMl@hPt)PfeEz zZS3^~_DovW(dYvs&uspf&qT$fd>*L>{TjN%5hz* zVzDN1Cz7x5S0H31>7^EnEM*b`9K=7hXBls6u@79*&hUJJnv6bTgIZ<|Sb4w{EV)Gyy^2F1g9GD+MQl*(Doj{2b1M}qhCJE_Jqn4>n+ z|73Pd)zupsev_akT)y?JO_+>KDXFHn{>U)fCS0OGLS)#Xr zNxuU7`bp&-KOQ!6ZSHrD+VEVRZF<)Mf8_?pzgx!5FtthOvHlWru`6diWNSH*FurKT zbguXoaSNuFpH0GF!C3vZ1&~=eyThpoeywf&88bp_br_cKUw^I+2ag&FBrW`yfctnr zqPzDFFCod|5qWz0x28I>jror-v3-;1m%{v|L>irDMqbrqH+Vm>I2Z5ZdA8|09XL}z zRky~-)T8GorSeDt)L`d{(zp@Y5>15qlC0!c1`F2xgS^O_RW0|mE~PcBbbruYD?RsQyBHcUNli@byUY&{JeI{7{ zd5Uyxc9uuFvP<==jIz!B5xvJQ)K_7sL;Vg8XRG2l~)O~Pu=$l!r=IY4$ zN38JEuL^Q2^r%Ewuk;K??}-i5$qf_PIH10f-JzXXCYlY?NBgNM7%9_d2D;|z8f*QO z|9y@=Nai}irON$GXZ^;hJNk106oH0CuWytB9k*VT5k-}x%OJ1*xNRni@pWpKxfF{F zZ`G+K1cN*)MmQ)r_m0%oJ4%Nb?$GM?(O-A~?%@p!<#3?hVc?|Y`n^4ks69u*!G4Qg_@x_)sLHvnG)p{@s5!?IeEjal_J&P5<%;?{7oyD`QodR})Qd z&E3*a$zlgSpGKi#8sEv(1YY)>$8mdo;7IZ0(6VY;Q|<%m;=9A5(EZCpYp)kwV8aqB zWtw6OHgn5e%;ZnnIz3Ss@a?txFI?TB{Oo(NSk%iNWnL?4?~>3sI3AManc zaJrY6CUo8+z$Ktad7W%oEioL-C=AMxJ%->wQz}0XGi1KZ4zZ6YVZ_|Fi?GZuCwom+WT{qms=oY4sF% ze?1N(u=<X+~hDm&ACEtbWzG(mXl;8|0QQ}9E3sYUR&vi7BvtKN*wr`d$5YU5ba z$nWsmyAcYsM+R3ZmhZfPubJM6<8?4GXU8bY#JjnhO}|y=T}G*NK6vp3@?NQryGTa{ z*+&7Hxkl#b8~#0NepKjA6*R{w9ir|ej14zzG!rElE717sSy-r1E*d1$I4qAs+^@x8 z<6_rq%&e{1R0BPaf|d=XM^AWd4xdPjHqHQLvy2auRtN##F$hr16S+loJ69NbWN zU$;9sRrJ_x9B#sr21kDk)+$Wgo!gB@PL-n{-x@8j&6p4}r@BN)e$yqU0e2dyr>j#( zmSI7?lIzIX%BP{TyM^8+5_pVbxH~{+b>1>aUa*WkTfS3&;zQq6gTB#|M19s4=iaRH zD5fdaZ7%#?4-8#EscBl@?;7zTM7iLwayQc~L!&Sr)@yw9X?j=FwseEV=FVVcY`Hs``rsBvAx3HMDHdcf9Z3%$$Q157r`qX40Wp0p1G-)>?+`?rO*^M_Nc=7^!19Tf4O zhm3YXR(`g?=_5qK%sqQsW$%MfCs(UsnejFIzYxCB6Vz0)4|v^=h(?v!hNJ&NrnU6U zTE6_3Po*L`Z@p&lQp=T!c1>3HHILf&S@7FN{;&@H&&a{oJWp9BaVuj0zit zo%|w8a4`lek7V_#J>YMuz6FAOwq#ICK_X-hpJUkl4fTlP*MV5?2H#AMw{rzEv2%GM z_z>Lpl7i&G`o?1;8oLd#HY~CdFw)N)X2d zbZ#?4fA@!Z#5W@xsSU{wZj>Sd;VtMWivp?T3TSbu8US){?hq!m%hf>ag-@dme66Km z%B7OD|1Pdy#2i-+RZwmJdF~|%Lyqbqa|ZBCn?SmUbVD~5Mqb}R<0RFinBbaVektz2 zQ>YsppCH0ry9G_HD0eQ#*TF^*6#9~!tLoE8NRL1u{Ma;{`#q?Z{`0(&#x~-@Tw%JE zbsm}Gp6y@O$Lvg>fJ68{FIa~P!c(r5W^Ad7q$jw)Y&{U{V;gi`lkUe`GdJMJUem3J zhjop-|9%cSyx|TL&T2pS)t}v^XmJTnYx!*l^Uk;vbJ<1dP`SS45!QgFx*UEpJYEwun$m}pXMdzV2X~q=XWgI-&e#-%&dR&tRm56?JcGZ7 z58u{k`;CwchK`KOJrLAI5wKUeaAtfwg+gzu>+7+REL7r3F1$r0i-qCNyS{<#5SCb0 z2xFc?o|rANIAd^=Xj{L4O2UmR;x?4hAIykEpQ|B)^0 z!5NNjsNe~wB~Ms{p2# z<42X6F%SP!O6mN0jhtmxX6v)mxmAiiF_NlUN=|5;EOT84`twyxwqvE<%H!-km)5O3 zc=$Ltg+i7@?gC0gCo5uryxh9vuui+0sff~#S8YWz+nt4w$Kok{mq!`CuvL}CHOX{~ zFLU<5jWs{wt)+7u9rxd%=`9fK{7(}5^2Ib40F$y0GzJS-3Ke}R2dAn&a3a-D#C!xL zf>cyyQcB4}nee5eQ6h|uZiDqy>7;a9T1bLu#JGhbsvIZAkHq>|8_wV}Ucj6V%~-y% zEPX!b+GmoPOp;ampr2@km|aLg@&Ge2LUUIJ29T}KdRUP~a0aSBA7UsXU zW3^|!G7zWpau48BB;nlL&U=Zo?4cr0#R~P15sNjo9WZ^3zD2}9%%zR6b&7EnGWmxC z$tycYRkv7$1Z5(9X=VH3faj8#B0bd|#X;kd7VQ6QTcdL19)inyBC1`l_j{JU^eSGJ z5;STc+V7IlC0}+mZi}MttiV>e^Cnlj!zWkXByy7hqcX3jUda)W`o1B>et{&(P*Qcc zQwqXC%qkh=TV_@{LGC;z|hkV-emY}RQ)q7U6X#uIeTEHU#FeOtnL3o5ZgCJwicV6)?_D+=Bmm9dp zpq#!Ce*ozK4&xI}LndGcw@Vdlo4LcuHM1Ha7!27eU&rH#%X&B>NX+zU=|9hhveZo{ zvP_@S)~1sc!>Ytw=2;qiZ;0zDMhrv37fXt&ZRZT2@v}-)B@-7=pWagOu)>koM=CLk zWBa{7i3gBwtw12P+m;QVbrUKHUR)FVXtpugto$Q~>l^?6#Ru}{OFi|sGnNye&y-II zi04urrr_>+CzIwwWvo%r&#TI?Kx=5plz$gTCh~{@TBM&8-N41Ll>;*Ni< z`j||jw-CNRnCOiR?F1&tT_Z%2hfAZzOo`ONs}I0`aD6Qxo{#t+A2?BaQl=1$w~H^p zQw)od?N@!n2Opo}WE8J3hu{{>>ib9ffH*|#WIF)a>6IKlW5}oM@1vU#bjP6$3c-@@TNZU6B@Mxv=sE2XKa8%aQanQ zF_XU7qr8Zm+x&G}K{)Y2{Wi?F(1}VM~TK9GXrr=C74BUf9C=7(5TJ# zIT#^~N9Zo};i4iU@_*zsOm_$Z`xibetX{(1Gb8Xq{Vf1c*dqTt@23)E75bR^sK9PF z0;~u`wP87s*%*dj&g)A@5Jr z;-oT?*FDH=_w5@e&s#qZA<2$&uiXW-U&%~x19HI$q=J$bU?8TZ6z)Sj{YhW^Gl6%$U@|9)N zg-P2}v8EfZEklI<`W+N-A1Gmu!;0K2Q$GkVQNRX5z-2KA_;!WShk%012IB3+ILpJR zPM%cI!>J|xC|yJVZf+QpbbL>}gBBkuCb5jGsozAz8@H$yJ2hqY^pRh`A(uGkd%fDj zEh*=`n*U36{m3ZrIz!(<#C<+ohi6hwtzEtNnRL`ICHzZZxX~#$0LPZ7i92w5Psyzz zA@Lg}menn7rc_gwR#50Xbzq>SO&l*(0j<^T2kP4td21>p6{2N|O3#?`b&ZP@SI8$s z%K0c%wT5?^i~z?EY!P5Meqkkn=n)v7o!l&KR;~ik1?Jem%i|yEKHM^}HD1vJFP`8H z19Hs}Bpr&*E*SQ3Df?C}C{V$*1*UHS7%39KP>9xu%~_w4imMJ=`gS)LcVj6jIbb(8 zE;rD2BSJrU@Tu$6EF-m#R7=vblW4cz80WmgC#+X{^FC^y6k5fkF2FF;oJP?KH=;-o zYT+IJya}^pU9++dQK2PH5C764wui78i)oeYYPZ^o_>RzyZ8k1j!F5G0b78YFgcz7+ zf?O5NS#EvC`3DuC@M{K9oa#k|>T1r%FY2ynYX#*`%r1h053Rlx21|M8S-e(q9W`0x zBA2A^?>l5<{{)Mmv$jCh78|ix5~PML<6tX73%G{6o>4iHAg`;$9h7~Don+`~x_PM9 z!S|+_;!n~|@@$h#SxHPrnqU*<-J)pW)eE(Ckx-y0L*?Irqsxx?>D(Qgb3kSQg#4M| zGJp-f82vFzZt{^H@S%bF^=$fedC0Bu6$TQZ#DQgw6c#n7HjNLl41h>t&uCCz?~*0dTM4|D!ukJ97a+f=Tu&4H!vG+3q(j4~r!N5L zOp+<3Du=6eq=Qt`Rq}ulk_-6!^Pj(-=^auJ6LuhR(Cb1zi0-12aTFxl?~0263_$TW z=X7;BQJ_q1&b(gUSWmp-qNEo4g-MURerwr_aX?jy#wS0U3QNLFHwbKTZi_g8={shZ zvb)HJkBbY%u8#nNQv_QRYBD4<-M>&th0Ug?7&pGzgMm|a zk1^3PI8!Tm*LETViS<#@W;2*k ze)+{PMUtPC=#UkpX1ZyLMwhR`?7yB=0i>K`>x05RdEeUB?VRa137QT}mub^>9gdXh@ZvZE@5=1BLW~`bFSv@eF5vljU zJ?k+`8yS_=M3XXt9ntBD#Qj@4XZ43c{NP3_vd!Qea_6x%-1<*V=h`U&tw!2STT#`$ z;dJ3jS(!~V&QC^U+(WewGe{Ap6uGe^1c(?#CuK%3w_h$X+X~m15$z&AD_^e8jg5kY z+cGb&2tvyWQAEX1>6MA&NFrfpe+Z;1PWD@c{&s)^S6p)XRd z)<4)~%Ws+5#i^7>D*cl1u40I!g@U5Po(u&POwfLY%fB9UNHT*LzBu-Re9`!23ljoe z5&{_;lQCs}i8kZNg8k=I4d+;@SDDk{xf_t7 zA7gNt>gKbf%Q%~DA>@n$2cVxEY+t?)EaEf(#b|1zhR?{k7cn@NQ6e=RK&b^SA52}X z*2>W4v{?#_*qS4j?!LIgdlXybNAT4~FuM8D9h!{IL5Z82$wfR`L?4@R&}_$9KynljTN9EmT&; z5zFQiC`J+KV^t%Ny^KQh0)N9Wra6*mYH-!MO$#FW`m#+Mw?sUX)c4%mfARVvOOJaL z@&8p4wKM^k86+};f3%|Na0oY#2m%>FYB)*Z%U=ikh|U*QzF6?VV-n$f2;yo)8SAsu zI|L$9RkL2Ubq%g?ABy0 z8r?QKw3>)LvTC_BS@8)^aCtJ?_SWYKblc7^3OxLj82$sQj4eArJh-pZUtR2&@1 z`*q^raLgWYeTZRNwop1`v3FIwOw0^O1q!J5tS)wtCa&l&GQs|Iit!3!lQCdrtgi3A z{))qak-K6W$S60SD}6fBF1CVV{2bLPzkLEu)Km~@au&2dC?-dS@o5*|1GPrsV7A$N znP0LA!u@sy#A>dZzOuoIE2{rOqBGcUkk#BTgY2@5GRxw1581n~aEuI^#84_5nu=xh64_{Z+Qnk9VlOGbi91Fyi!_u+h*+diC=MuCTmBV=)dp z^R$xj>Ga-wm_ou|O&&xYSgrj~CV3Rze72#hz%SO2a($dn?PKZ#xXOoPMjK+}ta4E! zE~r=HnUvz$+y~jw)Zbbr^#Cl5f1#BI`R@AXg?ut}XbBk3m-`dKtwwN|Z0wIfm;GG! zwT1?Xc2q9f;WJZ%=hL<& zs)Z#DLk=O+><`Vvs8_lN40Cv;;MMF+JxoD8M0<2m<#exc%Pba94tV>EZKDy7fNfA& zY1KEH6wE6TiPjoUKaALM_9~#n!q{s%gg8q#iFHxOmCK=JFs<+p=K&vgaioUfHjjNP zP4n0Z&FqKWLP$coNDT*1uYnVqe?zY^6_hj5%CGy;oQinZax@||e`~F}AOEZ@Rng>! z=XS`a7V1Gz-xuC&N(T}Qb!3MebF08I%HM6uEXD;*xYbzDssvcW7nEcOEwv%yM-s7I zf32OuIkd@}(HL!rjt_6`^*TzibF+y=3=ht&%~Exh(pA!Wze1SvEy+$Zu+6iD8AFH( zs?0UDtX5Wd=Y@xO)(8KgD*j@XV8KQPqBYKUriA#9A%IzxfC2L=;q zp?%H~xsjN2R%A3V03B05_|V+{XrG6u@-KRNX93Yy(xlDZIBRw5%^=DeqhK18lC2|7 zxK;N4;1ZbqR1}L(ALHv`PcfV)^^HwM8U^n?Ns!Nq8||JL_=a`)P_}f@?b4!0!Q~B$FXR^ z(q;-g%E+`O_;2ZTSRsZ-pLlsk75V!L@?A$0V6Qdckm?#=J}?jsHMLSX9(rWohqmLp zqxvpz+zRK|JHG8>RpI55ME+boTPVNy{WE^&vzfcNMN*OLXykvvwWHd%VRr0Eq!IL< zQvNt&G*!r&()7F-&IBOFhr$}?<(`MyUV%u$Ae$WXubhv|($@uS=IJI}UnPE+3Y15B zqC4tGMd$}&7)@^}OZi5c`?<+yX>v)eIn=hV33n;q|w;{_jwm~IXn}F`0 zzt0ZTa2BGY<-UbZj0-bVw;JensJ$LlBNJzmQCOo=xcNGREt2f-`|l?=U@CytgC5T=)9bLNRd z1|d}+8MhB}Z?s5YfT|c)b*S2lKM5Yy$Xmmp8aa~v+gIW~^y}FFnx?O0UBs{I+eS)o zNC_zdIz$INVI9&UX@RR7BBWab4C;W~W<@Buj5`j+Wz9s_C-@Xya8J3B`R5iYhqX6r zIlef?ZE~huKJlkiV2xI)1iH)LpbkC_FPMEV^Am}SPHBQ~fUkn|GLbftkqslU>V+>H zQo}1H?x}ewzz2U)Fl|E;FK%=|eTQ)>sZz3x&*x=Po8)d+Gk%1@JVeCG-6;k$jKtf` z=nIk{n~iI7svnOWkdqiP0qoC=e8}0}0#QV@uEW%3j_5el<+g`zTW2(%B}J)95ouNj zPrntS;vLr-rRFY8#$1>Gc=yFWSE1Pt+*)azyZPR<4aLBdklYOOlblOoOHBFdci^dX zcgTf~G%Vv(X2mNLUzl8YVqPH)wV+QJ;6d4(R>~<*ZlN<=0C`|%%0S;N{ zx)Rl_oowvHD1fVf*usQxu`QhYt;`DaY}yrm(aGfN(45(_3${1+o+(c4UM<$y+^#bd zjv>)IA*g<5DK(-Iee5lHW{l~8yMhJR)$*m>j+NRokD@l`C+peSb zNsXTvsCvxsJ^Q%PLI-ch0HYUw{~(*#b$J7O>&fA-K1wssTC{%7r*mP4@x?cq$)Ds~ zxNWD8lP!a1-Fq3$-cS;4VpX#ysq5t zEH0neSJFxMJ46bzv|bmi(-qspx^giZh&)_H9=vd{{i`6{)rWR@n^)1!XRfjPZMBCR zD{lz%YIDo}rLtj1^*`?prslxJGaU)y&EjH?5Nv5p>&_F#J+#0 z+5}5laJ3F|zqZJ6=>>ll*t@KD$A-KFR^3LwZ?D99&2WO>gbop{K#$s7lM5|(iN3NY z3Y6AuDH}U*#Kf&(U*G9ctvyq%K-V_^>7TZUOw7Bks&(XxaY4vA!UZMms1n`?JQ|Km z?;1%*zOV?#OnyTAm+E6W0ywvu^>MJ*YH)-cs@74_92<6dP}Iky3md1};Nk)CsVj13 zl8$cKlh$a`0iV?KR|ZJa^6PNERGL zzjzP@w_@+F4l7wjI+a%if~eZ5)AMrqAohpaAvQn#uLZat{ons)Ga`x9U2nRMZa0f3{oTj0D&DXM2X8*LR+;K}29M@E zmW_5j$~CkAQ)1bTd2SH8gw^Kt$@#f3xREHYi07oMG<;8bc9w7vuB*WQgrq$OtE8&Nq z%1R?n38%#GhyD2%w9dp{X#)3bv5(kErxeZtJ#$+QI~*Jk%OMoe7%r-$oGFUE+ymfp`WCNA1zk}{V9C*Xt|Pqz-B_6VXOGJR|~N;afac; zt6I*MN%^Y%>qq0$`zmjyZmTFBa=FUpyF`1H+V4n^Z=R|`Y5Jb&6ivK7E8g=10>UIP z0PvDYzY2A^tF-fg4UZTL{>?*K-C?2j1{fd|_VtA)Cve)$@ypzOkf1#zdo{LYS*@(g zA;k)uWqsieapm3ZY6Wq0W>~ZT+fN62{4FkY*lb@r*5nx`V%8SKD=D76mcko~HFvfc z30zG8Iu0fxlQPsIC<*jSWeK+ow5RQ-`=||RC`1|tPw!yS{U|ftHKx6B1C9Vp!6X~c zQ9hAQ*vno<`*sf6c(JOZBWP=14+XExlT|$~RW;nBc4LA15WTf1T*bBKAUm5Icphip zX4br=cba6?J0e-x2=B6(2W|zJ$j%UAlUgb5@RFsd9rBn9;_7cWz9vtiow8lVG=BH2 z0(MNejKo`@=2SDbkLoo$r@D4DI|bxT<&o<2`Bps=alDKFBlzMni8=J=SPxwgzg{xV>=1hm^7bw*82voWzYlOB1vI0I+m`Bx z`e^?mHGHW)4gLR)=YFcdzhGg&mSbG_7NKBz5|K^MmwsN~F_wFcj4CNaf{9$fGxsS(4>8|HtPR?0{yh*tsh1O69bH<+gY literal 0 HcmV?d00001 diff --git a/docs/img/books/tsd-cover.png b/docs/img/books/tsd-cover.png new file mode 100644 index 0000000000000000000000000000000000000000..5034edfad271ed1898d3d76f4d881535e78f3cea GIT binary patch literal 118271 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 + + + + + + + + ## Tutorials * [Beginner's Guide to the Django REST Framework][beginners-guide-to-the-django-rest-framework] @@ -56,12 +67,6 @@ There are a wide range of resources available for learning and using Django REST * [New Django Admin with DRF and EmberJS... What are the News?][new-django-admin-with-drf-and-emberjs] * [Blog posts about Django REST Framework][medium-django-rest-framework] -## Books - -* [Two Scoops of Django 1.11, Chapter 16, 17, 26, and more][two-scoops-of-django-11] -* [Hello Web App: Intermediate Concepts, Chapter 10][hello-web-app-intermediate] -* [Two Scoops of Django 1.11, Chapter 16, 17, 26, and more][two-scoops-of-django-11] - ### Documentations * [Classy Django REST Framework][cdrf.co] * [DRF-schema-adapter][drf-schema] @@ -97,7 +102,6 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [drf-schema]: http://drf-schema-adapter.readthedocs.io/en/latest/ [creating-a-production-ready-api-with-python-and-drf-part1]: https://www.andreagrandi.it/2016/09/28/creating-production-ready-api-python-django-rest-framework-part-1/ [creating-a-production-ready-api-with-python-and-drf-part2]: https://www.andreagrandi.it/2016/10/01/creating-a-production-ready-api-with-python-and-django-rest-framework-part-2/ -[hello-web-app-intermediate]: https://hellowebapp.com/order/ [django-rest-api-so-easy]: https://www.youtube.com/watch?v=cqP758k1BaQ [full-fledged-rest-api-with-django-oauth-tookit]: https://www.youtube.com/watch?v=M6Ud3qC2tTk [drf-in-your-pjs]: https://www.youtube.com/watch?v=xMtHsWa72Ww @@ -110,4 +114,3 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [building-a-restful-api-with-drf]: http://agiliq.com/blog/2014/12/building-a-restful-api-with-django-rest-framework/ [submit-pr]: https://github.com/encode/django-rest-framework [anna-email]: mailto:anna@django-rest-framework.org -[two-scoops-of-django-11]: https://www.twoscoopspress.com/products/two-scoops-of-django-1-11 diff --git a/docs_theme/css/default.css b/docs_theme/css/default.css index 192e86860..a0a286b22 100644 --- a/docs_theme/css/default.css +++ b/docs_theme/css/default.css @@ -417,3 +417,8 @@ ul.sponsor { .toclink { color: #333; } + +.book-cover img { + margin: 0 !important; + display: inline-block !important; +} From 11d8e4df88d6bd257379822f220e34ad3154f504 Mon Sep 17 00:00:00 2001 From: Dave Allan Date: Sat, 1 Apr 2017 20:31:27 -0400 Subject: [PATCH 18/25] PoC Add JSONBoundField to serializers (Fixes #4999) Per issue #4999, JSONFields are not rendered properly in the DRF browsable API HTML forms. This patch attempts to fix that behavior by introducing a JSONBoundField helper similar to the NestedBoundField helper. --- rest_framework/serializers.py | 5 ++++- rest_framework/utils/serializer_helpers.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index ba01c3434..6e7e76fa8 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -38,7 +38,8 @@ from rest_framework.utils.field_mapping import ( get_relation_kwargs, get_url_kwargs ) from rest_framework.utils.serializer_helpers import ( - BindingDict, BoundField, NestedBoundField, ReturnDict, ReturnList + BindingDict, BoundField, JSONBoundField, NestedBoundField, ReturnDict, + ReturnList ) from rest_framework.validators import ( UniqueForDateValidator, UniqueForMonthValidator, UniqueForYearValidator, @@ -521,6 +522,8 @@ class Serializer(BaseSerializer): error = self.errors.get(key) if hasattr(self, '_errors') else None if isinstance(field, Serializer): return NestedBoundField(field, value, error) + if isinstance(field, JSONField): + return JSONBoundField(field, value, error) return BoundField(field, value, error) # Include a backlink to the serializer class on return objects. diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index 4734332af..67b89634c 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -1,6 +1,7 @@ from __future__ import unicode_literals import collections +import json from collections import OrderedDict from django.utils.encoding import force_text @@ -82,6 +83,12 @@ class BoundField(object): return self.__class__(self._field, value, self.errors, self._prefix) +class JSONBoundField(BoundField): + def as_form_field(self): + value = json.dumps(self.value) + return self.__class__(self._field, value, self.errors, self._prefix) + + class NestedBoundField(BoundField): """ This `BoundField` additionally implements __iter__ and __getitem__ From 7a0bd1c4d1950f49d8e0710f535d3d15c2c43d79 Mon Sep 17 00:00:00 2001 From: Dave Allan Date: Wed, 26 Apr 2017 12:00:32 -0400 Subject: [PATCH 19/25] Use text area for JSON fields and indent JSON --- rest_framework/utils/field_mapping.py | 4 ++-- rest_framework/utils/serializer_helpers.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index b8817d976..cc82492dc 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -8,7 +8,7 @@ from django.core import validators from django.db import models from django.utils.text import capfirst -from rest_framework.compat import DecimalValidator +from rest_framework.compat import DecimalValidator, JSONField from rest_framework.validators import UniqueValidator NUMERIC_FIELD_TYPES = ( @@ -88,7 +88,7 @@ def get_field_kwargs(field_name, model_field): if decimal_places is not None: kwargs['decimal_places'] = decimal_places - if isinstance(model_field, models.TextField): + if isinstance(model_field, models.TextField) or (JSONField and isinstance(model_field, JSONField)): kwargs['style'] = {'base_template': 'textarea.html'} if isinstance(model_field, models.AutoField) or not model_field.editable: diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index 67b89634c..2c4407d74 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -85,7 +85,7 @@ class BoundField(object): class JSONBoundField(BoundField): def as_form_field(self): - value = json.dumps(self.value) + value = json.dumps(self.value, sort_keys=True, indent=4) return self.__class__(self._field, value, self.errors, self._prefix) From f56b1170643021b71eff5dba8f5e61f4de322b74 Mon Sep 17 00:00:00 2001 From: Dave Allan Date: Wed, 26 Apr 2017 13:48:49 -0400 Subject: [PATCH 20/25] Pass non-JSON serializable values through unmodified --- rest_framework/utils/serializer_helpers.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rest_framework/utils/serializer_helpers.py b/rest_framework/utils/serializer_helpers.py index 2c4407d74..d4c659e5f 100644 --- a/rest_framework/utils/serializer_helpers.py +++ b/rest_framework/utils/serializer_helpers.py @@ -85,7 +85,11 @@ class BoundField(object): class JSONBoundField(BoundField): def as_form_field(self): - value = json.dumps(self.value, sort_keys=True, indent=4) + value = self.value + try: + value = json.dumps(self.value, sort_keys=True, indent=4) + except TypeError: + pass return self.__class__(self._field, value, self.errors, self._prefix) From 971bc066c5d41b001a134b95b6fe357c726135c9 Mon Sep 17 00:00:00 2001 From: Rodney Folz Date: Thu, 27 Apr 2017 15:44:06 -0700 Subject: [PATCH 21/25] Improve grammar in .force_authenticate() docs * Remove unnecessary comma * Remove the "and simple" copied from the line above. * Add "entirely" to emphasize that this function bypasses the authentication step. --- docs/api-guide/testing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/testing.md b/docs/api-guide/testing.md index 13c746017..753c77e2f 100644 --- a/docs/api-guide/testing.md +++ b/docs/api-guide/testing.md @@ -162,7 +162,7 @@ The `credentials` method is appropriate for testing APIs that require authentica #### .force_authenticate(user=None, token=None) -Sometimes you may want to bypass authentication, and simple force all requests by the test client to be automatically treated as authenticated. +Sometimes you may want to bypass authentication entirely and force all requests by the test client to be automatically treated as authenticated. This can be a useful shortcut if you're testing the API but don't want to have to construct valid authentication credentials in order to make test requests. From 6e7c9594fe0c59802c9d274819915e2c9314e0f8 Mon Sep 17 00:00:00 2001 From: Jimmy Gitonga Date: Fri, 28 Apr 2017 18:08:54 +0300 Subject: [PATCH 22/25] Updating the Django version "runserver" output and enforcing code block styling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CHANGED the Django version run server output to “1.11” ADDED “```” to a code block on line 44 of “/tutorial/7-schemas-and-client-libraries/“ to enforce code wrap. Perhaps, we might need to do this to all code blocks. I would be happy to do that. --- docs/tutorial/1-serialization.md | 2 +- docs/tutorial/7-schemas-and-client-libraries.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/tutorial/1-serialization.md b/docs/tutorial/1-serialization.md index fa54ca6a3..558797816 100644 --- a/docs/tutorial/1-serialization.md +++ b/docs/tutorial/1-serialization.md @@ -310,7 +310,7 @@ Quit out of the shell... Validating models... 0 errors found - Django version 1.8.3, using settings 'tutorial.settings' + Django version 1.11, using settings 'tutorial.settings' Development server is running at http://127.0.0.1:8000/ Quit the server with CONTROL-C. diff --git a/docs/tutorial/7-schemas-and-client-libraries.md b/docs/tutorial/7-schemas-and-client-libraries.md index e7bcfbafb..4d7193986 100644 --- a/docs/tutorial/7-schemas-and-client-libraries.md +++ b/docs/tutorial/7-schemas-and-client-libraries.md @@ -36,6 +36,7 @@ API schema. We can now include a schema for our API, by including an autogenerated schema view in our URL configuration. +``` from rest_framework.schemas import get_schema_view schema_view = get_schema_view(title='Pastebin API') @@ -44,6 +45,7 @@ view in our URL configuration.    url(r'^schema/$', schema_view), ... ] +``` If you visit the API root endpoint in a browser you should now see `corejson` representation become available as an option. From e7483133eae976aa779733d99397b7a232dd2b8d Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 1 May 2017 11:49:42 +0100 Subject: [PATCH 23/25] Update browsable-api.md --- docs/topics/browsable-api.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/topics/browsable-api.md b/docs/topics/browsable-api.md index bc1431cfc..a0ca6626b 100644 --- a/docs/topics/browsable-api.md +++ b/docs/topics/browsable-api.md @@ -146,8 +146,6 @@ An alternative, but more complex option would be to replace the input with an au There are [a variety of packages for autocomplete widgets][autocomplete-packages], such as [django-autocomplete-light][django-autocomplete-light], that you may want to refer to. Note that you will not be able to simply include these components as standard widgets, but will need to write the HTML template explicitly. This is because REST framework 3.0 no longer supports the `widget` keyword argument since it now uses templated HTML generation. -Better support for autocomplete inputs is planned in future versions. - --- [cite]: http://en.wikiquote.org/wiki/Alfred_North_Whitehead From 007e86ab276d6516179186fcc3372da76dc9ed4e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 2 May 2017 09:54:01 +0100 Subject: [PATCH 24/25] Included Python 3.6 in the requirements Refs #5108. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 02a20aff2..d710f3d4a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ There is a live example API for testing purposes, [available here][sandbox]. # Requirements -* Python (2.7, 3.2, 3.3, 3.4, 3.5) +* Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) * Django (1.8, 1.9, 1.10, 1.11) # Installation From e1fdb895b5dbdc6f2819667cedfeb2b63bd2c69e Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 2 May 2017 09:54:45 +0100 Subject: [PATCH 25/25] Included Python 3.6 in the requirements Refs #5108 --- docs/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/index.md b/docs/index.md index 9bf36cce7..23433a6b7 100644 --- a/docs/index.md +++ b/docs/index.md @@ -87,7 +87,7 @@ continued development by **[signing up for a paid plan][funding]**. REST framework requires the following: -* Python (2.7, 3.2, 3.3, 3.4, 3.5) +* Python (2.7, 3.2, 3.3, 3.4, 3.5, 3.6) * Django (1.8, 1.9, 1.10, 1.11) The following packages are optional: