Skip to content

Commit e3f50f4

Browse files
committed
Prepare CurrentUserDefault like DRF would do it
1 parent 594b8d3 commit e3f50f4

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

rest_framework_swagger/introspectors.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
import rest_framework
1919
from rest_framework import viewsets
2020
from rest_framework.compat import apply_markdown
21+
try:
22+
from rest_framework.fields import CurrentUserDefault
23+
except ImportError:
24+
# FIXME once we drop support of DRF 2.x .
25+
CurrentUserDefault = None
2126
from rest_framework.utils import formatting
2227
from django.utils import six
2328
try:
@@ -43,6 +48,9 @@ def get_default_value(field):
4348
if default_value == empty:
4449
default_value = None
4550
if callable(default_value):
51+
if CurrentUserDefault is not None and isinstance(default_value,
52+
CurrentUserDefault):
53+
default_value.user = None
4654
default_value = default_value()
4755
return default_value
4856

rest_framework_swagger/tests.py

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
import os.path
66
from mock import Mock, patch
77
from distutils.version import StrictVersion
8+
try:
9+
from unittest.case import SkipTest
10+
except ImportError:
11+
from unittest2.case import SkipTest
812

913
from django.core.urlresolvers import RegexURLResolver, RegexURLPattern
1014
from django.conf import settings
@@ -485,7 +489,8 @@ class SerializedAPI(ListCreateAPIView):
485489
delta = datetime.timedelta(seconds=1)
486490
self.assertAlmostEqual(value, datetime.datetime.now(), delta=delta)
487491

488-
def test_get_models_ordering(self):
492+
def test_get_models_ordering_drf2(self):
493+
489494
class SerializedAPI(ListCreateAPIView):
490495
serializer_class = CommentSerializer
491496

@@ -501,6 +506,35 @@ class SerializedAPI(ListCreateAPIView):
501506
["email", "content", "created"],
502507
list(models['CommentSerializer']['properties'].keys()))
503508

509+
def test_get_models_ordering_drf3(self):
510+
if StrictVersion(rest_framework.VERSION) < StrictVersion('3.0'):
511+
raise SkipTest('Only for DRF>=3.0')
512+
513+
from rest_framework.fields import CurrentUserDefault
514+
515+
class CommentSerializer(serializers.Serializer):
516+
email = serializers.EmailField()
517+
content = serializers.CharField(max_length=200)
518+
created = serializers.DateTimeField(default=datetime.datetime.now)
519+
owner = serializers.PrimaryKeyRelatedField(
520+
default=CurrentUserDefault(),
521+
queryset=User.objects.all())
522+
523+
class SerializedAPI(ListCreateAPIView):
524+
serializer_class = CommentSerializer
525+
526+
urlparser = UrlParser()
527+
url_patterns = patterns('', url(r'my-api/', SerializedAPI.as_view()))
528+
apis = urlparser.get_apis(url_patterns)
529+
530+
docgen = DocumentationGenerator()
531+
models = docgen.get_models(apis)
532+
533+
self.assertIn('CommentSerializer', models)
534+
self.assertEqual(
535+
["email", "content", "created", "owner"],
536+
list(models['CommentSerializer']['properties'].keys()))
537+
504538
def test_get_serializer_set(self):
505539
class SerializedAPI(ListCreateAPIView):
506540
serializer_class = CommentSerializer

tox.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ deps =
2020
py26: Markdown==2.1.1
2121
py26: importlib==1.0.1
2222
py26: ordereddict==1.1
23+
py26: unittest2==1.1.0
2324
py27: functools32==3.2.3-2
2425
docutils==0.11
2526
argparse==1.2.1

0 commit comments

Comments
 (0)