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
f4f237e3
Commit
f4f237e3
authored
Feb 01, 2013
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3.2, 3.3 compat
parent
d9c7b1c5
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
75 additions
and
53 deletions
+75
-53
rest_framework/__init__.py
+3
-0
rest_framework/authentication.py
+11
-8
rest_framework/relations.py
+1
-1
rest_framework/serializers.py
+3
-3
rest_framework/settings.py
+0
-3
rest_framework/tests/authentication.py
+9
-2
rest_framework/tests/genericrelations.py
+6
-6
rest_framework/tests/relations_hyperlink.py
+4
-4
rest_framework/tests/relations_nested.py
+2
-2
rest_framework/tests/relations_pk.py
+4
-4
rest_framework/tests/relations_slug.py
+0
-0
rest_framework/tests/serializer.py
+7
-7
rest_framework/tests/utils.py
+2
-2
rest_framework/tests/validators.py
+1
-1
tox.ini
+22
-10
No files found.
rest_framework/__init__.py
View file @
f4f237e3
__version__
=
'2.1.17'
__version__
=
'2.1.17'
VERSION
=
__version__
# synonym
VERSION
=
__version__
# synonym
# Header encoding (see RFC5987)
HTTP_HEADER_ENCODING
=
'iso-8859-1'
rest_framework/authentication.py
View file @
f4f237e3
"""
"""
Provides a set of pluggable authentication policies.
Provides a set of pluggable authentication policies.
"""
"""
from
__future__
import
unicode_literals
from
django.contrib.auth
import
authenticate
from
django.contrib.auth
import
authenticate
from
django.utils.encoding
import
DjangoUnicodeDecodeError
from
django.utils.encoding
import
DjangoUnicodeDecodeError
from
rest_framework
import
exceptions
from
rest_framework
import
exceptions
,
HTTP_HEADER_ENCODING
from
rest_framework.compat
import
CsrfViewMiddleware
from
rest_framework.compat
import
CsrfViewMiddleware
from
rest_framework.compat
import
smart_text
from
rest_framework.compat
import
smart_text
from
rest_framework.authtoken.models
import
Token
from
rest_framework.authtoken.models
import
Token
...
@@ -43,23 +44,25 @@ class BasicAuthentication(BaseAuthentication):
...
@@ -43,23 +44,25 @@ class BasicAuthentication(BaseAuthentication):
Returns a `User` if a correct username and password have been supplied
Returns a `User` if a correct username and password have been supplied
using HTTP Basic authentication. Otherwise returns `None`.
using HTTP Basic authentication. Otherwise returns `None`.
"""
"""
auth
=
request
.
META
.
get
(
'HTTP_AUTHORIZATION'
,
''
)
.
split
()
auth
=
request
.
META
.
get
(
'HTTP_AUTHORIZATION'
,
b
''
)
if
type
(
auth
)
==
type
(
''
):
# Work around django test client oddness
auth
=
auth
.
encode
(
HTTP_HEADER_ENCODING
)
auth
=
auth
.
split
()
if
not
auth
or
auth
[
0
]
.
lower
()
!=
"basic"
:
if
not
auth
or
auth
[
0
]
.
lower
()
!=
b
'basic'
:
return
None
return
None
if
len
(
auth
)
!=
2
:
if
len
(
auth
)
!=
2
:
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
encoding
=
api_settings
.
HTTP_HEADER_ENCODING
try
:
try
:
auth_parts
=
base64
.
b64decode
(
auth
[
1
]
.
encode
(
encoding
)
)
.
partition
(
':'
)
auth_parts
=
base64
.
b64decode
(
auth
[
1
]
)
.
decode
(
HTTP_HEADER_ENCODING
)
.
partition
(
':'
)
except
TypeError
:
except
(
TypeError
,
UnicodeDecodeError
)
:
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
try
:
try
:
userid
=
smart_text
(
auth_parts
[
0
])
userid
,
password
=
auth_parts
[
0
],
auth_parts
[
2
]
password
=
smart_text
(
auth_parts
[
2
])
except
DjangoUnicodeDecodeError
:
except
DjangoUnicodeDecodeError
:
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
raise
exceptions
.
AuthenticationFailed
(
'Invalid basic header'
)
...
...
rest_framework/relations.py
View file @
f4f237e3
...
@@ -311,7 +311,7 @@ class SlugRelatedField(RelatedField):
...
@@ -311,7 +311,7 @@ class SlugRelatedField(RelatedField):
return
self
.
queryset
.
get
(
**
{
self
.
slug_field
:
data
})
return
self
.
queryset
.
get
(
**
{
self
.
slug_field
:
data
})
except
ObjectDoesNotExist
:
except
ObjectDoesNotExist
:
raise
ValidationError
(
self
.
error_messages
[
'does_not_exist'
]
%
raise
ValidationError
(
self
.
error_messages
[
'does_not_exist'
]
%
(
self
.
slug_field
,
unicode
(
data
)))
(
self
.
slug_field
,
smart_text
(
data
)))
except
(
TypeError
,
ValueError
):
except
(
TypeError
,
ValueError
):
msg
=
self
.
error_messages
[
'invalid'
]
msg
=
self
.
error_messages
[
'invalid'
]
raise
ValidationError
(
msg
)
raise
ValidationError
(
msg
)
...
...
rest_framework/serializers.py
View file @
f4f237e3
...
@@ -212,7 +212,7 @@ class BaseSerializer(Field):
...
@@ -212,7 +212,7 @@ class BaseSerializer(Field):
reverted_data
=
{}
reverted_data
=
{}
if
data
is
not
None
and
not
isinstance
(
data
,
dict
):
if
data
is
not
None
and
not
isinstance
(
data
,
dict
):
self
.
_errors
[
'non_field_errors'
]
=
[
u
'Invalid data'
]
self
.
_errors
[
'non_field_errors'
]
=
[
'Invalid data'
]
return
None
return
None
for
field_name
,
field
in
self
.
fields
.
items
():
for
field_name
,
field
in
self
.
fields
.
items
():
...
@@ -287,7 +287,7 @@ class BaseSerializer(Field):
...
@@ -287,7 +287,7 @@ class BaseSerializer(Field):
"""
"""
Deserialize primitives -> objects.
Deserialize primitives -> objects.
"""
"""
if
hasattr
(
data
,
'__iter__'
)
and
not
isinstance
(
data
,
dict
):
if
hasattr
(
data
,
'__iter__'
)
and
not
isinstance
(
data
,
(
dict
,
six
.
text_type
)
):
# TODO: error data when deserializing lists
# TODO: error data when deserializing lists
return
[
self
.
from_native
(
item
,
None
)
for
item
in
data
]
return
[
self
.
from_native
(
item
,
None
)
for
item
in
data
]
...
@@ -525,7 +525,7 @@ class ModelSerializer(Serializer):
...
@@ -525,7 +525,7 @@ class ModelSerializer(Serializer):
"""
"""
try
:
try
:
instance
.
full_clean
(
exclude
=
self
.
get_validation_exclusions
())
instance
.
full_clean
(
exclude
=
self
.
get_validation_exclusions
())
except
ValidationError
,
err
:
except
ValidationError
as
err
:
self
.
_errors
=
err
.
message_dict
self
.
_errors
=
err
.
message_dict
return
None
return
None
return
instance
return
instance
...
...
rest_framework/settings.py
View file @
f4f237e3
...
@@ -75,9 +75,6 @@ DEFAULTS = {
...
@@ -75,9 +75,6 @@ DEFAULTS = {
'URL_FORMAT_OVERRIDE'
:
'format'
,
'URL_FORMAT_OVERRIDE'
:
'format'
,
'FORMAT_SUFFIX_KWARG'
:
'format'
,
'FORMAT_SUFFIX_KWARG'
:
'format'
,
# Header encoding (see RFC5987)
'HTTP_HEADER_ENCODING'
:
'iso-8859-1'
,
}
}
...
...
rest_framework/tests/authentication.py
View file @
f4f237e3
from
__future__
import
unicode_literals
from
django.contrib.auth.models
import
User
from
django.contrib.auth.models
import
User
from
django.http
import
HttpResponse
from
django.http
import
HttpResponse
from
django.test
import
Client
,
TestCase
from
django.test
import
Client
,
TestCase
from
rest_framework
import
HTTP_HEADER_ENCODING
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
,
BasicAuthentication
,
SessionAuthentication
from
rest_framework.authentication
import
TokenAuthentication
,
BasicAuthentication
,
SessionAuthentication
...
@@ -41,13 +44,17 @@ class BasicAuthTests(TestCase):
...
@@ -41,13 +44,17 @@ class BasicAuthTests(TestCase):
def
test_post_form_passing_basic_auth
(
self
):
def
test_post_form_passing_basic_auth
(
self
):
"""Ensure POSTing json over basic auth with correct credentials passes and does not require CSRF"""
"""Ensure POSTing json over basic auth with correct credentials passes and does not require CSRF"""
auth
=
'Basic
%
s'
%
base64
.
encodestring
(
'
%
s:
%
s'
%
(
self
.
username
,
self
.
password
))
.
encode
(
'iso-8859-1'
)
.
strip
()
.
decode
(
'iso-8859-1'
)
credentials
=
(
'
%
s:
%
s'
%
(
self
.
username
,
self
.
password
))
base64_credentials
=
base64
.
b64encode
(
credentials
.
encode
(
HTTP_HEADER_ENCODING
))
.
decode
(
HTTP_HEADER_ENCODING
)
auth
=
'Basic
%
s'
%
base64_credentials
response
=
self
.
csrf_client
.
post
(
'/basic/'
,
{
'example'
:
'example'
},
HTTP_AUTHORIZATION
=
auth
)
response
=
self
.
csrf_client
.
post
(
'/basic/'
,
{
'example'
:
'example'
},
HTTP_AUTHORIZATION
=
auth
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
def
test_post_json_passing_basic_auth
(
self
):
def
test_post_json_passing_basic_auth
(
self
):
"""Ensure POSTing form over basic auth with correct credentials passes and does not require CSRF"""
"""Ensure POSTing form over basic auth with correct credentials passes and does not require CSRF"""
auth
=
'Basic
%
s'
%
base64
.
encodestring
(
'
%
s:
%
s'
%
(
self
.
username
,
self
.
password
))
.
encode
(
'iso-8859-1'
)
.
strip
()
.
decode
(
'iso-8859-1'
)
credentials
=
(
'
%
s:
%
s'
%
(
self
.
username
,
self
.
password
))
base64_credentials
=
base64
.
b64encode
(
credentials
.
encode
(
HTTP_HEADER_ENCODING
))
.
decode
(
HTTP_HEADER_ENCODING
)
auth
=
'Basic
%
s'
%
base64_credentials
response
=
self
.
csrf_client
.
post
(
'/basic/'
,
json
.
dumps
({
'example'
:
'example'
}),
'application/json'
,
HTTP_AUTHORIZATION
=
auth
)
response
=
self
.
csrf_client
.
post
(
'/basic/'
,
json
.
dumps
({
'example'
:
'example'
}),
'application/json'
,
HTTP_AUTHORIZATION
=
auth
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
...
...
rest_framework/tests/genericrelations.py
View file @
f4f237e3
...
@@ -86,16 +86,16 @@ class TestGenericRelations(TestCase):
...
@@ -86,16 +86,16 @@ class TestGenericRelations(TestCase):
serializer
=
TagSerializer
(
Tag
.
objects
.
all
())
serializer
=
TagSerializer
(
Tag
.
objects
.
all
())
expected
=
[
expected
=
[
{
{
'tag'
:
u
'django'
,
'tag'
:
'django'
,
'tagged_item'
:
u
'Bookmark: https://www.djangoproject.com/'
'tagged_item'
:
'Bookmark: https://www.djangoproject.com/'
},
},
{
{
'tag'
:
u
'python'
,
'tag'
:
'python'
,
'tagged_item'
:
u
'Bookmark: https://www.djangoproject.com/'
'tagged_item'
:
'Bookmark: https://www.djangoproject.com/'
},
},
{
{
'tag'
:
u
'reminder'
,
'tag'
:
'reminder'
,
'tagged_item'
:
u
'Note: Remember the milk'
'tagged_item'
:
'Note: Remember the milk'
}
}
]
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_hyperlink.py
View file @
f4f237e3
...
@@ -218,11 +218,11 @@ class HyperlinkedForeignKeyTests(TestCase):
...
@@ -218,11 +218,11 @@ class HyperlinkedForeignKeyTests(TestCase):
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_incorrect_type
(
self
):
def
test_foreign_key_update_incorrect_type
(
self
):
data
=
{
'url'
:
'/foreignkeysource/1/'
,
'name'
:
u
'source-1'
,
'target'
:
2
}
data
=
{
'url'
:
'/foreignkeysource/1/'
,
'name'
:
'source-1'
,
'target'
:
2
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'target'
:
[
u
'Incorrect type. Expected url string, received int.'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected url string, received int.'
]})
def
test_reverse_foreign_key_update
(
self
):
def
test_reverse_foreign_key_update
(
self
):
data
=
{
'url'
:
'/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[
'/foreignkeysource/1/'
,
'/foreignkeysource/3/'
]}
data
=
{
'url'
:
'/foreignkeytarget/2/'
,
'name'
:
'target-2'
,
'sources'
:
[
'/foreignkeysource/1/'
,
'/foreignkeysource/3/'
]}
...
@@ -439,7 +439,7 @@ class HyperlinkedNullableOneToOneTests(TestCase):
...
@@ -439,7 +439,7 @@ class HyperlinkedNullableOneToOneTests(TestCase):
queryset
=
OneToOneTarget
.
objects
.
all
()
queryset
=
OneToOneTarget
.
objects
.
all
()
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
expected
=
[
expected
=
[
{
'url'
:
'/onetoonetarget/1/'
,
'name'
:
u
'target-1'
,
'nullable_source'
:
'/nullableonetoonesource/1/'
},
{
'url'
:
'/onetoonetarget/1/'
,
'name'
:
'target-1'
,
'nullable_source'
:
'/nullableonetoonesource/1/'
},
{
'url'
:
'/onetoonetarget/2/'
,
'name'
:
u
'target-2'
,
'nullable_source'
:
None
},
{
'url'
:
'/onetoonetarget/2/'
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_nested.py
View file @
f4f237e3
...
@@ -109,7 +109,7 @@ class NestedNullableOneToOneTests(TestCase):
...
@@ -109,7 +109,7 @@ class NestedNullableOneToOneTests(TestCase):
queryset
=
OneToOneTarget
.
objects
.
all
()
queryset
=
OneToOneTarget
.
objects
.
all
()
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
expected
=
[
expected
=
[
{
'id'
:
1
,
'name'
:
u'target-1'
,
'nullable_source'
:
{
'id'
:
1
,
'name'
:
u
'source-1'
,
'target'
:
1
}},
{
'id'
:
1
,
'name'
:
'target-1'
,
'nullable_source'
:
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
1
}},
{
'id'
:
2
,
'name'
:
u
'target-2'
,
'nullable_source'
:
None
},
{
'id'
:
2
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_pk.py
View file @
f4f237e3
...
@@ -198,11 +198,11 @@ class PKForeignKeyTests(TestCase):
...
@@ -198,11 +198,11 @@ class PKForeignKeyTests(TestCase):
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
def
test_foreign_key_update_incorrect_type
(
self
):
def
test_foreign_key_update_incorrect_type
(
self
):
data
=
{
'id'
:
1
,
'name'
:
u
'source-1'
,
'target'
:
'foo'
}
data
=
{
'id'
:
1
,
'name'
:
'source-1'
,
'target'
:
'foo'
}
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
instance
=
ForeignKeySource
.
objects
.
get
(
pk
=
1
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
serializer
=
ForeignKeySourceSerializer
(
instance
,
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'target'
:
[
u
'Incorrect type. Expected pk value, received str.'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'target'
:
[
'Incorrect type. Expected pk value, received str.'
]})
def
test_reverse_foreign_key_update
(
self
):
def
test_reverse_foreign_key_update
(
self
):
data
=
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
1
,
3
]}
data
=
{
'id'
:
2
,
'name'
:
'target-2'
,
'sources'
:
[
1
,
3
]}
...
@@ -415,7 +415,7 @@ class PKNullableOneToOneTests(TestCase):
...
@@ -415,7 +415,7 @@ class PKNullableOneToOneTests(TestCase):
queryset
=
OneToOneTarget
.
objects
.
all
()
queryset
=
OneToOneTarget
.
objects
.
all
()
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
serializer
=
NullableOneToOneTargetSerializer
(
queryset
)
expected
=
[
expected
=
[
{
'id'
:
1
,
'name'
:
u
'target-1'
,
'nullable_source'
:
1
},
{
'id'
:
1
,
'name'
:
'target-1'
,
'nullable_source'
:
1
},
{
'id'
:
2
,
'name'
:
u
'target-2'
,
'nullable_source'
:
None
},
{
'id'
:
2
,
'name'
:
'target-2'
,
'nullable_source'
:
None
},
]
]
self
.
assertEquals
(
serializer
.
data
,
expected
)
self
.
assertEquals
(
serializer
.
data
,
expected
)
rest_framework/tests/relations_slug.py
View file @
f4f237e3
This diff is collapsed.
Click to expand it.
rest_framework/tests/serializer.py
View file @
f4f237e3
...
@@ -236,17 +236,17 @@ class ValidationTests(TestCase):
...
@@ -236,17 +236,17 @@ class ValidationTests(TestCase):
data
=
[
'i am'
,
'a'
,
'list'
]
data
=
[
'i am'
,
'a'
,
'list'
]
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
u
'Invalid data'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
data
=
'and i am a string'
data
=
'and i am a string'
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
u
'Invalid data'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
data
=
42
data
=
42
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
serializer
=
CommentSerializer
(
self
.
comment
,
data
=
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
u
'Invalid data'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'non_field_errors'
:
[
'Invalid data'
]})
def
test_cross_field_validation
(
self
):
def
test_cross_field_validation
(
self
):
...
@@ -300,7 +300,7 @@ class ValidationTests(TestCase):
...
@@ -300,7 +300,7 @@ class ValidationTests(TestCase):
}
}
serializer
=
ActionItemSerializerCustomRestore
(
data
=
data
)
serializer
=
ActionItemSerializerCustomRestore
(
data
=
data
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
is_valid
(),
False
)
self
.
assertEquals
(
serializer
.
errors
,
{
'title'
:
[
u
'Ensure this value has at most 200 characters (it has 201).'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'title'
:
[
'Ensure this value has at most 200 characters (it has 201).'
]})
def
test_default_modelfield_max_length_exceeded
(
self
):
def
test_default_modelfield_max_length_exceeded
(
self
):
data
=
{
data
=
{
...
@@ -340,7 +340,7 @@ class CustomValidationTests(TestCase):
...
@@ -340,7 +340,7 @@ class CustomValidationTests(TestCase):
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
data
)
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'content'
:
[
u
'Test not in value'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'content'
:
[
'Test not in value'
]})
def
test_missing_data
(
self
):
def
test_missing_data
(
self
):
"""
"""
...
@@ -352,7 +352,7 @@ class CustomValidationTests(TestCase):
...
@@ -352,7 +352,7 @@ class CustomValidationTests(TestCase):
}
}
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
incomplete_data
)
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
incomplete_data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'content'
:
[
u
'This field is required.'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'content'
:
[
'This field is required.'
]})
def
test_wrong_data
(
self
):
def
test_wrong_data
(
self
):
"""
"""
...
@@ -365,7 +365,7 @@ class CustomValidationTests(TestCase):
...
@@ -365,7 +365,7 @@ class CustomValidationTests(TestCase):
}
}
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
wrong_data
)
serializer
=
self
.
CommentSerializerWithFieldValidator
(
data
=
wrong_data
)
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertFalse
(
serializer
.
is_valid
())
self
.
assertEquals
(
serializer
.
errors
,
{
'email'
:
[
u
'Enter a valid e-mail address.'
]})
self
.
assertEquals
(
serializer
.
errors
,
{
'email'
:
[
'Enter a valid e-mail address.'
]})
class
PositiveIntegerAsChoiceTests
(
TestCase
):
class
PositiveIntegerAsChoiceTests
(
TestCase
):
...
...
rest_framework/tests/utils.py
View file @
f4f237e3
from
django.test.client
import
RequestFactory
,
FakePayload
from
django.test.client
import
RequestFactory
,
FakePayload
from
django.test.client
import
MULTIPART_CONTENT
from
django.test.client
import
MULTIPART_CONTENT
from
urlparse
import
urlparse
from
rest_framework.compat
import
urlparse
class
RequestFactory
(
RequestFactory
):
class
RequestFactory
(
RequestFactory
):
...
@@ -14,7 +14,7 @@ class RequestFactory(RequestFactory):
...
@@ -14,7 +14,7 @@ class RequestFactory(RequestFactory):
patch_data
=
self
.
_encode_data
(
data
,
content_type
)
patch_data
=
self
.
_encode_data
(
data
,
content_type
)
parsed
=
urlparse
(
path
)
parsed
=
urlparse
.
urlparse
(
path
)
r
=
{
r
=
{
'CONTENT_LENGTH'
:
len
(
patch_data
),
'CONTENT_LENGTH'
:
len
(
patch_data
),
'CONTENT_TYPE'
:
content_type
,
'CONTENT_TYPE'
:
content_type
,
...
...
rest_framework/tests/validators.py
View file @
f4f237e3
...
@@ -139,7 +139,7 @@
...
@@ -139,7 +139,7 @@
# raise errors on unexpected request data"""
# raise errors on unexpected request data"""
# content = {'qwerty': 'uiop', 'extra': 'extra'}
# content = {'qwerty': 'uiop', 'extra': 'extra'}
# validator.allow_unknown_form_fields = True
# validator.allow_unknown_form_fields = True
# self.assertEqual({'qwerty':
u
'uiop'},
# self.assertEqual({'qwerty': 'uiop'},
# validator.validate_request(content, None),
# validator.validate_request(content, None),
# "Resource didn't accept unknown fields.")
# "Resource didn't accept unknown fields.")
# validator.allow_unknown_form_fields = False
# validator.allow_unknown_form_fields = False
...
...
tox.ini
View file @
f4f237e3
[tox]
[tox]
downloadcache
=
{toxworkdir}/cache/
downloadcache
=
{toxworkdir}/cache/
envlist
=
py2.7-django1.5,py2.7-django1.4,py2.7-django1.3,py2.6-django1.5,py2.6-django1.4,py2.6-django1.3
envlist
=
py
3.3-django1.5,py3.2-django1.5,py
2.7-django1.5,py2.7-django1.4,py2.7-django1.3,py2.6-django1.5,py2.6-django1.4,py2.6-django1.3
[testenv]
[testenv]
commands
=
{envpython} rest_framework/runtests/runtests.py
commands
=
{envpython} rest_framework/runtests/runtests.py
[testenv:py
2.7
-django1.5]
[testenv:py
3.3
-django1.5]
basepython
=
python
2.7
basepython
=
python
3.3
deps
=
https://
github.com/django/django/zipball/master
deps
=
https://
www.djangoproject.com/download/1.5c1/tarball/
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py
2.7-django1.4
]
[testenv:py
3.2-django1.5
]
basepython
=
python
2.7
basepython
=
python
3.2
deps
=
django==1.4.3
deps
=
https://www.djangoproject.com/download/1.5c1/tarball/
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.7-django1.
3
]
[testenv:py2.7-django1.
5
]
basepython
=
python2.7
basepython
=
python2.7
deps
=
django==1.3.5
deps
=
https://www.djangoproject.com/download/1.5c1/tarball/
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.6-django1.5]
[testenv:py2.6-django1.5]
basepython
=
python2.6
basepython
=
python2.6
deps
=
https://github.com/django/django/zipball/master
deps
=
https://www.djangoproject.com/download/1.5c1/tarball/
django-filter
=
=0.5.4
[testenv:py2.7-django1.4]
basepython
=
python2.7
deps
=
django==1.4.3
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.6-django1.4]
[testenv:py2.6-django1.4]
...
@@ -30,7 +35,14 @@ basepython = python2.6
...
@@ -30,7 +35,14 @@ basepython = python2.6
deps
=
django==1.4.3
deps
=
django==1.4.3
django-filter
=
=0.5.4
django-filter
=
=0.5.4
[testenv:py2.7-django1.3]
basepython
=
python2.7
deps
=
django==1.3.5
django-filter
=
=0.5.4
six
[testenv:py2.6-django1.3]
[testenv:py2.6-django1.3]
basepython
=
python2.6
basepython
=
python2.6
deps
=
django==1.3.5
deps
=
django==1.3.5
django-filter
=
=0.5.4
django-filter
=
=0.5.4
six
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