diff options
Diffstat (limited to 'docs/topics/release-notes.md')
| -rw-r--r-- | docs/topics/release-notes.md | 229 |
1 files changed, 107 insertions, 122 deletions
diff --git a/docs/topics/release-notes.md b/docs/topics/release-notes.md index 11d12ae3..b9216e36 100644 --- a/docs/topics/release-notes.md +++ b/docs/topics/release-notes.md @@ -38,6 +38,53 @@ You can determine your currently installed version using `pip freeze`: --- +## 3.0.x series + +### 3.0.2 + +**Date**: [17th December 2014][3.0.2-milestone]. + +* Ensure `request.user` is made available to response middleware. ([#2155][gh2155]) +* `Client.logout()` also cancels any existing `force_authenticate`. ([#2218][gh2218], [#2259][gh2259]) +* Extra assertions and better checks to preventing incorrect serializer API use. ([#2228][gh2228], [#2234][gh2234], [#2262][gh2262], [#2263][gh2263], [#2266][gh2266], [#2267][gh2267], [#2289][gh2289], [#2291][gh2291]) +* Fixed `min_length` message for `CharField`. ([#2255][gh2255]) +* Fix `UnicodeDecodeError`, which can occur on serializer `repr`. ([#2270][gh2270], [#2279][gh2279]) +* Fix empty HTML values when a default is provided. ([#2280][gh2280], [#2294][gh2294]) +* Fix `SlugRelatedField` raising `UnicodeEncodeError` when used as a multiple choice input. ([#2290][gh2290]) + +### 3.0.1 + +**Date**: [11th December 2014][3.0.1-milestone]. + +* More helpful error message when the default Serializer `create()` fails. ([#2013][gh2013]) +* Raise error when attempting to save serializer if data is not valid. ([#2098][gh2098]) +* Fix `FileUploadParser` breaks with empty file names and multiple upload handlers. ([#2109][gh2109]) +* Improve `BindingDict` to support standard dict-functions. ([#2135][gh2135], [#2163][gh2163]) +* Add `validate()` to `ListSerializer`. ([#2168][gh2168], [#2225][gh2225], [#2232][gh2232]) +* Fix JSONP renderer failing to escape some characters. ([#2169][gh2169], [#2195][gh2195]) +* Add missing default style for `FileField`. ([#2172][gh2172]) +* Actions are required when calling `ViewSet.as_view()`. ([#2175][gh2175]) +* Add `allow_blank` to `ChoiceField`. ([#2184][gh2184], [#2239][gh2239]) +* Cosmetic fixes in the HTML renderer. ([#2187][gh2187]) +* Raise error if `fields` on serializer is not a list of strings. ([#2193][gh2193], [#2213][gh2213]) +* Improve checks for nested creates and updates. ([#2194][gh2194], [#2196][gh2196]) +* `validated_attrs` argument renamed to `validated_data` in `Serializer` `create()`/`update()`. ([#2197][gh2197]) +* Remove deprecated code to reflect the dropped Django versions. ([#2200][gh2200]) +* Better serializer errors for nested writes. ([#2202][gh2202], [#2215][gh2215]) +* Fix pagination and custom permissions incompatibility. ([#2205][gh2205]) +* Raise error if `fields` on serializer is not a list of strings. ([#2213][gh2213]) +* Add missing translation markers for relational fields. ([#2231][gh2231]) +* Improve field lookup behavior for dicts/mappings. ([#2244][gh2244], [#2243][gh2243]) +* Optimized hyperlinked PK. ([#2242][gh2242]) + +### 3.0.0 + +**Date**: 1st December 2014 + +For full details see the [3.0 release announcement](3.0-announcement.md). + +--- + ## 2.4.x series ### 2.4.4 @@ -63,7 +110,7 @@ You can determine your currently installed version using `pip freeze`: * Bugfix: Fix migration in `authtoken` application. * Bugfix: Allow selection of integer keys in nested choices. * Bugfix: Return `None` instead of `'None'` in `CharField` with `allow_none=True`. -* Bugfix: Ensure custom model fields map to equivelent serializer fields more reliably. +* Bugfix: Ensure custom model fields map to equivelent serializer fields more reliably. * Bugfix: `DjangoFilterBackend` no longer quietly changes queryset ordering. ### 2.4.2 @@ -121,7 +168,7 @@ You can determine your currently installed version using `pip freeze`: * Add `UnicodeYAMLRenderer` that extends `YAMLRenderer` with unicode. * Fix `parse_header` argument convertion. * Fix mediatype detection under Python 3. -* Web browseable API now offers blank option on dropdown when the field is not required. +* Web browsable API now offers blank option on dropdown when the field is not required. * `APIException` representation improved for logging purposes. * Allow source="*" within nested serializers. * Better support for custom oauth2 provider backends. @@ -159,7 +206,7 @@ You can determine your currently installed version using `pip freeze`: * Added `write_only_fields` option to `ModelSerializer` classes. * JSON renderer now deals with objects that implement a dict-like interface. * Fix compatiblity with newer versions of `django-oauth-plus`. -* Bugfix: Refine behavior that calls model manager `all()` across nested serializer relationships, preventing erronous behavior with some non-ORM objects, and preventing unneccessary queryset re-evaluations. +* Bugfix: Refine behavior that calls model manager `all()` across nested serializer relationships, preventing erronous behavior with some non-ORM objects, and preventing unnecessary queryset re-evaluations. * Bugfix: Allow defaults on BooleanFields to be properly honored when values are not supplied. * Bugfix: Prevent double-escaping of non-latin1 URL query params when appending `format=json` params. @@ -200,7 +247,7 @@ You can determine your currently installed version using `pip freeze`: * Added `MAX_PAGINATE_BY` setting and `max_paginate_by` generic view attribute. * Added `cache` attribute to throttles to allow overriding of default cache. * 'Raw data' tab in browsable API now contains pre-populated data. -* 'Raw data' and 'HTML form' tab preference in browseable API now saved between page views. +* 'Raw data' and 'HTML form' tab preference in browsable API now saved between page views. * Bugfix: `required=True` argument fixed for boolean serializer fields. * Bugfix: `client.force_authenticate(None)` should also clear session info if it exists. * Bugfix: Client sending empty string instead of file now clears `FileField`. @@ -442,7 +489,7 @@ The security vulnerabilities only affect APIs which use the `XMLParser` class, b * Bugfix: Validation errors instead of exceptions when related fields receive incorrect types. * Bugfix: Handle ObjectDoesNotExist exception when serializing null reverse one-to-one -**Note**: Prior to 2.1.16, The Decimals would render in JSON using floating point if `simplejson` was installed, but otherwise render using string notation. Now that use of `simplejson` has been deprecated, Decimals will consistently render using string notation. See [#582] for more details. +**Note**: Prior to 2.1.16, The Decimals would render in JSON using floating point if `simplejson` was installed, but otherwise render using string notation. Now that use of `simplejson` has been deprecated, Decimals will consistently render using string notation. See [ticket 582](ticket-582) for more details. ### 2.1.15 @@ -614,122 +661,7 @@ This change will not affect user code, so long as it's following the recommended * **Fix all of the things.** (Well, almost.) * For more information please see the [2.0 announcement][announcement]. ---- - -## 0.4.x series - -### 0.4.0 - -* Supports Django 1.5. -* Fixes issues with 'HEAD' method. -* Allow views to specify template used by TemplateRenderer -* More consistent error responses -* Some serializer fixes -* Fix internet explorer ajax behavior -* Minor xml and yaml fixes -* Improve setup (e.g. use staticfiles, not the defunct ADMIN_MEDIA_PREFIX) -* Sensible absolute URL generation, not using hacky set_script_prefix - ---- - -## 0.3.x series - -### 0.3.3 - -* Added DjangoModelPermissions class to support `django.contrib.auth` style permissions. -* Use `staticfiles` for css files. - - Easier to override. Won't conflict with customized admin styles (e.g. grappelli) -* Templates are now nicely namespaced. - - Allows easier overriding. -* Drop implied 'pk' filter if last arg in urlconf is unnamed. - - Too magical. Explicit is better than implicit. -* Saner template variable auto-escaping. -* Tidier setup.py -* Updated for URLObject 2.0 -* Bugfixes: - - Bug with PerUserThrottling when user contains unicode chars. - -### 0.3.2 - -* Bugfixes: - * Fix 403 for POST and PUT from the UI with UserLoggedInAuthentication (#115) - * serialize_model method in serializer.py may cause wrong value (#73) - * Fix Error when clicking OPTIONS button (#146) - * And many other fixes -* Remove short status codes - - Zen of Python: "There should be one-- and preferably only one --obvious way to do it." -* get_name, get_description become methods on the view - makes them overridable. -* Improved model mixin API - Hooks for build_query, get_instance_data, get_model, get_queryset, get_ordering - -### 0.3.1 - -* [not documented] - -### 0.3.0 - -* JSONP Support -* Bugfixes, including support for latest markdown release - ---- - -## 0.2.x series - -### 0.2.4 - -* Fix broken IsAdminUser permission. -* OPTIONS support. -* XMLParser. -* Drop mentions of Blog, BitBucket. - -### 0.2.3 - -* Fix some throttling bugs. -* ``X-Throttle`` header on throttling. -* Support for nesting resources on related models. - -### 0.2.2 - -* Throttling support complete. - -### 0.2.1 - -* Couple of simple bugfixes over 0.2.0 - -### 0.2.0 - -* Big refactoring changes since 0.1.0, ask on the discussion group if anything isn't clear. - The public API has been massively cleaned up. Expect it to be fairly stable from here on in. - -* ``Resource`` becomes decoupled into ``View`` and ``Resource``, your views should now inherit from ``View``, not ``Resource``. - -* The handler functions on views ``.get() .put() .post()`` etc, no longer have the ``content`` and ``auth`` args. - Use ``self.CONTENT`` inside a view to access the deserialized, validated content. - Use ``self.user`` inside a view to access the authenticated user. - -* ``allowed_methods`` and ``anon_allowed_methods`` are now defunct. if a method is defined, it's available. - The ``permissions`` attribute on a ``View`` is now used to provide generic permissions checking. - Use permission classes such as ``FullAnonAccess``, ``IsAuthenticated`` or ``IsUserOrIsAnonReadOnly`` to set the permissions. - -* The ``authenticators`` class becomes ``authentication``. Class names change to ``Authentication``. - -* The ``emitters`` class becomes ``renderers``. Class names change to ``Renderers``. - -* ``ResponseException`` becomes ``ErrorResponse``. - -* The mixin classes have been nicely refactored, the basic mixins are now ``RequestMixin``, ``ResponseMixin``, ``AuthMixin``, and ``ResourceMixin`` - You can reuse these mixin classes individually without using the ``View`` class. - ---- - -## 0.1.x series - -### 0.1.1 - -* Final build before pulling in all the refactoring changes for 0.2, in case anyone needs to hang on to 0.1. - -### 0.1.0 - -* Initial release. +For older release notes, [please see the GitHub repo](old-release-notes). [cite]: http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html [deprecation-policy]: #deprecation-policy @@ -742,5 +674,58 @@ This change will not affect user code, so long as it's following the recommended [staticfiles13]: https://docs.djangoproject.com/en/1.3/howto/static-files/#with-a-template-tag [2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion [announcement]: rest-framework-2-announcement.md -[#582]: https://github.com/tomchristie/django-rest-framework/issues/582 +[ticket-582]: https://github.com/tomchristie/django-rest-framework/issues/582 [rfc-6266]: http://tools.ietf.org/html/rfc6266#section-4.3 +[old-release-notes]: https://github.com/tomchristie/django-rest-framework/blob/2.4.4/docs/topics/release-notes.md#04x-series + +[3.0.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22 +[3.0.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22 + +<!-- 3.0.1 --> +[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013 +[gh2098]: https://github.com/tomchristie/django-rest-framework/issues/2098 +[gh2109]: https://github.com/tomchristie/django-rest-framework/issues/2109 +[gh2135]: https://github.com/tomchristie/django-rest-framework/issues/2135 +[gh2163]: https://github.com/tomchristie/django-rest-framework/issues/2163 +[gh2168]: https://github.com/tomchristie/django-rest-framework/issues/2168 +[gh2169]: https://github.com/tomchristie/django-rest-framework/issues/2169 +[gh2172]: https://github.com/tomchristie/django-rest-framework/issues/2172 +[gh2175]: https://github.com/tomchristie/django-rest-framework/issues/2175 +[gh2184]: https://github.com/tomchristie/django-rest-framework/issues/2184 +[gh2187]: https://github.com/tomchristie/django-rest-framework/issues/2187 +[gh2193]: https://github.com/tomchristie/django-rest-framework/issues/2193 +[gh2194]: https://github.com/tomchristie/django-rest-framework/issues/2194 +[gh2195]: https://github.com/tomchristie/django-rest-framework/issues/2195 +[gh2196]: https://github.com/tomchristie/django-rest-framework/issues/2196 +[gh2197]: https://github.com/tomchristie/django-rest-framework/issues/2197 +[gh2200]: https://github.com/tomchristie/django-rest-framework/issues/2200 +[gh2202]: https://github.com/tomchristie/django-rest-framework/issues/2202 +[gh2205]: https://github.com/tomchristie/django-rest-framework/issues/2205 +[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 +[gh2213]: https://github.com/tomchristie/django-rest-framework/issues/2213 +[gh2215]: https://github.com/tomchristie/django-rest-framework/issues/2215 +[gh2225]: https://github.com/tomchristie/django-rest-framework/issues/2225 +[gh2231]: https://github.com/tomchristie/django-rest-framework/issues/2231 +[gh2232]: https://github.com/tomchristie/django-rest-framework/issues/2232 +[gh2239]: https://github.com/tomchristie/django-rest-framework/issues/2239 +[gh2242]: https://github.com/tomchristie/django-rest-framework/issues/2242 +[gh2243]: https://github.com/tomchristie/django-rest-framework/issues/2243 +[gh2244]: https://github.com/tomchristie/django-rest-framework/issues/2244 +<!-- 3.0.2 --> +[gh2155]: https://github.com/tomchristie/django-rest-framework/issues/2155 +[gh2218]: https://github.com/tomchristie/django-rest-framework/issues/2218 +[gh2228]: https://github.com/tomchristie/django-rest-framework/issues/2228 +[gh2234]: https://github.com/tomchristie/django-rest-framework/issues/2234 +[gh2255]: https://github.com/tomchristie/django-rest-framework/issues/2255 +[gh2259]: https://github.com/tomchristie/django-rest-framework/issues/2259 +[gh2262]: https://github.com/tomchristie/django-rest-framework/issues/2262 +[gh2263]: https://github.com/tomchristie/django-rest-framework/issues/2263 +[gh2266]: https://github.com/tomchristie/django-rest-framework/issues/2266 +[gh2267]: https://github.com/tomchristie/django-rest-framework/issues/2267 +[gh2270]: https://github.com/tomchristie/django-rest-framework/issues/2270 +[gh2279]: https://github.com/tomchristie/django-rest-framework/issues/2279 +[gh2280]: https://github.com/tomchristie/django-rest-framework/issues/2280 +[gh2289]: https://github.com/tomchristie/django-rest-framework/issues/2289 +[gh2290]: https://github.com/tomchristie/django-rest-framework/issues/2290 +[gh2291]: https://github.com/tomchristie/django-rest-framework/issues/2291 +[gh2294]: https://github.com/tomchristie/django-rest-framework/issues/2294 |
