Commit Graph

939 Commits

Author SHA1 Message Date
Tom Christie
68d2020112 Live API documentation (#4755) 2017-03-03 15:24:37 +00:00
Tim Watts
8df340908b Add failing tests and fix for dict that have a key items #4931 (#4932) 2017-03-03 09:23:09 +00:00
tdruez
d616c1591f Added a test to cover the DjangoModelPermissions #4927 issue
`DjangoObjectPermissions` and `DjangoModelPermissions` are now properly cover for the `METHOD_NOT_ALLOWED` issue
2017-03-01 09:50:21 +01:00
tdruez
c30ccac38e Added a failing test for #4927 2017-02-27 20:39:47 +01:00
Ran Benita
7a408f6cd2 Guard against the possible misspelling readonly_fields in model serializers
Fixes #4897.
2017-02-22 13:27:23 +02:00
Isaac Stone
289e1e440e Check for collection.Mapping instead of dict
issue #4901
2017-02-19 13:10:03 -08:00
Mariusz Felisiak
cd469f616a
Increased utils/encoders.py test coverage. 2017-02-15 07:17:33 +01:00
李扬
cbad236f6d Add max_length and min_length arguments for ListField (#4877) 2017-02-06 09:36:03 +00:00
Mariusz Felisiak
b99272c425
Fixed dedent for tab indent. 2017-01-31 20:57:52 +01:00
Artem Muterko
d610d150f1 Add test for pagination when limit not set 2017-01-31 16:51:09 +02:00
Mariusz Felisiak
3001b56e06 Fixed Django 2.0 compatibility due to django.conf.urls.include parameters change. (#4866) 2017-01-30 16:11:19 +00:00
Artem Muterko
31e9f7dfbb Add remaining tests for generics (#4865) 2017-01-30 11:08:03 +00:00
Artem Muterko
220be31791 Git add remaining tests for BaseSerializer (#4857) 2017-01-27 15:44:00 +00:00
Artem Muterko
d0eb2e6cae Add remaining tests for metadata (#4855) 2017-01-27 09:25:51 +00:00
Artem Muterko
21166a3ab6 Add couple of tests for filters (#4849) 2017-01-25 14:35:12 +00:00
Artem Muterko
48b5aa71f2 Refactor according to comments in PR (#4848) 2017-01-25 10:38:27 +00:00
Artem Muterko
9c8adb4812 Add couple of tests for compat module (#4845) 2017-01-24 12:50:35 +00:00
Mariusz Felisiak
6b399f1193 Fixed test_one_to_one_with_inheritance. Added required on_delete attribute to OneToOneField field. (#4838) 2017-01-24 09:56:46 +00:00
Mariusz Felisiak
5c0f9f147c Removed unnecessary utc wrapper. (#4839) 2017-01-23 16:22:32 +00:00
Artem Muterko
247954d497 Add tests for BasicAuthentication and TokenAuthentication (#4837)
* Add tests for BasicAuthentication

* Add tests for Token authentication

* Adjust test to pass on Django 1.8
2017-01-23 15:08:59 +00:00
José Padilla
d686b2cb15 Merge pull request #4834 from auvipy/slug
converted test asserts of relations slug to pytest
2017-01-20 15:42:20 -05:00
Asif Saifuddin Auvi
d2ae41529c fix wrong assert 2017-01-21 02:25:36 +06:00
Asif Saifuddin Auvi
63d8dc0b9b converted test asserts of relations slug to pytest 2017-01-21 02:14:33 +06:00
Artem Muterko
8043ff3fef Add test for urlquote_wrapper (#4832) 2017-01-20 20:09:47 +00:00
Asif Saifuddin Auvi
1ef334875f converted test asserts of hyperlin relations to pytest 2017-01-21 01:41:45 +06:00
Artem Muterko
0186b073bf Refactor router tests to pytest style 2017-01-19 18:00:07 +02:00
Artem Muterko
c2ce2fb3f0 Add tests for BaseContentNegotiation 2017-01-19 12:50:17 +02:00
Artem Muterko
076ca6e765 Add test for filter_renderers 2017-01-19 12:43:18 +02:00
Artem Muterko
46210205a4 Add tests for some template tags (#4815) 2017-01-18 20:41:32 +00:00
Artem Muterko
a8534baa41 Add remaining tests for validators (#4827) 2017-01-18 20:39:20 +00:00
Xavier Ordoquy
5e9249f429 Merge pull request #4824 from auvipy/newv
new matrix for python 3.6 and django 1.11
2017-01-18 17:24:44 +01:00
Asif Saifuddin Auvi
026a8d8707 make lint happy with isort --recursive 2017-01-18 22:15:44 +06:00
Asif Saifuddin Auvi
006ae46092 remove trailing comma 2017-01-18 21:40:07 +06:00
Asif Saifuddin Auvi
326e09dde9 added utc compat to tests of fields 2017-01-18 20:01:18 +06:00
Artem Muterko
0a496a423d Add tests for qs_exists (#4822) 2017-01-18 11:46:12 +00:00
Artem Muterko
06a5bcc88e Add mediatype tests (#4813) 2017-01-16 18:17:51 +00:00
Artem Muterko
e965270f51 Template html renderer tests (#4817) 2017-01-16 18:16:43 +00:00
Artem Muterko
41ac3565de Add test for delete field (#4819)
* Add test for delete field

* Remove unused import
2017-01-16 13:46:32 +00:00
Artem Muterko
514b5a6dd1 Add couple of test for AuthToken (#4816)
* Add couple of test for AuthToken

* PEP8 cleanup
2017-01-15 08:41:47 +00:00
José Padilla
5efbe17a86 Merge pull request #4808 from micgeronimo/pytest-cleanup
Refactor some tests to pytest style
2017-01-14 08:08:02 -05:00
Artem Muterko
ebd840c19f Revert several tests 2017-01-12 22:53:01 +02:00
Artem Muterko
c686749eef Throttle tests fix (#4810) 2017-01-12 17:53:48 +00:00
Artem Muterko
b4a9a1b9a3 Throttle tests (#4807) 2017-01-12 17:03:32 +00:00
Artem Muterko
9a6352789e Refactor request tests style 2017-01-12 18:41:27 +02:00
Artem Muterko
bd86104861 Refactor reverse tests style 2017-01-12 18:41:16 +02:00
Artem Muterko
401ab54275 Refactor schemas tests style 2017-01-12 18:33:24 +02:00
Asif Saifuddin Auvi
8fcb8d6350 converted metadata test asserts to pytest (#4806) 2017-01-12 08:21:15 +00:00
Artem Muterko
dd11bd42a2 Add remaining tests for SimpleRateThrottle (#4803) 2017-01-11 20:39:48 +00:00
Asif Saifuddin Auvi
14baf7eb7a converted serializer bulk update test asserts to pytest (#4805) 2017-01-11 20:38:32 +00:00
Artem Muterko
06afe6b1bf Convert tests to pytest style 2017-01-11 21:13:30 +02:00
Artem Muterko
66ffaaf5d3 Add more tests for Base and SimpleRate throttles (#4802) 2017-01-11 09:42:25 +00:00
Artem Muterko
e9d371f29a Add couple of basic tests for SimpleRateThrottle (#4800) 2017-01-09 20:43:54 +00:00
Artem Muterko
b6b2c4bb5b Renderer tests (#4791) 2017-01-08 16:33:43 +00:00
Artem Muterko
99d57df990 Convert encoders tests to pytest style (#4796) 2017-01-08 16:10:47 +00:00
Artem Muterko
a5fcf10c0e Raise RuntimeError when trying to encode coreapi objects (#4790) 2017-01-06 22:32:13 +00:00
José Padilla
559a0a89fc Merge pull request #4779 from auvipy/pyts0
converted throttling tests asserts to pytest
2017-01-04 10:31:44 -05:00
Asif Saifuddin Auvi
88a910ebc8 converted negotiation tests asserts to pytest 2017-01-04 18:58:01 +06:00
Asif Saifuddin Auvi
6ca7f76c67 Merge branch 'master' into pyts0 2017-01-04 18:43:55 +06:00
Asif Saifuddin Auvi
43677b8baf flake8 fix 2017-01-04 17:54:14 +06:00
Asif Saifuddin Auvi
8fa5846e51 conerted multi-table-inheritence test asserts to pytest 2017-01-04 17:46:55 +06:00
Asif Saifuddin Auvi
a7d33f4519 conerted throttling tests asserts to pytest 2017-01-04 15:59:21 +06:00
Asif Saifuddin Auvi
7874bcabe9 convert some more test asserts to pytest (#4778)
* converted urlpatterns test asserts to pytest

* converted test utils asserts to pytest

* removed extra newlines
2017-01-04 09:13:32 +00:00
Ryan P Kilby
11fd3bf108 Add disabling of declared fields on serializer subclasses (#4764)
* Add test for disabling declared fields on child
* Check that declared base field is not in attrs
* Update meta inheritance docs to include serializer
* Test that meta fields cannot be declared as None
* Add docs example for declarative field disabling
2017-01-03 21:14:19 +00:00
Matthew Medal
93fe531dea Breadcrumb view name suffix fix (#4750)
* add failing testcase for breadcrumb suffixes missing when using ModelViewSets

* fix get_breadcrumbs to honor overridden get_view_name and keep viewset suffixes

* ensure suffixes are appended in breadcrumb util
2016-12-20 22:19:00 +00:00
Asif Saifuddin Auvi
841a91e950 fix authentication_test pytest failure 2016-12-06 00:47:58 +06:00
Asif Saifuddin Auvi
85807e1958 converted authentication_test asserts to pytest 2016-12-06 00:33:13 +06:00
Asif Saifuddin Auvi
932d04a4be Browsable API tests asserts to pytest (#4725) 2016-12-01 16:17:36 +00:00
Asif Saifuddin Auvi
4f6c326a99 converted remaining unittes asserts of fields test to pytest (#4724) 2016-11-30 12:52:32 +00:00
Asif Saifuddin Auvi
1a741bb2a2 converted asserts of exceptions test to pytest (#4723) 2016-11-30 11:12:01 +00:00
Asif Saifuddin Auvi
7e8b01dbd2 converted asserts of encoders test to pytest 2016-11-30 16:45:48 +06:00
Asif Saifuddin Auvi
9a3f8d9a9c converted asserts of descriptions test to pytest 2016-11-30 16:42:43 +06:00
Asif Saifuddin Auvi
a9b6c97485 converted asserts of decorators test to pytest 2016-11-30 16:24:48 +06:00
Asif Saifuddin Auvi
504f4b44c6 converted asserts of atomic requests test to pytest 2016-11-30 16:17:30 +06:00
Asif Saifuddin Auvi
e03d88ced7 more pytest style assert (#4719) 2016-11-30 09:48:33 +00:00
Asif Saifuddin Auvi
10b5f36fec added fixes 2016-11-30 12:35:34 +06:00
Asif Saifuddin Auvi
f5a900a404 some reverts to fix test 2016-11-30 10:01:37 +06:00
Asif Saifuddin Auvi
a5bb9825f3 attempt to fix test again 2016-11-30 09:56:22 +06:00
Asif Saifuddin Auvi
4a0829d6ec attempt to fix test 2016-11-30 02:08:37 +06:00
Asif Saifuddin Auvi
27641e07b5 converted test asserts of generics-test to pytest 2016-11-30 01:13:21 +06:00
Ryan P Kilby
6498766749 Fix django deprecation warnings (#4712) 2016-11-29 09:49:18 +00:00
Asif Saifuddin Auvi
9f4c9691f4 converted filters tests asserts to pytest style (#4711) 2016-11-28 14:31:27 +00:00
Asif Saifuddin Auvi
42d6098c74 converted primary key relations test asserts to pytest (#4709) 2016-11-28 09:43:48 +00:00
Asif Saifuddin Auvi
cd3fd36d0e converted generic relations assert to pytest style 2016-11-27 23:55:09 +06:00
Asif Saifuddin Auvi
5ec223bca0 converted validators and write_only_fields test to pytest style (#4697) 2016-11-23 14:05:34 +00:00
Asif Saifuddin Auvi
4b59ec27fa convert tests asserts to pytest style (#4696) 2016-11-23 13:17:00 +00:00
Tom Christie
24791cb353 Invalidate any existing prefetch cache on PUT requests. (#4668) 2016-11-11 09:44:35 +00:00
Andrzej Pragacz
45e058d7ba Fix unhandled Http404, PermissionDenied in schema generation (#4645) (#4646) 2016-11-02 09:04:01 +00:00
Kennedy Mwenja
7038571157 Enable cursor pagination of value querysets. (#4569)
To do `GROUP_BY` queries in django requires one to use `.values()`
eg this groups posts by user getting a count of posts per user.

```
Posts.objects.order_by('user').values('user').annotate(post_count=Count('post'))
```

This would produce a value queryset which serializes its result
objects as dictionaries while `CursorPagination` requires a queryset
with result objects that are model instances.

This commit enables cursor pagination for value querysets.

- had to mangle the tests a bit to test it out. They might need
  some refactoring.
- tried the same for `.values_list()` but it turned out to be
  trickier than I expected since you have to use tuple indexes.
2016-11-01 10:42:01 +00:00
Nicolas Delaby
97d848413e Fix support of get_full_details() for Throttled exceptions (#4627)
Since `str` objects are immutable, appending to existing `str` creates
in fact a new `str` instance.

Thus `ErrorDetail.detail.code` attribute is lost after `str` concatenation operation.
2016-11-01 10:38:56 +00:00
Kieran Spear
98df932194 Fix FilterSet proxy (#4620) 2016-11-01 10:30:17 +00:00
Ryan P Kilby
d92b24a0b7 Make serializer fields import explicit (#4628) 2016-11-01 10:27:11 +00:00
Alex Kahan
895c67c9a2 Fixes #4532 (#4636) 2016-10-31 20:41:54 +00:00
Ryan P Kilby
eafc9a2393 Fix is_simple_callable with variable args, kwargs (#4622) 2016-10-25 20:47:24 +01:00
Tom Christie
0fe0e1e703 Fix schema base paths (#4611) 2016-10-21 16:59:34 +01:00
Tom Christie
f1bdce17b5 Fix for case of ListSerializer with single item (#4609) 2016-10-21 15:21:23 +01:00
Tom Christie
2395fb5386 Deprecate DjangoFilter backend (#4593)
Deprecate the built-in `rest_framework.filters.DjangoFilterBackend` in favour of the third-party `django_filters.rest_framework.DjangoFilterBackend`.
2016-10-20 10:47:09 +01:00
Tom Christie
de08f28a91 Test one to one with inheritance (#4575) 2016-10-13 14:21:23 +01:00
Tom Christie
8d0a91b002 Fix 3674 (#4571)
Handle ModelSerializer case for relationships to models with custom pk.
2016-10-13 12:43:43 +01:00
Alexey Evseev
2519ce9128 Fix schema generation with custom page_size pagination param (#4567) 2016-10-12 16:09:45 +01:00
Tom Christie
5677d063d8 Do not treat empty non-form input as HTML. (#4566) 2016-10-12 15:46:24 +01:00
Tom Christie
26e51ecd6c When HTML form input is used with JSONField, treat the input as a JSON encoded string, not a JSON primative. (#4565) 2016-10-12 14:04:10 +01:00
Tom Christie
b419970431 Handle empty data with serializer (#4564) 2016-10-12 10:47:17 +01:00
Tom Christie
7f29cfc931 Lazy hyperlink names (#4554) 2016-10-11 12:18:00 +01:00
Tom Christie
d0b3b6470a Fix prefetch_related updates. (#4553) 2016-10-11 11:07:40 +01:00
Tom Christie
a3802504a0 Error codes (#4550)
Add error codes to `APIException`
2016-10-11 10:25:21 +01:00
Tom Christie
0dec36eb41 Version 3.5 (#4525)
* Start test case

* Added 'requests' test client

* Address typos

* Graceful fallback if requests is not installed.

* Add cookie support

* Tests for auth and CSRF

* Py3 compat

* py3 compat

* py3 compat

* Add get_requests_client

* Added SchemaGenerator.should_include_link

* add settings for html cutoff on related fields

* Router doesn't work if prefix is blank, though project urls.py handles prefix

* Fix Django 1.10 to-many deprecation

* Add django.core.urlresolvers compatibility

* Update django-filter & django-guardian

* Check for empty router prefix; adjust URL accordingly

It's easiest to fix this issue after we have made the regex.  To try
to fix it before would require doing something different for List vs
Detail, which means we'd have to know which type of url we're
constructing before acting accordingly.

* Fix misc django deprecations

* Use TOC extension instead of header

* Fix deprecations for py3k

* Add py3k compatibility to is_simple_callable

* Add is_simple_callable tests

* Drop python 3.2 support (EOL, Dropped by Django)

* schema_renderers= should *set* the renderers, not append to them.

* API client (#4424)

* Fix release notes

* Add note about 'User account is disabled.' vs 'Unable to log in'

* Clean up schema generation (#4527)

* Handle multiple methods on custom action (#4529)

* RequestsClient, CoreAPIClient

* exclude_from_schema

* Added 'get_schema_view()' shortcut

* Added schema descriptions

* Better descriptions for schemas

* Add type annotation to schema generation

* Coerce schema 'pk' in path to actual field name

* Deprecations move into assertion errors

* Use get_schema_view in tests

* Updte CoreJSON media type

* Handle schema structure correctly when path prefixs exist. Closes #4401

* Add PendingDeprecation to Router schema generation.

* Added SCHEMA_COERCE_PATH_PK and SCHEMA_COERCE_METHOD_NAMES

* Renamed and documented 'get_schema_fields' interface.
2016-10-10 13:03:46 +01:00
Alex Kahan
4ff9e96b4c Adding tests to encoder.py (#4536) 2016-10-05 09:54:59 +01:00
Alex Kahan
915ac22aeb Adding tests for rest_framework.py (#4523) 2016-10-04 21:22:56 +01:00
Rowan Seymour
883efbc19f Case insensitive uniqueness validation (#4534) 2016-10-04 13:44:50 +01:00
Tom Christie
be74d11165 Fallback behavior for request parsing when request.POST already accessed. (#4500) 2016-09-21 11:49:09 +01:00
Tom Christie
4655501d51 Fix regression of RegexField. (#4490)
* Don't deepcopy 'regex' arguments, instead treat as immutable.
2016-09-15 12:44:45 +01:00
Mathieu Pillard
07efbdb45e Fix APIClient.get() when path contains unicode arguments (#4458) 2016-09-02 17:00:03 +01:00
José Padilla
d0ed482d70 Skip HiddenField from Schema fields (#4429) 2016-08-22 16:53:53 +01:00
Tom Christie
e3f8d06baf Include .action attribute on viewsets when generating schemas (#4408) 2016-08-15 17:10:55 +01:00
Tom Christie
101fd29039 Do not include uploads in request.POST (#4407) 2016-08-15 16:53:17 +01:00
Neil Parsons
7466b61e62 Don't strip empty query params when paginating (#4260) 2016-08-12 10:50:16 +01:00
Tom Christie
116917dbed Add form field descriptions to schemas (#4387) 2016-08-11 16:18:33 +01:00
Tom Christie
01b498ec51 Fix schema categories for custom list actions (#4386) 2016-08-11 14:07:40 +01:00
Tom Christie
b50d8950ee Pass request to schema generation (#4383)
Pass request to schema generation
2016-08-11 11:27:28 +01:00
Tom Christie
f16e880167 Stricter type validation for CharField. (#4380)
Stricter type validation for CharField
2016-08-10 17:22:19 +01:00
Tom Christie
f1a2eeb818 .choices property of RelatedField should preserve non-string values. (#4379)
Update RelatedField.choices to support non-string values
2016-08-10 16:38:59 +01:00
Tom Christie
9857cd9889 Add failing test for issue #3868 (#4378) 2016-08-10 16:04:32 +01:00
Daniel Hahler
378b04eeaa Fix handling of ALLOWED_VERSIONS and no DEFAULT_VERSION (#4370)
When only `ALLOWED_VERSIONS` but no `DEFAULT_VERSION` is specified, a
version should be enforced.
2016-08-10 15:19:56 +01:00
Tom Christie
48f3db36d6 Allow optional max_digits on DecimalField (#4377) 2016-08-10 14:39:26 +01:00
Tom Christie
8105a4ac5a Resolve form display with ChoiceField, MultipleChoiceField and non-string choices. (#4374)
* Add tests for html-form-rendering choice fields
* Resolve issues with ChoiceField, MultipleChoiceField and non-string options
* Ensure None template comparisons don't match string None
2016-08-10 12:02:33 +01:00
Dmitry Dygalo
e1768bdc16 Fixed various typos (#4366) 2016-08-08 09:32:22 +01:00
Tom Christie
d5178c9246 Include kwargs passed to 'as_view' when generating schemas (#4359) 2016-08-05 11:19:39 +01:00
Tom Christie
a9a097496e extra_kwargs takes precedence over uniqueness kwargs (#4349) 2016-08-02 14:33:15 +01:00
Tom Christie
5500b265bc Test cases for DictField with allow_null options (#4348) 2016-08-02 14:14:36 +01:00
Tom Christie
bda16a518a Dedent tabs. (#4347) 2016-08-02 13:33:14 +01:00
Tom Christie
e37619f741 Serializer defaults should not be included in partial updates. (#4346)
Serializer default values should not be included in partial updates
2016-08-02 13:05:12 +01:00
Tom Christie
3ef3fee926 Descriptive error from FileUploadParser when filename not included. (#4340)
* Descriptive error from FileUploadParser when filename not included.
* Consistent handling of upload filenames
2016-08-01 18:44:58 +01:00
Tom Christie
46a44e52aa Quantize incoming digitals (#4339) 2016-08-01 17:15:41 +01:00
Tom Christie
aa349fe767 Handle non-string input for IP fields (#4338) 2016-08-01 16:14:26 +01:00
Alexander Gaevsky
46a870c002 Fix schema generation for APIView, since it does not have get_serializer_class method. (#4285) 2016-07-27 15:36:36 +01:00
Tom Christie
351e0a4a99 Fix json indent parameter. Closes #4281 (#4313) 2016-07-27 11:49:01 +01:00
Tom Christie
5d3b56f957 Test case for #4272 (#4310)
* Test case for #4272
2016-07-26 16:28:10 +01:00
Sassan Haradji
f0f61aa077 use verbose_name instead of object_name in field_mapping (#4299)
* use verbose_name instead of object_name in error messages
2016-07-26 15:12:51 +01:00
Andi Albrecht
3ca0b15b17 Restore meta information for each search field. (#4298)
The meta information stored in opts needs to be restored for
each search field. Otherwise it references the wrong model
when an attribute of a related model comes before an attribute
of the original model in search fields. This doesn't apply to
m2m relations since must_call_distinct returns True in that
case.
2016-07-26 11:07:03 +01:00
Tom Christie
8385ae42c0 3.4.0 Release (#4258)
* 3.4.0 Release

* Version 3.4 release

* Full release notes

* Update translation files

* Update release documentation

* Update release notes

* Docs on supporting alternate schema formats

* Add schema_renderers to DefaultRouter
2016-07-13 16:30:41 +01:00
Mads Jensen
6defb8da47 lookup_type is deprecated in favor of lookup_expr (#4259)
* lookup_type is deprecated in favor of lookup_expr
* assertEquals is deprecated in favor of assertEqual
* app_name is a required keyword as of Django 1.10
2016-07-13 14:40:42 +01:00
kiyoqoko
6338ce80ab Add localize keyword argument to DecimalField (#4233)
Add `localize` keyword argument for DecimalField
2016-07-06 16:07:16 +01:00
Tom Christie
6ff9840bde Schemas & client libraries. (#4179)
* Added schema generation support.
* New tutorial section.
* API guide on schema generation.
* Topic guide on API clients.
2016-07-04 16:38:17 +01:00
Vadim
c752e9618f Fix test for py32-django18. 2016-06-29 10:21:28 +03:00
Vadim
c0f4dfd8f3 Add tests for the ListSerializer for the TestSerializerPartialUsage.
Additional fix partial update for the ListSerializer.
2016-06-29 09:48:31 +03:00
Laurent De Marez
fdde44d9d1 Fix parsing multipart data using a nested serializer with list (#3820)
It is possible that a key in a MultiValueDict has multiple values, lists
are represented this way. When accessing a key in a MultiValueDict
it only returns the last element of that key. This becomes a problem
when parsing an html dict with a list inside of it.

To fix this problem we have to get and set the value using .getlist()
and .setlist().
2016-06-23 16:03:24 +01:00
Tom Christie
bc3485ab7d Namespace versioning with nested namespaces (#4219)
Support nested namespaces with namespaced versioning.
2016-06-23 16:00:11 +01:00
Tom Christie
ea92d50582 Resolve tests against Django master (#4218) 2016-06-23 15:41:25 +01:00
Tom Christie
f81d516ae4 Robust uniqueness checks. (#4217)
* Robust uniqueness checks
* Add master to test matrix (allow_failures)
2016-06-23 15:09:23 +01:00
Simon Charette
90bb0c58ce Prevented unnecessary distinct() call in SearchFilter. (#3938)
* Prevented unnecessary distinct() call in SearchFilter.

* Refactored SearchFilter lookup prefixes.
2016-06-23 13:49:23 +01:00
Tom Christie
9406e45b2c Pass through strings as-in with DateTimeField (#4196) 2016-06-14 12:23:39 +01:00
Tom Christie
1633a0a2b1 Add test confirming that required=False is valid on a relational field (#4195) 2016-06-13 16:52:45 +01:00
Tom Christie
2e7fae7698 limit=0 should revert to default limit (#4194) 2016-06-13 16:32:43 +01:00
Tom Christie
c3b7fba918 Exclude read_only=True fields from unique_together validation & add docs. (#4192)
* Exclude read_only=True fields from unique_together validation
* Test to ensure that unique_together validators can be removed
* Do not add uniquness_extra_kwargs when validators are explicitly declared.
* Add docs on validation in complex cases
2016-06-13 13:31:12 +01:00
Tom Christie
bb22ab8ee7 More robust form rendering in the browsable API (#4181) 2016-06-08 17:13:20 +01:00
Tom Christie
a5f822d067 Empty cases of .validated_data and .errors as lists not dicts for ListSerializer (#4180) 2016-06-08 15:55:09 +01:00
Tom Christie
75751cc64e Allow relative style hyperlinked URLs 2016-06-02 15:03:17 +01:00
Tom Christie
9c996d7d2a Clean up existing deprecation warnings. (#4166)
* Add Meta.fields = '__all__' to serializer classes where required.
* Add explicit on_delete=models.CASCADE to ForeignKey fields.
* Use '.remote_field' and '.model' in preference to '.rel' and '.to' when inspecting model fields.
* Use new value_from_object in preference to internal _get_val_from_obj
2016-06-02 14:39:10 +01:00
Simon Charette
014e24b024 Do not list related field choices in OPTIONS requests.
Do not list related field choices in OPTIONS requests.
2016-06-01 16:33:03 +01:00
Tom Christie
994e1ba927 Django 1.10 support. (#4158)
* Added TEMPLATES setting to tests
* Remove deprecated view-string in URL conf
* Replace 'urls = ...' in test classes with override_settings('ROOT_URLCONF=...')
* Refactor UsingURLPatterns to use override_settings(ROOT_URLCONF=...) style
* Get model managers and names in a version-compatible manner.
* Apply override_settings to a TestCase, not a mixin class
* Use '.callback' property instead of private attributes when inspecting urlpatterns
* Pass 'user' to template explicitly
* Correct sorting of import statements.
* Remove unused TEMPLATE_LOADERS setting, in favor of TEMPLATES.
* Remove code style issue
* BaseFilter test requires a concrete model
* Resolve tox.ini issues
* Resolve isort differences between local and tox environments
2016-06-01 15:31:00 +01:00
Asif Saifuddin Auvi
dc09eef24a Style fix of tests (#4154)
Clean up code style.
2016-06-01 10:40:54 +01:00
Asif Saifuddin Auvi
eef94856d8 deleted description.py as unneeded 2016-06-01 10:24:29 +06:00
Asif Saifuddin Auvi
4fabdee4a3 fix lint error 2016-06-01 02:04:38 +06:00
Asif Saifuddin Auvi
91bb17770e removed description tests unicode related functions 2016-06-01 00:43:37 +06:00
Asif Saifuddin Auvi
3db45cb94d removed description codes as it seems to be python 2.6 issue 2016-06-01 00:39:01 +06:00
Kennedy Mwenja
592eea9b9e * Use get_serializer_class in ordering filter* Test improper configuration of ordering* Raise ImproperlyConfigured when missing get_serializer_class
* Use get_serializer_class in ordering filter
* Test improper configuration of ordering
* Raise ImproperlyConfigured when missing get_serializer_class
2016-05-26 09:59:13 +01:00
Xiao Hanyu
19bdfda49a Fix #3844, refine validator for fields with <source=> kwargs
When serializers has fields with something like `source=user.email`, the
uniqueness validator should check `email` field instead of `user`, cause
`user` is a model object.
2016-05-26 10:58:37 +08:00
Tom Christie
ebb4070467 Resolve TimeField representation for midnight value. (#4107) 2016-05-10 11:56:36 +01:00
José Padilla
0795f7394c Prevent raising exception when limit is 0 (#4098) 2016-05-10 10:58:24 +01:00
Miro Hrončok
ffdac0d936 TokenAuthentication: Allow custom keyword in the header (#4097)
This allows subclassing TokenAuthentication and setting custom keyword,
thus allowing the Authorization header to be for example:

    Bearer 956e252a-513c-48c5-92dd-bfddc364e812

It doesn't change the behavior of TokenAuthentication itself,
it simply allows to reuse the logic of TokenAuthentication without
the need of copy pasting the class and changing one hardcoded string.

Related: #4080
2016-05-04 10:53:34 +01:00
Germán Larraín
e19b21ecc5 Handle incorrectly padded HTTP basic auth header (#4090) 2016-05-03 09:24:55 +01:00
Daniele Varrazzo
88c80fe2e9 Fixed DecimalField arbitrary precision support (#4075) 2016-04-27 17:04:01 +01:00
Xavier Ordoquy
1823662e1e Merge pull request #4044 from linovia/merge/3.3.x_to_master
Merge the changes in 3.3.x back to master.
2016-04-21 11:31:15 +02:00
Phivos Stylianides
08dad04b19 Fix warnings when running tests (#4047) 2016-04-11 14:13:11 +01:00
Simon Charette
d87f2bc7b6 OrderingFilter adjustements (#3983)
* Made sure the OrderingFilter relies on Field.verbose_name.

* Marked OrderingFilter's order labels for translation.
2016-04-08 15:37:23 +01:00
Xavier Ordoquy
bff3bebdbe Merge remote-tracking branch 'reference/stable/3.3.x' into merge_test
# Conflicts:
#	docs/topics/release-notes.md
2016-04-08 15:46:17 +02:00
Jonathan Liuti
78e4ea0d6e No auth view failing permission should raise 403
A view with no `authentication_classes` set and that fails a

permission check should raise a 403 with the message from the

failing permission.
2016-04-07 16:24:26 +01:00
Xavier Ordoquy
cfb77ae6fa Merge pull request #3273 from olliewalsh/breadcrumbs_view_name
Do not ignore overridden View.get_view_name() in breadcrumbs
2016-03-23 01:10:13 +01:00
Xavier Ordoquy
0e8306341d Merge pull request #3936 from carltongibson/null-uuid-fk-take2
Fix None UUID ForeignKey serialization
2016-03-22 22:46:33 +01:00
Jared Lang
e34a34e90b Fix empty pk detection in HyperlinkRelatedField.get_url
This implementation allows detection of empty values that are non-nullable, allowing the field to return None values for such cases
2016-03-07 19:37:48 +01:00
Jared Lang
7ac8cc760c Fix empty pk detection in HyperlinkRelatedField.get_url
This implementation allows detection of empty values that are non-nullable, allowing the field to return None values for such cases
2016-02-29 12:56:56 -08:00
José Padilla
69c0de4faa Merge pull request #3953 from akarambir/remove-old-django-checks
Closes #3952: Remove old django checks from tests and compat
2016-02-19 11:08:45 -04:00
Karambir Singh Nain
69f1e3a9fd Remove old django checks from tests and compat
Remove skipping of tests for Django<1.8. Remove several functions from compat.py not needed for Django>=1.8
2016-02-19 01:47:45 +05:30
Xavier Ordoquy
5e08231453 Remove informations about why the pagination didn't work.
We remove a couple of informations to lower the exposition of our internals.
2016-02-17 18:18:19 +01:00
Erick Wilder
8109752061 Closes #3937. Support callable as the value of initial for any serializer.Field 2016-02-17 10:52:21 +01:00
Carlton Gibson
cbb8d8d254 Test deserialising data including None fk 2016-02-16 09:38:42 +01:00
Carlton Gibson
20d1fdba69 Fix None UUID ForeignKey serialization 2016-02-16 09:29:48 +01:00
Kostya Esmukov
b6adfab9b2 Added test case for #3908 2016-02-07 19:26:37 +03:00
Mikalay Radchuk
714607307e Fixes AttributeError in HTMLFormRenderer.render
If `HTMLFormRenderer.render` will be called with default arguments,
`AttributeError: 'NoneType' object has no attribute 'get'` will be raised.
2016-01-26 21:26:30 +03:00
Xavier Ordoquy
5068ecf64b Rename the get_queryset overriding test. 2016-01-21 16:50:07 +01:00
Xavier Ordoquy
6d95da7b2d Improve the get_queryset overriding test readability. 2016-01-21 16:48:32 +01:00
Xavier Ordoquy
f1b28b4d63 Merge pull request #3605 from ryanhiebert/slug-related-field-queryset
RelatedField get_queryset and context
2016-01-20 18:17:29 +01:00
Mads Jensen
215e1b6c6b Regarding #3729
python -Werror generates warnings informing that on_delete is a required keyword in Django 2.0
2016-01-14 15:14:33 +01:00
areski
4e01796303 Test for TimeField not handling empty values 2016-01-11 12:16:26 +01:00
Mikalai Radchuk
6b207d93d6 DateField.to_representation unicode compatibility 2016-01-11 13:11:01 +03:00
Tom Christie
f01a3d9c36 Merge pull request #3801 from koordinates/fix-nested-validation-error
Fix nested validation error being rendered incorrectly.
2016-01-07 09:22:23 +00:00
Kevin Massey
7cd3933144 Fixes #3804, avoiding update of Meta.extra_kwargs
Added unit test to cover.
2016-01-06 15:04:51 -05:00
Craig de Stigter
651319e2da Fix nested validation error being rendered incorrectly.
Previously an extra list wrapped nested validation errors raised from serializer's validate() methods.
That was inconsistent with the format of validation errors raised by validate_<fieldname> methods.
i.e. these two resulted in *different* behaviour:

    def validate_foo(self):
        raise ValidationError(['bar'])

    def validate(self):
        raise ValidationError({'foo': ['bar']})
2016-01-06 16:05:43 +13:00
Tom Christie
37f7b76f72 Merge pull request #3785 from sheppard/authtoken-import
don't import authtoken model until needed
2016-01-05 17:28:48 +00:00
S. Andrew Sheppard
4f40714169 fix import order 2016-01-05 10:20:22 -06:00
S. Andrew Sheppard
2b8c036b48 test custom token model 2016-01-05 09:58:16 -06:00
S. Andrew Sheppard
1712c00001 update invalid token case 2016-01-05 09:42:22 -06:00
Kevin Brown
a772326112 Merged two DecimalValidator tests together
These two tests were previously added in
7d79cf35b7
but we have now discovered that there are not actually two separate
cases, there was just a  bug in the code that made it look that way.

This also removes a redundant check to see if `DecimalValidator` was
defined.
2016-01-04 10:22:17 -05:00
Kevin Brown
d797389cf7 Fixed broken test for Django < 1.9
This test was incorrectly checking that there were no validators set in
older versions of Django, even though it should have been checking for
the two validators that were set up on the model field level.

The originally regression test that this fixes was added in
7d79cf35b7
when fixing an issue with the `DecimalValidator`.
2015-12-24 18:17:58 -05:00
Kevin Brown
9bab640b0a Added tests for min_value and max_value on a DecimalField
This adds tests for a regression where the `min_value` and `max_value`
arguments are not being set for a DRF `DecimalField` even though the
corresponding `MinValueValidator` and `MaxValueValidator` is being set
on the model fields.

Note that this only appears to be a regression for Django < 1.9, as
these regression tests pass on newer versions of Django.
2015-12-24 14:00:49 -05:00
Tom Christie
18cdfcd712 Merge pull request #3731 from mjparker777/master
Issue 3726 DateTimeField not handling empty values
2015-12-18 11:27:12 +00:00
Luis San Pablo
c389aeb051 Lint import ordring 2015-12-16 18:46:23 -06:00
Luis San Pablo
62e2a9706f Fixed import order settings 2015-12-16 18:37:50 -06:00
Luis San Pablo
dab6bf4b1a Changed error to warning message 2015-12-16 18:35:02 -06:00
mjparker777
fc08236ab8 updated timefield also 2015-12-13 16:09:56 -07:00
mjparker777
81775dfbae added missing comma 2015-12-13 12:27:08 -07:00
mjparker777
bf60c08010 Issue 3726 DateTimeField not handling empty values 2015-12-13 12:21:13 -07:00
Luis San Pablo
9db4c2ae8a --ammend 2015-12-07 22:31:09 -06:00
Luis San Pablo
4e5c57ab46 type on test case 2015-12-07 22:19:58 -06:00
Luis San Pablo
03c7f149ac Test case for settings check 2015-12-07 22:17:33 -06:00
Luis San Pablo
4b59681c60 Fixed Class Newlines 2015-12-04 05:57:09 +00:00
Luis San Pablo
4092cef392 Fixed Test Case for Hyperlink 2015-12-04 05:42:46 +00:00
Luis San Pablo
8501f59216 Hyperlink Test Case 2015-12-04 05:30:39 +00:00
bphillips
c153bcb479 Added validation to UUIDField to properly catch invalid input types (lists, tuples, etc). 2015-12-01 14:09:10 -05:00
Tom Christie
832d6322a7 Merge pull request #3631 from syphar/paginat
allow setting a custom Django Paginator class
2015-11-30 20:58:32 +00:00
Petros Moisiadis
3594c976b7 Added test case for rendering nested fields with none value 2015-11-27 15:07:29 +02:00
Tom Christie
04158e187e Merge pull request #3513 from pattisdr/feature/ListField_needs_to_enforce_list
ListField does not enforce that input is a list
2015-11-18 12:19:40 +00:00
Dawn Pattison
3ddbf92bf9 Remove unicode from exception value. 2015-11-13 10:41:57 -05:00
Dawn Pattison
5fdc4f22cf Add tests to ensure ListField does not except dictionary as input. 2015-11-13 10:17:09 -05:00
Denis Cornehl
3806af3d15 allow setting a custom Django Paginator in pagination.PageNumberPagination 2015-11-13 16:04:12 +01:00
Xavier Ordoquy
795cf4716d Fix module name with Python 3.5 2015-11-11 17:44:46 +01:00
Ryan Hiebert
f2452936e9 Allow no queryset when get_queryset overridden
The user may wish to provide a dynamic queryset on a `RelatedField`
based on the `context`. The way to do that is to create a subclass of
`RelatedField` (or a child) and override the `get_queryset` method.
However, this is undocumented, and instantiating that field without a
`queryset` argument (because it's not needed) will raise an assertion
error.

Document `.get_queryset(self)` as an official part of the API of
`RelatedField`, and don't enforce the use of `queryset` when
`get_queryset` is overridden.
2015-11-05 17:34:02 -06:00
José Padilla
7d79cf35b7 Add regression test for DecimalField mapping 2015-10-30 07:47:11 -04:00
Matthew Madurski
8aed3d4862 Correctly handle false in nested as_form_field 2015-10-24 19:48:17 -04:00
Tom Christie
84e9013417 Merge pull request #3531 from tomchristie/version-3.3
Version 3.3
2015-10-23 16:24:08 +01:00
José Padilla
d64bfef56a Map all supported FilePathField options 2015-10-23 10:08:29 -04:00
Tom Christie
7bfc420dc9 Add release notes, drop deprecated test 2015-10-22 15:11:10 +01:00
José Padilla
a1dad503cf Map TextField max_length to CharField 2015-10-16 07:17:33 -04:00
Tom Christie
dad207de66 Don't attempt to test dicts (unordered) 2015-09-28 17:41:09 +01:00
Tom Christie
ec8098b7e2 Work around 2.x/3.x json.dumps() return type fuzziness 2015-09-28 17:32:36 +01:00
Tom Christie
10dbf1316f Added JSONField. Closes #3170. 2015-09-28 17:25:52 +01:00
Tom Christie
c64896c849 More cleanup of browser overrides 2015-09-28 15:33:55 +01:00
Tom Christie
d7142e23ac Merge branch 'master' into remove-content-overriding 2015-09-28 15:15:50 +01:00
Tom Christie
2d0b54e263 Merge branch 'drop-django-16' oft https://github.com/carltongibson/django-rest-framework into carltongibson-drop-django-16
Conflicts:
	docs/topics/release-notes.md
2015-09-28 11:17:48 +01:00
Tom Christie
ca8313aeac Merge branch 'master' into version-3.3
Conflicts:
	docs/topics/release-notes.md
2015-09-28 10:57:14 +01:00
Stian Jensen
62c000bc12 Use model error_messages when available
In the automatically applied UniqueValidator, use the error message from
error_messages defined in the model instead of the generic default
UniqueValidator message.

This fixes #2878.
2015-09-23 15:20:44 +02:00
paolopaolopaolo
7640bfea9e Add assert statement to .save() method in Serializer:
- Asserts that `_data` does not exist when calling `.save()`
2015-09-22 11:49:51 -07:00
paolopaolopaolo
134f5fa4bc Fixes #3265 (now with Test Case)
- Added test_data_access_before_save_raises_error test
2015-09-22 11:40:19 -07:00
Carlton Gibson
45ace5010e Remove OrderedDict fallback 2015-09-22 16:35:38 +02:00
Carlton Gibson
0b34408172 Remove unittest.skipUnless 2015-09-22 16:24:22 +02:00
Carlton Gibson
6e86a53c92 Remove apps.get_model fallback
* Corrects presumed logic error in `ResolveModelWithPatchedDjangoTests`
2015-09-22 16:14:45 +02:00
Carlton Gibson
68c88e180f Remove ContentType import fallback 2015-09-22 15:55:39 +02:00
Alexey Boriskin
0155a44aac Typo in test method name 2015-09-22 12:13:01 +03:00
Carlton Gibson
25de8c960f Remove Django 1.5 get_model_name fallback 2015-09-21 20:10:31 +02:00
Xavier Ordoquy
f2c65512c6 Merge pull request #3415 from adamsc64/issue_2761
Fixed #2761 - ListField truncation on HTTP PATCH
2015-09-21 13:06:44 +02:00
Christopher Adams
cb42b995fa Proof of bug #2761
- When not submitting key for list fields or multiple choice, partial
  serialization should result in empty state (key not there), not an
  empty list.
2015-09-19 10:17:57 -04:00
Tom Christie
b8ebe29844 Import sorting 2015-09-17 16:40:47 +01:00
Tom Christie
343fd5ec3d Merge branch 'canassa-method-not-allowed-not-raised' into remove-content-overriding 2015-09-17 16:39:30 +01:00
Tom Christie
66e372200f Merge branch 'method-not-allowed-not-raised' of https://github.com/canassa/django-rest-framework into canassa-method-not-allowed-not-raised 2015-09-17 16:38:42 +01:00
Tom Christie
4b4130e8b2 Fix request cloning, so method becomes set 2015-09-17 16:34:03 +01:00
Tom Christie
a3067bea55 Merge branch 'master' into version-3.3 2015-09-17 16:24:46 +01:00
Tom Christie
566812ac0b Remove method and content overriding 2015-09-17 15:17:29 +01:00
Steven Loria
284f9faa07 Correctly handle [] and {} as invalid inputs to BooleanField 2015-09-11 23:12:18 -04:00
Xavier Ordoquy
aa48182686 Add test coverage on allow_empty for nested serializers. 2015-09-07 23:11:01 +02:00
raphaelmerx
b9782b6850 DurationField accepts integers 2015-09-02 16:47:50 -07:00
Tom Christie
f87573ffa3 Merge pull request #3345 from jpadilla/fields
Update ModelSerializer 'fields'/'exclude'/'__all__' behavior
2015-08-28 14:57:05 +01:00
Tom Christie
7560e8381f Drop unused patterns 2015-08-28 10:53:44 +01:00
Tom Christie
6fa534f214 Fix urlpatterns in test 2015-08-28 10:44:49 +01:00
Tom Christie
25c4c7f9fd Pep8 fix 2015-08-28 10:03:16 +01:00
Tom Christie
e70da5ac6b Compat for GenericForeignKey, GenericRelation 2015-08-28 10:03:08 +01:00
José Padilla
654e0e4527 Update ModelSerializer fields behavior 2015-08-27 13:09:08 -04:00
Tom Christie
4f27697467 Fix get_model import 2015-08-27 17:28:12 +01:00
Tom Christie
f691006f2c Resolve generic fields import 2015-08-27 17:16:19 +01:00
Tom Christie
48540f180a unittest compat fallback 2015-08-27 17:11:53 +01:00
Tom Christie
b271946b31 Merge pull request #3321 from tomchristie/empty-charfield-html
Resolve empty HTML charfield behavior.
2015-08-24 10:41:36 +01:00
Tom Christie
9ac646385f Resolve empty HTML charfield behavior. Closes #3318. 2015-08-24 10:13:16 +01:00
borzdyko
21d0e51831 Test for regex search filter 2015-08-21 18:23:39 +03:00
Tom Christie
0f77c27d34 Merge branch 'master' of https://github.com/callorico/django-rest-framework into callorico-master 2015-08-20 12:30:33 +01:00
José Padilla
8af366a732 Raise error when source= use on a child.
Closes #3292
2015-08-19 12:32:16 -04:00
Ollie Walsh
332c30afb9 Lint 2015-08-14 12:20:25 +01:00
Ollie Walsh
3d0292e1cd Do not ignore overridden View.get_view_name() in breadcrumbs 2015-08-14 12:16:57 +01:00
Tom Christie
18af181191 Fix boolean checkboxes setting to False. Closes #3258. Closes #2776. 2015-08-13 09:56:03 +01:00
James Beith
e9d9cb7011 Add tests for display_value 2015-08-10 12:19:46 +01:00
Ryan Kaneshiro
bc6bf7236b Add test to repro duplicate validation error
Using the ModelSerializer with a model containing a GenericIPAddressField
produces duplicated validation error messages.
2015-08-07 16:53:43 -07:00
Keryn Knight
08d60f5cc2 Refs #3235 - Test demonstrating a single value passed to ListField is lost. 2015-08-07 11:41:56 +01:00
Tom Christie
33d6d4a420 Test more types of behavior in test_iter_options 2015-08-06 12:30:26 +01:00
Tom Christie
24dec32e7a Added test_iter_options 2015-08-06 12:18:09 +01:00
Tom Christie
27ac5a3680 Support grouped choices 2015-08-06 11:43:03 +01:00
Tom Christie
95a1550388 Merge branch 'grouped-choices-fix' of https://github.com/maxpeterson/django-rest-framework into maxpeterson-grouped-choices-fix 2015-08-06 10:04:52 +01:00
Tom Christie
38a1b3ec6b Rationalize decimal logic. Closes #3222. 2015-08-06 09:51:00 +01:00
Cesar Canassa
60c17253ab Add test to check if a 415 status is returned for unsupported media types 2015-08-03 17:54:18 +02:00
Tom Christie
8d7c0a8474 Merge branch 'feature/filepathfield' of https://github.com/Ins1ne/django-rest-framework into Ins1ne-feature/filepathfield 2015-08-03 10:09:46 +01:00
Tom Christie
a543fae180 Merge pull request #2766 from delinhabit/allow-null-list-serializer
Modify subtle ChildSerializer(many=True, allow_null=True) behavior.
2015-07-31 10:11:21 +01:00
Tom Christie
e68d737825 Respect blank on many to many, and set allow_empty=False if it is not present. Closes #2804. 2015-07-30 17:03:08 +01:00
Tom Christie
4fd971e3e5 Update exception handler test in line with deprecations 2015-07-30 15:42:11 +01:00
Tom Christie
c203ca4c64 Deprecations 2015-07-30 15:26:42 +01:00
Tom Christie
c5a04a8516 Add test for nullable ChoiceField and blank HTML input. Closes #2623. 2015-07-27 13:51:03 +01:00
Ion Scerbatiuc
bbd44ae94b Updated the test cases based on the CR comments 2015-07-25 08:22:14 -07:00
Ion Scerbatiuc
085c3e8a2b Fixed python 2.6 compatibility 2015-07-25 08:10:15 -07:00
Ion Scerbatiuc
bf25a6ecbc Test case for using allow_null with many=True and a fix for it 2015-07-25 08:10:15 -07:00
Tom Christie
bdeb28944f Use RuntimeError, not AssertionError when guarding against direct View.queryset evalutation. Refs #3180. 2015-07-24 09:13:39 +01:00
Tom Christie
e05021c8c6 Guard against erronous direct .queryset evaluation in CBVs. 2015-07-23 17:17:18 +01:00
Tom Christie
d14bc3c4e1 Fix test cases for python3 2015-07-23 14:41:28 +01:00
Tom Christie
90fe0fb881 Errors in browsable API on error. Closes #3024. 2015-07-23 14:31:25 +01:00
Tom Christie
22631c73a7 Resolve assertion error with LimitOffsetPagination and erronous parameters. Closes #2920. 2015-07-23 12:41:35 +01:00