From ade172e1d5db87dc86bc616cbb4df7ccd2eb2fd3 Mon Sep 17 00:00:00 2001 From: Pravin <91125540+p-r-a-v-i-n@users.noreply.github.com> Date: Mon, 27 Oct 2025 22:14:48 +0530 Subject: [PATCH] Standardize spelling to American English in documentation (#9804) * Standardize spelling to American English (only in .md files) * Update remaining British english spell words to American english style * Configures the codespell pre-commit hook to enforce US English consistency changes: - Activates the `en-GB_to_en-US` built-in dictionary to flag British spellings - Created codespell-ignore-words.txt file to ignore specific words - include `code` and `names` for comprehensive typo checking in technical contexts. - changed the 'lets' to 'let's'. --- .pre-commit-config.yaml | 5 ++++ codespell-ignore-words.txt | 6 ++++ docs/api-guide/authentication.md | 2 +- docs/api-guide/fields.md | 4 +-- docs/api-guide/relations.md | 6 ++-- docs/api-guide/renderers.md | 2 +- docs/api-guide/responses.md | 2 +- docs/api-guide/schemas.md | 2 +- docs/api-guide/serializers.md | 8 ++--- docs/api-guide/testing.md | 10 +++---- docs/api-guide/validators.md | 2 +- docs/community/3.0-announcement.md | 2 +- docs/community/3.12-announcement.md | 4 +-- docs/community/3.13-announcement.md | 2 +- docs/community/3.15-announcement.md | 4 +-- docs/community/3.16-announcement.md | 4 +-- docs/community/3.4-announcement.md | 2 +- docs/community/3.5-announcement.md | 16 +++++----- docs/community/3.7-announcement.md | 2 +- docs/community/3.8-announcement.md | 4 +-- docs/community/3.9-announcement.md | 2 +- docs/community/release-notes.md | 30 +++++++++---------- docs/index.md | 2 +- docs/topics/browsable-api.md | 2 +- docs/topics/rest-hypermedia-hateoas.md | 2 +- rest_framework/generics.py | 2 +- rest_framework/mixins.py | 2 +- rest_framework/schemas/coreapi.py | 4 +-- rest_framework/schemas/openapi.py | 2 +- rest_framework/serializers.py | 2 +- tests/browsable_api/test_browsable_api.py | 4 +-- .../test_browsable_nested_api.py | 2 +- tests/test_fields.py | 2 +- tests/test_serializer_lists.py | 6 ++-- 34 files changed, 82 insertions(+), 71 deletions(-) create mode 100644 codespell-ignore-words.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 28686275a..244d670b8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,6 +29,11 @@ repos: rev: v2.4.1 hooks: - id: codespell + args: [ + "--builtin", "clear,rare,code,names,en-GB_to_en-US", + "--ignore-words", "codespell-ignore-words.txt", + "--skip", "*.css", + ] exclude: locale|kickstarter-announcement.md|coreapi-0.1.1.js additional_dependencies: # python doesn't come with a toml parser prior to 3.11 diff --git a/codespell-ignore-words.txt b/codespell-ignore-words.txt new file mode 100644 index 000000000..7670fb785 --- /dev/null +++ b/codespell-ignore-words.txt @@ -0,0 +1,6 @@ +Tim +assertIn +IAM +endcode +deque +thead \ No newline at end of file diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index 2f4d42959..f41481310 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -416,7 +416,7 @@ JSON Web Token is a fairly new standard which can be used for token-based authen ## Hawk HTTP Authentication -The [HawkREST][hawkrest] library builds on the [Mohawk][mohawk] library to let you work with [Hawk][hawk] signed requests and responses in your API. [Hawk][hawk] lets two parties securely communicate with each other using messages signed by a shared key. It is based on [HTTP MAC access authentication][mac] (which was based on parts of [OAuth 1.0][oauth-1.0a]). +The [HawkREST][hawkrest] library builds on the [Mohawk][mohawk] library to let you work with [Hawk][hawk] signed requests and responses in your API. [Hawk][hawk] let's two parties securely communicate with each other using messages signed by a shared key. It is based on [HTTP MAC access authentication][mac] (which was based on parts of [OAuth 1.0][oauth-1.0a]). ## HTTP Signature Authentication diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 8278e2a2f..c5682c179 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -180,7 +180,7 @@ The `allow_null` option is also available for string fields, although its usage ## EmailField -A text representation, validates the text to be a valid e-mail address. +A text representation, validates the text to be a valid email address. Corresponds to `django.db.models.fields.EmailField` @@ -762,7 +762,7 @@ suitable for updating our target object. With `source='*'`, the return from ('y_coordinate', 4), ('x_coordinate', 3)]) -For completeness lets do the same thing again but with the nested serializer +For completeness let's do the same thing again but with the nested serializer approach suggested above: class NestedCoordinateSerializer(serializers.Serializer): diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md index 7c4eece4b..b6d9918b0 100644 --- a/docs/api-guide/relations.md +++ b/docs/api-guide/relations.md @@ -300,7 +300,7 @@ For example, the following serializer: Would serialize to a nested representation like this: - >>> album = Album.objects.create(album_name="The Grey Album", artist='Danger Mouse') + >>> album = Album.objects.create(album_name="The Gray Album", artist='Danger Mouse') >>> Track.objects.create(album=album, order=1, title='Public Service Announcement', duration=245) >>> Track.objects.create(album=album, order=2, title='What More Can I Say', duration=264) @@ -310,7 +310,7 @@ Would serialize to a nested representation like this: >>> serializer = AlbumSerializer(instance=album) >>> serializer.data { - 'album_name': 'The Grey Album', + 'album_name': 'The Gray Album', 'artist': 'Danger Mouse', 'tracks': [ {'order': 1, 'title': 'Public Service Announcement', 'duration': 245}, @@ -344,7 +344,7 @@ By default nested serializers are read-only. If you want to support write-operat return album >>> data = { - 'album_name': 'The Grey Album', + 'album_name': 'The Gray Album', 'artist': 'Danger Mouse', 'tracks': [ {'order': 1, 'title': 'Public Service Announcement', 'duration': 245}, diff --git a/docs/api-guide/renderers.md b/docs/api-guide/renderers.md index 7a6bd39f4..2801c53da 100644 --- a/docs/api-guide/renderers.md +++ b/docs/api-guide/renderers.md @@ -134,7 +134,7 @@ An example of a view that uses `TemplateHTMLRenderer`: You can use `TemplateHTMLRenderer` either to return regular HTML pages using REST framework, or to return both HTML and API responses from a single endpoint. -If you're building websites that use `TemplateHTMLRenderer` along with other renderer classes, you should consider listing `TemplateHTMLRenderer` as the first class in the `renderer_classes` list, so that it will be prioritised first even for browsers that send poorly formed `ACCEPT:` headers. +If you're building websites that use `TemplateHTMLRenderer` along with other renderer classes, you should consider listing `TemplateHTMLRenderer` as the first class in the `renderer_classes` list, so that it will be prioritized first even for browsers that send poorly formed `ACCEPT:` headers. See the [_HTML & Forms_ Topic Page][html-and-forms] for further examples of `TemplateHTMLRenderer` usage. diff --git a/docs/api-guide/responses.md b/docs/api-guide/responses.md index dbdc8ff2c..00fe95196 100644 --- a/docs/api-guide/responses.md +++ b/docs/api-guide/responses.md @@ -11,7 +11,7 @@ source: REST framework supports HTTP content negotiation by providing a `Response` class which allows you to return content that can be rendered into multiple content types, depending on the client request. -The `Response` class subclasses Django's `SimpleTemplateResponse`. `Response` objects are initialised with data, which should consist of native Python primitives. REST framework then uses standard HTTP content negotiation to determine how it should render the final response content. +The `Response` class subclasses Django's `SimpleTemplateResponse`. `Response` objects are initialized with data, which should consist of native Python primitives. REST framework then uses standard HTTP content negotiation to determine how it should render the final response content. There's no requirement for you to use the `Response` class, you can also return regular `HttpResponse` or `StreamingHttpResponse` objects from your views if required. Using the `Response` class simply provides a nicer interface for returning content-negotiated Web API responses, that can be rendered to multiple formats. diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index c74d00cb7..5208929a6 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -20,7 +20,7 @@ package and then subsequently retired over the next releases. As a full-fledged replacement, we recommend the [drf-spectacular] package. It has extensive support for generating OpenAPI 3 schemas from -REST framework APIs, with both automatic and customisable options available. +REST framework APIs, with both automatic and customizable options available. For further information please refer to [Documenting your API](../topics/documenting-your-api.md#drf-spectacular). diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index 3ce8f887f..e73257381 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -48,7 +48,7 @@ We can now use `CommentSerializer` to serialize a comment, or list of comments. serializer.data # {'email': 'leila@example.com', 'content': 'foo bar', 'created': '2016-01-27T15:17:10.375877'} -At this point we've translated the model instance into Python native datatypes. To finalise the serialization process we render the data into `json`. +At this point we've translated the model instance into Python native datatypes. To finalize the serialization process we render the data into `json`. from rest_framework.renderers import JSONRenderer @@ -155,7 +155,7 @@ When deserializing data, you always need to call `is_valid()` before attempting serializer.is_valid() # False serializer.errors - # {'email': ['Enter a valid e-mail address.'], 'created': ['This field is required.']} + # {'email': ['Enter a valid email address.'], 'created': ['This field is required.']} Each key in the dictionary will be the field name, and the values will be lists of strings of any error messages corresponding to that field. The `non_field_errors` key may also be present, and will list any general validation errors. The name of the `non_field_errors` key may be customized using the `NON_FIELD_ERRORS_KEY` REST framework setting. @@ -298,7 +298,7 @@ When dealing with nested representations that support deserializing the data, an serializer.is_valid() # False serializer.errors - # {'user': {'email': ['Enter a valid e-mail address.']}, 'created': ['This field is required.']} + # {'user': {'email': ['Enter a valid email address.']}, 'created': ['This field is required.']} Similarly, the `.validated_data` property will include nested data structures. @@ -430,7 +430,7 @@ The context dictionary can be used within any serializer field logic, such as a Often you'll want serializer classes that map closely to Django model definitions. -The `ModelSerializer` class provides a shortcut that lets you automatically create a `Serializer` class with fields that correspond to the Model fields. +The `ModelSerializer` class provides a shortcut that let's you automatically create a `Serializer` class with fields that correspond to the Model fields. **The `ModelSerializer` class is the same as a regular `Serializer` class, except that**: diff --git a/docs/api-guide/testing.md b/docs/api-guide/testing.md index a84379eef..13019737c 100644 --- a/docs/api-guide/testing.md +++ b/docs/api-guide/testing.md @@ -264,7 +264,7 @@ For example... csrftoken = response.cookies['csrftoken'] # Interact with the API. - response = client.post('http://testserver/organisations/', json={ + response = client.post('http://testserver/organizations/', json={ 'name': 'MegaCorp', 'status': 'active' }, headers={'X-CSRFToken': csrftoken}) @@ -292,12 +292,12 @@ The CoreAPIClient allows you to interact with your API using the Python client = CoreAPIClient() schema = client.get('http://testserver/schema/') - # Create a new organisation + # Create a new organization params = {'name': 'MegaCorp', 'status': 'active'} - client.action(schema, ['organisations', 'create'], params) + client.action(schema, ['organizations', 'create'], params) - # Ensure that the organisation exists in the listing - data = client.action(schema, ['organisations', 'list']) + # Ensure that the organization exists in the listing + data = client.action(schema, ['organizations', 'list']) assert(len(data) == 1) assert(data == [{'name': 'MegaCorp', 'status': 'active'}]) diff --git a/docs/api-guide/validators.md b/docs/api-guide/validators.md index 3a122a3c6..a0ceaf12d 100644 --- a/docs/api-guide/validators.md +++ b/docs/api-guide/validators.md @@ -175,7 +175,7 @@ If you want the date field to be entirely hidden from the user, then use `Hidden Validators that are applied across multiple fields in the serializer can sometimes require a field input that should not be provided by the API client, but that *is* available as input to the validator. For this purposes use `HiddenField`. This field will be present in `validated_data` but *will not* be used in the serializer output representation. -**Note:** Using a `read_only=True` field is excluded from writable fields so it won't use a `default=…` argument. Look [3.8 announcement](https://www.django-rest-framework.org/community/3.8-announcement/#altered-the-behaviour-of-read_only-plus-default-on-field). +**Note:** Using a `read_only=True` field is excluded from writable fields so it won't use a `default=…` argument. Look [3.8 announcement](https://www.django-rest-framework.org/community/3.8-announcement/#altered-the-behavior-of-read_only-plus-default-on-field). REST framework includes a couple of defaults that may be useful in this context. diff --git a/docs/community/3.0-announcement.md b/docs/community/3.0-announcement.md index cec61f337..52acd10e2 100644 --- a/docs/community/3.0-announcement.md +++ b/docs/community/3.0-announcement.md @@ -632,7 +632,7 @@ The `MultipleChoiceField` class has been added. This field acts like `ChoiceFiel The `from_native(self, value)` and `to_native(self, data)` method names have been replaced with the more obviously named `to_internal_value(self, data)` and `to_representation(self, value)`. -The `field_from_native()` and `field_to_native()` methods are removed. Previously you could use these methods if you wanted to customise the behavior in a way that did not simply lookup the field value from the object. For example... +The `field_from_native()` and `field_to_native()` methods are removed. Previously you could use these methods if you wanted to customize the behavior in a way that did not simply lookup the field value from the object. For example... def field_to_native(self, obj, field_name): """A custom read-only field that returns the class name.""" diff --git a/docs/community/3.12-announcement.md b/docs/community/3.12-announcement.md index b192f7290..5264ddd85 100644 --- a/docs/community/3.12-announcement.md +++ b/docs/community/3.12-announcement.md @@ -50,7 +50,7 @@ See [the schema documentation](https://www.django-rest-framework.org/api-guide/s ## Customizing the operation ID. REST framework automatically determines operation IDs to use in OpenAPI -schemas. The latest version provides more control for overriding the behaviour +schemas. The latest version provides more control for overriding the behavior used to generate the operation IDs. See [the schema documentation](https://www.django-rest-framework.org/api-guide/schemas/#operationid) for more information. @@ -96,7 +96,7 @@ for details on using custom `AutoSchema` subclasses. ## Support for JSONField. Django 3.1 deprecated the existing `django.contrib.postgres.fields.JSONField` -in favour of a new database-agnositic `JSONField`. +in favor of a new database-agnositic `JSONField`. REST framework 3.12 now supports this new model field, and `ModelSerializer` classes will correctly map the model field. diff --git a/docs/community/3.13-announcement.md b/docs/community/3.13-announcement.md index e2c1fefa6..10d31b764 100644 --- a/docs/community/3.13-announcement.md +++ b/docs/community/3.13-announcement.md @@ -50,6 +50,6 @@ They must now use the more explicit keyword argument style... aliases = serializers.ListField(child=serializers.CharField()) ``` -This change has been made because using positional arguments here *does not* result in the expected behaviour. +This change has been made because using positional arguments here *does not* result in the expected behavior. See Pull Request [#7632](https://github.com/encode/django-rest-framework/pull/7632) for more details. diff --git a/docs/community/3.15-announcement.md b/docs/community/3.15-announcement.md index 848d534b2..fbe0c759b 100644 --- a/docs/community/3.15-announcement.md +++ b/docs/community/3.15-announcement.md @@ -39,12 +39,12 @@ By default the URLs created by `SimpleRouter` use regular expressions. This beha Dependency on pytz has been removed and deprecation warnings have been added, Django will provide ZoneInfo instances as long as USE_DEPRECATED_PYTZ is not enabled. More info on the migration can be found [in this guide](https://pytz-deprecation-shim.readthedocs.io/en/latest/migration.html). -## Align `SearchFilter` behaviour to `django.contrib.admin` search +## Align `SearchFilter` behavior to `django.contrib.admin` search Searches now may contain _quoted phrases_ with spaces, each phrase is considered as a single search term, and it will raise a validation error if any null-character is provided in search. See the [Filtering API guide](../api-guide/filtering.md) for more information. ## Other fixes and improvements -There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour. +There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behavior. See the [release notes](release-notes.md) page for a complete listing. diff --git a/docs/community/3.16-announcement.md b/docs/community/3.16-announcement.md index b8f460ae7..97e102c09 100644 --- a/docs/community/3.16-announcement.md +++ b/docs/community/3.16-announcement.md @@ -29,7 +29,7 @@ The current minimum versions of Django is now 4.2 and Python 3.9. ## Django LoginRequiredMiddleware -The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behaviour can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information. +The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behavior can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information. ## Improved support for UniqueConstraint @@ -37,6 +37,6 @@ The generation of validators for [UniqueConstraint](https://docs.djangoproject.c ## Other fixes and improvements -There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour. +There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behavior. See the [release notes](release-notes.md) page for a complete listing. diff --git a/docs/community/3.4-announcement.md b/docs/community/3.4-announcement.md index 03ef6fc41..2c68b178a 100644 --- a/docs/community/3.4-announcement.md +++ b/docs/community/3.4-announcement.md @@ -157,7 +157,7 @@ will result in a list of the available choices being returned in the response. In cases where there is a relational field, the previous behavior would be to return a list of available instances to choose from for that relational field. -In order to minimise exposed information the behavior now is to *not* return +In order to minimize exposed information the behavior now is to *not* return choices information for relational fields. If you want to override this new behavior you'll need to [implement a custom diff --git a/docs/community/3.5-announcement.md b/docs/community/3.5-announcement.md index de558fead..eb3bf7fd5 100644 --- a/docs/community/3.5-announcement.md +++ b/docs/community/3.5-announcement.md @@ -81,7 +81,7 @@ a dynamic client library to interact with your API. Finally, we're also now exposing the schema generation as a [publicly documented API][schema-generation-api], allowing you to more easily -override the behaviour. +override the behavior. ## Requests test client @@ -106,12 +106,12 @@ client library. client = CoreAPIClient() schema = client.get('http://testserver/schema/') - # Create a new organisation + # Create a new organization params = {'name': 'MegaCorp', 'status': 'active'} - client.action(schema, ['organisations', 'create'], params) + client.action(schema, ['organizations', 'create'], params) - # Ensure that the organisation exists in the listing - data = client.action(schema, ['organisations', 'list']) + # Ensure that the organization exists in the listing + data = client.action(schema, ['organizations', 'list']) assert(len(data) == 1) assert(data == [{'name': 'MegaCorp', 'status': 'active'}]) @@ -204,10 +204,10 @@ The `'pk'` identifier in schema paths is now mapped onto the actually model fiel name by default. This will typically be `'id'`. This gives a better external representation for schemas, with less implementation -detail being exposed. It also reflects the behaviour of using a ModelSerializer +detail being exposed. It also reflects the behavior of using a ModelSerializer class with `fields = '__all__'`. -You can revert to the previous behaviour by setting `'SCHEMA_COERCE_PATH_PK': False` +You can revert to the previous behavior by setting `'SCHEMA_COERCE_PATH_PK': False` in the REST framework settings. ### Schema action name representations @@ -215,7 +215,7 @@ in the REST framework settings. The internal `retrieve()` and `destroy()` method names are now coerced to an external representation of `read` and `delete`. -You can revert to the previous behaviour by setting `'SCHEMA_COERCE_METHOD_NAMES': {}` +You can revert to the previous behavior by setting `'SCHEMA_COERCE_METHOD_NAMES': {}` in the REST framework settings. ### DjangoFilterBackend diff --git a/docs/community/3.7-announcement.md b/docs/community/3.7-announcement.md index d1a39fa60..49f68ead2 100644 --- a/docs/community/3.7-announcement.md +++ b/docs/community/3.7-announcement.md @@ -53,7 +53,7 @@ In order to try to address this we're now adding the ability for per-view custom Let's take a quick look at using the new functionality... -The `APIView` class has a `schema` attribute, that is used to control how the Schema for that particular view is generated. The default behaviour is to use the `AutoSchema` class. +The `APIView` class has a `schema` attribute, that is used to control how the Schema for that particular view is generated. The default behavior is to use the `AutoSchema` class. from rest_framework.views import APIView from rest_framework.schemas import AutoSchema diff --git a/docs/community/3.8-announcement.md b/docs/community/3.8-announcement.md index f33b220fd..eef3ae0c9 100644 --- a/docs/community/3.8-announcement.md +++ b/docs/community/3.8-announcement.md @@ -36,7 +36,7 @@ If you use REST framework commercially and would like to see this work continue, ## Breaking Changes -### Altered the behaviour of `read_only` plus `default` on Field. +### Altered the behavior of `read_only` plus `default` on Field. [#5886][gh5886] `read_only` fields will now **always** be excluded from writable fields. @@ -44,7 +44,7 @@ Previously `read_only` fields when combined with a `default` value would use the operations. This was counter-intuitive in some circumstances and led to difficulties supporting dotted `source` attributes on nullable relations. -In order to maintain the old behaviour you may need to pass the value of `read_only` fields when calling `save()` in +In order to maintain the old behavior you may need to pass the value of `read_only` fields when calling `save()` in the view: def perform_create(self, serializer): diff --git a/docs/community/3.9-announcement.md b/docs/community/3.9-announcement.md index 6bc5e3cc3..bd886482c 100644 --- a/docs/community/3.9-announcement.md +++ b/docs/community/3.9-announcement.md @@ -152,7 +152,7 @@ See [#5990][gh5990]. ### `action` decorator replaces `list_route` and `detail_route` -Both `list_route` and `detail_route` are now deprecated in favour of the single `action` decorator. +Both `list_route` and `detail_route` are now deprecated in favor of the single `action` decorator. They will be removed entirely in 3.10. The `action` decorator takes a boolean `detail` argument. diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index ae59ae000..86cab8e2b 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -105,7 +105,7 @@ This release fixes a few bugs, clean-up some old code paths for unsupported Pyth **Date**: 28th March 2025 -This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behaviour of existing features and pre-existing behaviour. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation. +This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behavior of existing features and pre-existing behavior. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation. #### Features @@ -215,7 +215,7 @@ Date: 15th March 2024 * Partial serializer should not have required fields [[#7563](https://github.com/encode/django-rest-framework/pull/7563)] * Propagate 'default' from model field to serializer field. [[#9030](https://github.com/encode/django-rest-framework/pull/9030)] * Allow to override child.run_validation call in ListSerializer [[#8035](https://github.com/encode/django-rest-framework/pull/8035)] -* Align SearchFilter behaviour to django.contrib.admin search [[#9017](https://github.com/encode/django-rest-framework/pull/9017)] +* Align SearchFilter behavior to django.contrib.admin search [[#9017](https://github.com/encode/django-rest-framework/pull/9017)] * Class name added to unknown field error [[#9019](https://github.com/encode/django-rest-framework/pull/9019)] * Fix: Pagination response schemas. [[#9049](https://github.com/encode/django-rest-framework/pull/9049)] * Fix choices in ChoiceField to support IntEnum [[#8955](https://github.com/encode/django-rest-framework/pull/8955)] @@ -369,7 +369,7 @@ Date: 28th September 2020 * Add `--file` option to `generateschema` command. [#7130] * Support `tags` for OpenAPI schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#grouping-operations-with-tags). [#7184] -* Support customising the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] +* Support customizing the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] * Support OpenAPI components for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#components). [#7124] * The following methods on `AutoSchema` become public API: `get_path_parameters`, `get_pagination_parameters`, `get_filter_parameters`, `get_request_body`, `get_responses`, `get_serializer`, `get_paginator`, `map_serializer`, `map_field`, `map_choice_field`, `map_field_validators`, `allows_filters`. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#autoschema) * Add support for Django 3.1's database-agnositic `JSONField`. [#7467] @@ -407,7 +407,7 @@ Date: 28th September 2020 * Fix `PrimaryKeyRelatedField` and `HyperlinkedRelatedField` when source field is actually a property. [#7142] * `Token.generate_key` is now a class method. [#7502] * `@action` warns if method is wrapped in a decorator that does not preserve information using `@functools.wraps`. [#7098] -* Deprecate `serializers.NullBooleanField` in favour of `serializers.BooleanField` with `allow_null=True` [#7122] +* Deprecate `serializers.NullBooleanField` in favor of `serializers.BooleanField` with `allow_null=True` [#7122] --- @@ -417,7 +417,7 @@ Date: 28th September 2020 **Date**: 30th September 2020 -* **Security**: Drop `urlize_quoted_links` template tag in favour of Django's built-in `urlize`. Removes a XSS vulnerability for some kinds of content in the browsable API. +* **Security**: Drop `urlize_quoted_links` template tag in favor of Django's built-in `urlize`. Removes a XSS vulnerability for some kinds of content in the browsable API. ### 3.11.1 @@ -429,7 +429,7 @@ Date: 28th September 2020 **Date**: 12th December 2019 -* Drop `.set_context` API [in favour of a `requires_context` marker](3.11-announcement.md#validator-default-context). +* Drop `.set_context` API [in favor of a `requires_context` marker](3.11-announcement.md#validator-default-context). * Changed default widget for TextField with choices to select box. [#6892][gh6892] * Supported nested writes on non-relational fields, such as JSONField. [#6916][gh6916] * Include request/response media types in OpenAPI schemas, based on configured parsers/renderers. [#6865][gh6865] @@ -621,13 +621,13 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. **Date**: [3rd April 2018][3.8.0-milestone] -* **Breaking Change**: Alter `read_only` plus `default` behaviour. [#5886][gh5886] +* **Breaking Change**: Alter `read_only` plus `default` behavior. [#5886][gh5886] `read_only` fields will now **always** be excluded from writable fields. Previously `read_only` fields with a `default` value would use the `default` for create and update operations. - In order to maintain the old behaviour you may need to pass the value of `read_only` fields when calling `save()` in + In order to maintain the old behavior you may need to pass the value of `read_only` fields when calling `save()` in the view: def perform_create(self, serializer): @@ -635,13 +635,13 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. Alternatively you may override `save()` or `create()` or `update()` on the serializer as appropriate. -* Correct allow_null behaviour when required=False [#5888][gh5888] +* Correct allow_null behavior when required=False [#5888][gh5888] Without an explicit `default`, `allow_null` implies a default of `null` for outgoing serialization. Previously such fields were being skipped when read-only or otherwise not required. **Possible backwards compatibility break** if you were relying on such fields being excluded from the outgoing - representation. In order to restore the old behaviour you can override `data` to exclude the field when `None`. + representation. In order to restore the old behavior you can override `data` to exclude the field when `None`. For example: @@ -698,7 +698,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. * Add HStoreField, postgres fields tests [#5654][gh5654] * Always fully qualify ValidationError in docs [#5751][gh5751] * Remove unreachable code from ManualSchema [#5766][gh5766] -* Allowed customising API documentation code samples [#5752][gh5752] +* Allowed customizing API documentation code samples [#5752][gh5752] * Updated docs to use `pip show` [#5757][gh5757] * Load 'static' instead of 'staticfiles' in templates [#5773][gh5773] * Fixed a typo in `fields` docs [#5783][gh5783] @@ -761,7 +761,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. * Schema: Extract method for `manual_fields` processing [#5633][gh5633] - Allows for easier customisation of `manual_fields` processing, for example + Allows for easier customization of `manual_fields` processing, for example to provide per-method manual fields. `AutoSchema` adds `get_manual_fields`, as the intended override point, and a utility method `update_fields`, to handle by-name field replacement from a list, which, in general, you are not @@ -883,7 +883,7 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. * Don't strip microseconds from `time` when encoding. Makes consistent with `datetime`. **BC Change**: Previously only milliseconds were encoded. [#5440][gh5440] * Added `STRICT_JSON` setting (default `True`) to raise exception for the extended float values (`nan`, `inf`, `-inf`) accepted by Python's `json` module. - **BC Change**: Previously these values would converted to corresponding strings. Set `STRICT_JSON` to `False` to restore the previous behaviour. [#5265][gh5265] + **BC Change**: Previously these values would converted to corresponding strings. Set `STRICT_JSON` to `False` to restore the previous behavior. [#5265][gh5265] * Add support for `page_size` parameter in CursorPaginator class [#5250][gh5250] * Make `DEFAULT_PAGINATION_CLASS` `None` by default. **BC Change**: If your were **just** setting `PAGE_SIZE` to enable pagination you will need to add `DEFAULT_PAGINATION_CLASS`. @@ -921,10 +921,10 @@ Be sure to upgrade to Python 3 before upgrading to Django REST Framework 3.10. * Fix naming collisions in Schema Generation [#5464][gh5464] * Call Django's authenticate function with the request object [#5295][gh5295] * Update coreapi JS to 0.1.1 [#5479][gh5479] -* Have `is_list_view` recognise RetrieveModel… views [#5480][gh5480] +* Have `is_list_view` recognize RetrieveModel… views [#5480][gh5480] * Remove Django 1.8 & 1.9 compatibility code [#5481][gh5481] * Remove deprecated schema code from DefaultRouter [#5482][gh5482] -* Refactor schema generation to allow per-view customisation. +* Refactor schema generation to allow per-view customization. **BC Change**: `SchemaGenerator.get_serializer_fields` has been refactored as `AutoSchema.get_serializer_fields` and drops the `view` argument [#5354][gh5354] ## 3.6.x series diff --git a/docs/index.md b/docs/index.md index 87330f5af..230aa838c 100644 --- a/docs/index.md +++ b/docs/index.md @@ -53,7 +53,7 @@ Some reasons you might want to use REST framework: * [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources. * Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers]. * Extensive documentation, and [great community support][group]. -* Used and trusted by internationally recognised companies including [Mozilla][mozilla], [Red Hat][redhat], [Heroku][heroku], and [Eventbrite][eventbrite]. +* Used and trusted by internationally recognized companies including [Mozilla][mozilla], [Red Hat][redhat], [Heroku][heroku], and [Eventbrite][eventbrite]. --- diff --git a/docs/topics/browsable-api.md b/docs/topics/browsable-api.md index 8cf530b7a..dd2da6877 100644 --- a/docs/topics/browsable-api.md +++ b/docs/topics/browsable-api.md @@ -181,7 +181,7 @@ The context that's available to the template: * `FORMAT_PARAM` : The view can accept a format override * `METHOD_PARAM` : The view can accept a method override -You can override the `BrowsableAPIRenderer.get_context()` method to customise the context that gets passed to the template. +You can override the `BrowsableAPIRenderer.get_context()` method to customize the context that gets passed to the template. #### Not using base.html diff --git a/docs/topics/rest-hypermedia-hateoas.md b/docs/topics/rest-hypermedia-hateoas.md index 3498bddd1..c0822b027 100644 --- a/docs/topics/rest-hypermedia-hateoas.md +++ b/docs/topics/rest-hypermedia-hateoas.md @@ -32,7 +32,7 @@ REST framework also includes [serialization] and [parser]/[renderer] components ## What REST framework doesn't provide. -What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labelled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope. +What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labeled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope. [cite]: https://vimeo.com/channels/restfest/49503453 [dissertation]: https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm diff --git a/rest_framework/generics.py b/rest_framework/generics.py index 167303321..ca35dcf15 100644 --- a/rest_framework/generics.py +++ b/rest_framework/generics.py @@ -1,5 +1,5 @@ """ -Generic views that provide commonly needed behaviour. +Generic views that provide commonly needed behavior. """ from django.core.exceptions import ValidationError from django.db.models.query import QuerySet diff --git a/rest_framework/mixins.py b/rest_framework/mixins.py index 7fa8947cb..00487450b 100644 --- a/rest_framework/mixins.py +++ b/rest_framework/mixins.py @@ -1,7 +1,7 @@ """ Basic building blocks for generic class based views. -We don't bind behaviour to http method handlers yet, +We don't bind behavior to http method handlers yet, which allows mixin classes to be composed in interesting ways. """ from rest_framework import status diff --git a/rest_framework/schemas/coreapi.py b/rest_framework/schemas/coreapi.py index 657178304..1397f9842 100644 --- a/rest_framework/schemas/coreapi.py +++ b/rest_framework/schemas/coreapi.py @@ -50,7 +50,7 @@ Position conflicts with coreapi.Link for URL path {target_url}. Attempted to insert link with keys: {keys}. Adjust URLs to avoid naming collision or override `SchemaGenerator.get_keys()` -to customise schema structure. +to customize schema structure. """ @@ -513,7 +513,7 @@ class AutoSchema(ViewInspector): Default implementation looks for ModelViewSet or GenericAPIView actions/methods that cause filtering on the default implementation. - Override to adjust behaviour for your view. + Override to adjust behavior for your view. Note: Introduced in v3.7: Initially "private" (i.e. with leading underscore) to allow changes based on user experience. diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index e569e2501..a048f9324 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -86,7 +86,7 @@ class SchemaGenerator(BaseSchemaGenerator): components_schemas.update(components) - # Normalise path for any provided mount url. + # Normalize path for any provided mount url. if path.startswith('/'): path = path[1:] path = urljoin(self.url or '/', path) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 290534300..ea2daffd5 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -7,7 +7,7 @@ Serialization in REST framework is a two-phase process: 1. Serializers marshal between complex types like model instances, and python primitives. -2. The process of marshalling between python primitives and request and +2. The process of marshaling between python primitives and request and response content is handled by parsers and renderers. """ diff --git a/tests/browsable_api/test_browsable_api.py b/tests/browsable_api/test_browsable_api.py index 758e3d1a4..9df4b2f5f 100644 --- a/tests/browsable_api/test_browsable_api.py +++ b/tests/browsable_api/test_browsable_api.py @@ -33,7 +33,7 @@ class AnonymousUserTests(TestCase): @override_settings(ROOT_URLCONF='tests.browsable_api.auth_urls') class DropdownWithAuthTests(TestCase): - """Tests correct dropdown behaviour with Auth views enabled.""" + """Tests correct dropdown behavior with Auth views enabled.""" def setUp(self): self.client = APIClient(enforce_csrf_checks=True) self.username = 'john' @@ -74,7 +74,7 @@ class DropdownWithAuthTests(TestCase): @override_settings(ROOT_URLCONF='tests.browsable_api.no_auth_urls') class NoDropdownWithoutAuthTests(TestCase): - """Tests correct dropdown behaviour with Auth views NOT enabled.""" + """Tests correct dropdown behavior with Auth views NOT enabled.""" def setUp(self): self.client = APIClient(enforce_csrf_checks=True) self.username = 'john' diff --git a/tests/browsable_api/test_browsable_nested_api.py b/tests/browsable_api/test_browsable_nested_api.py index a6c2ee6bd..9ef7605d6 100644 --- a/tests/browsable_api/test_browsable_nested_api.py +++ b/tests/browsable_api/test_browsable_nested_api.py @@ -28,7 +28,7 @@ urlpatterns = [ class DropdownWithAuthTests(TestCase): - """Tests correct dropdown behaviour with Auth views enabled.""" + """Tests correct dropdown behavior with Auth views enabled.""" @override_settings(ROOT_URLCONF='tests.browsable_api.test_browsable_nested_api') def test_login(self): diff --git a/tests/test_fields.py b/tests/test_fields.py index b52442a2c..03ff366ae 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -332,7 +332,7 @@ class TestInitialWithCallable: def test_initial_should_accept_callable(self): """ - Follows the default ``Field.initial`` behaviour where they accept a + Follows the default ``Field.initial`` behavior where they accept a callable to produce the initial value""" assert self.serializer.data == { 'initial_field': 123, diff --git a/tests/test_serializer_lists.py b/tests/test_serializer_lists.py index 42ebf4771..f76451a5a 100644 --- a/tests/test_serializer_lists.py +++ b/tests/test_serializer_lists.py @@ -287,7 +287,7 @@ class TestNestedListSerializer: class TestNestedListSerializerAllowEmpty: - """Tests the behaviour of allow_empty=False when a ListSerializer is used as a field.""" + """Tests the behavior of allow_empty=False when a ListSerializer is used as a field.""" @pytest.mark.parametrize('partial', (False, True)) def test_allow_empty_true(self, partial): @@ -643,7 +643,7 @@ class TestSerializerPartialUsage: class TestEmptyListSerializer: """ - Tests the behaviour of ListSerializers when there is no data passed to it + Tests the behavior of ListSerializers when there is no data passed to it """ def setup_method(self): @@ -672,7 +672,7 @@ class TestEmptyListSerializer: class TestMaxMinLengthListSerializer: """ - Tests the behaviour of ListSerializers when max_length and min_length are used + Tests the behavior of ListSerializers when max_length and min_length are used """ def setup_method(self):