Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
django-rest-framework
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
django-rest-framework
Commits
ef475eb9
Commit
ef475eb9
authored
Dec 19, 2012
by
Mark Aaron Shirley
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'upstream/master' into writable-serializers
parents
ae6ca745
c27295dc
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
54 additions
and
30 deletions
+54
-30
docs/topics/credits.md
+2
-0
docs/topics/release-notes.md
+1
-0
rest_framework/compat.py
+6
-0
rest_framework/fields.py
+1
-1
rest_framework/tests/authentication.py
+3
-5
rest_framework/tests/breadcrumbs.py
+1
-1
rest_framework/tests/decorators.py
+1
-1
rest_framework/tests/htmlrenderer.py
+1
-1
rest_framework/tests/hyperlink_relations.py
+1
-1
rest_framework/tests/hyperlinkedserializers.py
+1
-1
rest_framework/tests/models.py
+6
-1
rest_framework/tests/renderers.py
+1
-2
rest_framework/tests/request.py
+2
-3
rest_framework/tests/response.py
+1
-4
rest_framework/tests/reverse.py
+1
-1
rest_framework/tests/serializer.py
+16
-1
rest_framework/tests/testcases.py
+4
-2
rest_framework/urls.py
+1
-1
tox.ini
+4
-4
No files found.
docs/topics/credits.md
View file @
ef475eb9
...
@@ -79,6 +79,7 @@ The following people have helped make REST framework great.
...
@@ -79,6 +79,7 @@ The following people have helped make REST framework great.
*
Colin Murtaugh -
[
cmurtaugh
]
*
Colin Murtaugh -
[
cmurtaugh
]
*
Simon Pantzare -
[
pilt
]
*
Simon Pantzare -
[
pilt
]
*
Szymon Teżewski -
[
sunscrapers
]
*
Szymon Teżewski -
[
sunscrapers
]
*
Joel Marcotte -
[
joual
]
Many thanks to everyone who's contributed to the project.
Many thanks to everyone who's contributed to the project.
...
@@ -193,3 +194,4 @@ You can also contact [@_tomchristie][twitter] directly on twitter.
...
@@ -193,3 +194,4 @@ You can also contact [@_tomchristie][twitter] directly on twitter.
[
cmurtaugh
]:
https://github.com/cmurtaugh
[
cmurtaugh
]:
https://github.com/cmurtaugh
[
pilt
]:
https://github.com/pilt
[
pilt
]:
https://github.com/pilt
[
sunscrapers
]:
https://github.com/sunscrapers
[
sunscrapers
]:
https://github.com/sunscrapers
[
joual
]:
https://github.com/joual
docs/topics/release-notes.md
View file @
ef475eb9
...
@@ -8,6 +8,7 @@
...
@@ -8,6 +8,7 @@
### Master
### Master
*
Bugfix: Fix bug that could occur using ChoiceField.
*
Bugfix: Fix exception in browseable API on DELETE.
*
Bugfix: Fix exception in browseable API on DELETE.
*
Bugfix: Fix issue where pk was was being set to a string if set by URL kwarg.
*
Bugfix: Fix issue where pk was was being set to a string if set by URL kwarg.
...
...
rest_framework/compat.py
View file @
ef475eb9
...
@@ -5,6 +5,12 @@ versions of django/python, and compatibility wrappers around optional packages.
...
@@ -5,6 +5,12 @@ versions of django/python, and compatibility wrappers around optional packages.
# flake8: noqa
# flake8: noqa
import
django
import
django
# location of patterns, url, include changes in 1.4 onwards
try
:
from
django.conf.urls
import
patterns
,
url
,
include
except
:
from
django.conf.urls.defaults
import
patterns
,
url
,
include
# django-filter is optional
# django-filter is optional
try
:
try
:
import
django_filters
import
django_filters
...
...
rest_framework/fields.py
View file @
ef475eb9
...
@@ -796,7 +796,7 @@ class ChoiceField(WritableField):
...
@@ -796,7 +796,7 @@ class ChoiceField(WritableField):
if
value
==
smart_unicode
(
k2
):
if
value
==
smart_unicode
(
k2
):
return
True
return
True
else
:
else
:
if
value
==
smart_unicode
(
k
):
if
value
==
smart_unicode
(
k
)
or
value
==
k
:
return
True
return
True
return
False
return
False
...
...
rest_framework/tests/authentication.py
View file @
ef475eb9
from
django.conf.urls.defaults
import
patterns
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.http
import
HttpResponse
from
django.test
import
Client
,
TestCase
from
django.test
import
Client
,
TestCase
from
django.utils
import
simplejson
as
json
from
django.utils
import
simplejson
as
json
from
django.http
import
HttpResponse
from
rest_framework.views
import
APIView
from
rest_framework
import
permissions
from
rest_framework
import
permissions
from
rest_framework.authtoken.models
import
Token
from
rest_framework.authtoken.models
import
Token
from
rest_framework.authentication
import
TokenAuthentication
from
rest_framework.authentication
import
TokenAuthentication
from
rest_framework.compat
import
patterns
from
rest_framework.views
import
APIView
import
base64
import
base64
...
...
rest_framework/tests/breadcrumbs.py
View file @
ef475eb9
from
django.conf.urls.defaults
import
patterns
,
url
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.utils.breadcrumbs
import
get_breadcrumbs
from
rest_framework.utils.breadcrumbs
import
get_breadcrumbs
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
...
...
rest_framework/tests/decorators.py
View file @
ef475eb9
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
django.test.client
import
RequestFactory
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.renderers
import
JSONRenderer
from
rest_framework.parsers
import
JSONParser
from
rest_framework.parsers
import
JSONParser
from
rest_framework.authentication
import
BasicAuthentication
from
rest_framework.authentication
import
BasicAuthentication
...
...
rest_framework/tests/htmlrenderer.py
View file @
ef475eb9
from
django.core.exceptions
import
PermissionDenied
from
django.core.exceptions
import
PermissionDenied
from
django.conf.urls.defaults
import
patterns
,
url
from
django.http
import
Http404
from
django.http
import
Http404
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.template
import
TemplateDoesNotExist
,
Template
from
django.template
import
TemplateDoesNotExist
,
Template
import
django.template.loader
import
django.template.loader
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.decorators
import
api_view
,
renderer_classes
from
rest_framework.decorators
import
api_view
,
renderer_classes
from
rest_framework.renderers
import
TemplateHTMLRenderer
from
rest_framework.renderers
import
TemplateHTMLRenderer
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
...
...
rest_framework/tests/hyperlink_relations.py
View file @
ef475eb9
from
django.conf.urls
import
patterns
,
url
from
django.db
import
models
from
django.db
import
models
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework.compat
import
patterns
,
url
def
dummy_view
(
request
,
pk
):
def
dummy_view
(
request
,
pk
):
...
...
rest_framework/tests/hyperlinkedserializers.py
View file @
ef475eb9
from
django.conf.urls.defaults
import
patterns
,
url
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.test.client
import
RequestFactory
from
django.utils
import
simplejson
as
json
from
django.utils
import
simplejson
as
json
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework
import
generics
,
status
,
serializers
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.tests.models
import
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
,
OptionalRelationModel
from
rest_framework.tests.models
import
Anchor
,
BasicModel
,
ManyToManyModel
,
BlogPost
,
BlogPostComment
,
Album
,
Photo
,
OptionalRelationModel
factory
=
RequestFactory
()
factory
=
RequestFactory
()
...
...
rest_framework/tests/models.py
View file @
ef475eb9
...
@@ -51,6 +51,11 @@ class RESTFrameworkModel(models.Model):
...
@@ -51,6 +51,11 @@ class RESTFrameworkModel(models.Model):
abstract
=
True
abstract
=
True
class
HasPositiveIntegerAsChoice
(
RESTFrameworkModel
):
some_choices
=
((
1
,
'A'
),
(
2
,
'B'
),
(
3
,
'C'
))
some_integer
=
models
.
PositiveIntegerField
(
choices
=
some_choices
)
class
Anchor
(
RESTFrameworkModel
):
class
Anchor
(
RESTFrameworkModel
):
text
=
models
.
CharField
(
max_length
=
100
,
default
=
'anchor'
)
text
=
models
.
CharField
(
max_length
=
100
,
default
=
'anchor'
)
...
@@ -160,7 +165,7 @@ class Photo(RESTFrameworkModel):
...
@@ -160,7 +165,7 @@ class Photo(RESTFrameworkModel):
# Model for issue #324
# Model for issue #324
class
BlankFieldModel
(
RESTFrameworkModel
):
class
BlankFieldModel
(
RESTFrameworkModel
):
title
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
Tru
e
)
title
=
models
.
CharField
(
max_length
=
100
,
blank
=
True
,
null
=
Fals
e
)
# Model for issue #380
# Model for issue #380
...
...
rest_framework/tests/renderers.py
View file @
ef475eb9
import
pickle
import
pickle
import
re
import
re
from
django.conf.urls.defaults
import
patterns
,
url
,
include
from
django.core.cache
import
cache
from
django.core.cache
import
cache
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.test.client
import
RequestFactory
from
rest_framework
import
status
,
permissions
from
rest_framework
import
status
,
permissions
from
rest_framework.compat
import
yaml
from
rest_framework.compat
import
yaml
,
patterns
,
url
,
include
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework.renderers
import
BaseRenderer
,
JSONRenderer
,
YAMLRenderer
,
\
from
rest_framework.renderers
import
BaseRenderer
,
JSONRenderer
,
YAMLRenderer
,
\
...
...
rest_framework/tests/request.py
View file @
ef475eb9
"""
"""
Tests for content parsing, and form-overloaded content parsing.
Tests for content parsing, and form-overloaded content parsing.
"""
"""
from
django.conf.urls.defaults
import
patterns
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
django.contrib.auth
import
authenticate
,
login
,
logout
from
django.contrib.sessions.middleware
import
SessionMiddleware
from
django.contrib.sessions.middleware
import
SessionMiddleware
from
django.test
import
TestCase
,
Client
from
django.test
import
TestCase
,
Client
from
django.test.client
import
RequestFactory
from
django.utils
import
simplejson
as
json
from
django.utils
import
simplejson
as
json
from
rest_framework
import
status
from
rest_framework
import
status
from
rest_framework.authentication
import
SessionAuthentication
from
rest_framework.authentication
import
SessionAuthentication
from
django.test.client
import
RequestFactory
from
rest_framework.compat
import
patterns
from
rest_framework.parsers
import
(
from
rest_framework.parsers
import
(
BaseParser
,
BaseParser
,
FormParser
,
FormParser
,
...
...
rest_framework/tests/response.py
View file @
ef475eb9
import
unittest
from
django.conf.urls.defaults
import
patterns
,
url
,
include
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework.compat
import
patterns
,
url
,
include
from
rest_framework.response
import
Response
from
rest_framework.response
import
Response
from
rest_framework.views
import
APIView
from
rest_framework.views
import
APIView
from
rest_framework
import
status
from
rest_framework
import
status
...
...
rest_framework/tests/reverse.py
View file @
ef475eb9
from
django.conf.urls.defaults
import
patterns
,
url
from
django.test
import
TestCase
from
django.test
import
TestCase
from
django.test.client
import
RequestFactory
from
django.test.client
import
RequestFactory
from
rest_framework.compat
import
patterns
,
url
from
rest_framework.reverse
import
reverse
from
rest_framework.reverse
import
reverse
factory
=
RequestFactory
()
factory
=
RequestFactory
()
...
...
rest_framework/tests/serializer.py
View file @
ef475eb9
...
@@ -2,7 +2,7 @@ import datetime
...
@@ -2,7 +2,7 @@ import datetime
import
pickle
import
pickle
from
django.test
import
TestCase
from
django.test
import
TestCase
from
rest_framework
import
serializers
from
rest_framework
import
serializers
from
rest_framework.tests.models
import
(
Album
,
ActionItem
,
Anchor
,
BasicModel
,
from
rest_framework.tests.models
import
(
HasPositiveIntegerAsChoice
,
Album
,
ActionItem
,
Anchor
,
BasicModel
,
BlankFieldModel
,
BlogPost
,
Book
,
CallableDefaultValueModel
,
DefaultValueModel
,
BlankFieldModel
,
BlogPost
,
Book
,
CallableDefaultValueModel
,
DefaultValueModel
,
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
,
Photo
)
ManyToManyModel
,
Person
,
ReadOnlyManyToManyModel
,
Photo
)
...
@@ -69,6 +69,11 @@ class AlbumsSerializer(serializers.ModelSerializer):
...
@@ -69,6 +69,11 @@ class AlbumsSerializer(serializers.ModelSerializer):
model
=
Album
model
=
Album
fields
=
[
'title'
]
# lists are also valid options
fields
=
[
'title'
]
# lists are also valid options
class
PositiveIntegerAsChoiceSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
model
=
HasPositiveIntegerAsChoice
fields
=
[
'some_integer'
]
class
BasicTests
(
TestCase
):
class
BasicTests
(
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
...
@@ -285,6 +290,12 @@ class ValidationTests(TestCase):
...
@@ -285,6 +290,12 @@ class ValidationTests(TestCase):
self
.
assertEquals
(
serializer
.
errors
,
{
'info'
:
[
u'Ensure this value has at most 12 characters (it has 13).'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'info'
:
[
u'Ensure this value has at most 12 characters (it has 13).'
]})
class
PositiveIntegerAsChoiceTests
(
TestCase
):
def
test_positive_integer_in_json_is_correctly_parsed
(
self
):
data
=
{
'some_integer'
:
1
}
serializer
=
PositiveIntegerAsChoiceSerializer
(
data
=
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
True
)
class
ModelValidationTests
(
TestCase
):
class
ModelValidationTests
(
TestCase
):
def
test_validate_unique
(
self
):
def
test_validate_unique
(
self
):
"""
"""
...
@@ -688,6 +699,10 @@ class BlankFieldTests(TestCase):
...
@@ -688,6 +699,10 @@ class BlankFieldTests(TestCase):
serializer
=
self
.
model_serializer_class
(
data
=
self
.
data
)
serializer
=
self
.
model_serializer_class
(
data
=
self
.
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
True
)
self
.
assertEquals
(
serializer
.
is_valid
(),
True
)
def
test_create_model_null_field
(
self
):
serializer
=
self
.
model_serializer_class
(
data
=
{
'title'
:
None
})
self
.
assertEquals
(
serializer
.
is_valid
(),
True
)
def
test_create_not_blank_field
(
self
):
def
test_create_not_blank_field
(
self
):
"""
"""
Test to ensure blank data in a field not marked as blank=True
Test to ensure blank data in a field not marked as blank=True
...
...
rest_framework/tests/testcases.py
View file @
ef475eb9
...
@@ -6,6 +6,7 @@ from django.test import TestCase
...
@@ -6,6 +6,7 @@ from django.test import TestCase
NO_SETTING
=
(
'!'
,
None
)
NO_SETTING
=
(
'!'
,
None
)
class
TestSettingsManager
(
object
):
class
TestSettingsManager
(
object
):
"""
"""
A class which can modify some Django settings temporarily for a
A class which can modify some Django settings temporarily for a
...
@@ -19,7 +20,7 @@ class TestSettingsManager(object):
...
@@ -19,7 +20,7 @@ class TestSettingsManager(object):
self
.
_original_settings
=
{}
self
.
_original_settings
=
{}
def
set
(
self
,
**
kwargs
):
def
set
(
self
,
**
kwargs
):
for
k
,
v
in
kwargs
.
iteritems
():
for
k
,
v
in
kwargs
.
iteritems
():
self
.
_original_settings
.
setdefault
(
k
,
getattr
(
settings
,
k
,
self
.
_original_settings
.
setdefault
(
k
,
getattr
(
settings
,
k
,
NO_SETTING
))
NO_SETTING
))
setattr
(
settings
,
k
,
v
)
setattr
(
settings
,
k
,
v
)
...
@@ -31,7 +32,7 @@ class TestSettingsManager(object):
...
@@ -31,7 +32,7 @@ class TestSettingsManager(object):
call_command
(
'syncdb'
,
verbosity
=
0
)
call_command
(
'syncdb'
,
verbosity
=
0
)
def
revert
(
self
):
def
revert
(
self
):
for
k
,
v
in
self
.
_original_settings
.
iteritems
():
for
k
,
v
in
self
.
_original_settings
.
iteritems
():
if
v
==
NO_SETTING
:
if
v
==
NO_SETTING
:
delattr
(
settings
,
k
)
delattr
(
settings
,
k
)
else
:
else
:
...
@@ -57,6 +58,7 @@ class SettingsTestCase(TestCase):
...
@@ -57,6 +58,7 @@ class SettingsTestCase(TestCase):
def
tearDown
(
self
):
def
tearDown
(
self
):
self
.
settings_manager
.
revert
()
self
.
settings_manager
.
revert
()
class
TestModelsTestCase
(
SettingsTestCase
):
class
TestModelsTestCase
(
SettingsTestCase
):
def
setUp
(
self
,
*
args
,
**
kwargs
):
def
setUp
(
self
,
*
args
,
**
kwargs
):
installed_apps
=
tuple
(
settings
.
INSTALLED_APPS
)
+
(
'rest_framework.tests'
,)
installed_apps
=
tuple
(
settings
.
INSTALLED_APPS
)
+
(
'rest_framework.tests'
,)
...
...
rest_framework/urls.py
View file @
ef475eb9
...
@@ -12,7 +12,7 @@ your authentication settings include `SessionAuthentication`.
...
@@ -12,7 +12,7 @@ your authentication settings include `SessionAuthentication`.
url(r'^auth', include('rest_framework.urls', namespace='rest_framework'))
url(r'^auth', include('rest_framework.urls', namespace='rest_framework'))
)
)
"""
"""
from
django.conf.urls.defaults
import
patterns
,
url
from
rest_framework.compat
import
patterns
,
url
template_name
=
{
'template_name'
:
'rest_framework/login.html'
}
template_name
=
{
'template_name'
:
'rest_framework/login.html'
}
...
...
tox.ini
View file @
ef475eb9
...
@@ -12,12 +12,12 @@ deps = https://github.com/django/django/zipball/master
...
@@ -12,12 +12,12 @@ deps = https://github.com/django/django/zipball/master
[testenv:py2.7-django1.4]
[testenv:py2.7-django1.4]
basepython
=
python2.7
basepython
=
python2.7
deps
=
django==1.4.
1
deps
=
django==1.4.
3
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.7-django1.3]
[testenv:py2.7-django1.3]
basepython
=
python2.7
basepython
=
python2.7
deps
=
django==1.3.
3
deps
=
django==1.3.
5
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.6-django1.5]
[testenv:py2.6-django1.5]
...
@@ -27,10 +27,10 @@ deps = https://github.com/django/django/zipball/master
...
@@ -27,10 +27,10 @@ deps = https://github.com/django/django/zipball/master
[testenv:py2.6-django1.4]
[testenv:py2.6-django1.4]
basepython
=
python2.6
basepython
=
python2.6
deps
=
django==1.4.
1
deps
=
django==1.4.
3
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.6-django1.3]
[testenv:py2.6-django1.3]
basepython
=
python2.6
basepython
=
python2.6
deps
=
django==1.3.
3
deps
=
django==1.3.
5
django-filter
=
=0.5.4
django-filter
=
=0.5.4
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment