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
44df8345
Commit
44df8345
authored
Apr 11, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Plain Diff
Merge with master
parents
44b5d612
e53c819c
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
38 additions
and
31 deletions
+38
-31
AUTHORS
+1
-0
djangorestframework/parsers.py
+1
-1
djangorestframework/serializer.py
+7
-22
djangorestframework/tests/serializer.py
+21
-0
djangorestframework/utils/__init__.py
+0
-1
docs/howto/setup.rst
+1
-0
docs/requirements.txt
+1
-1
examples/mixin/urls.py
+6
-6
No files found.
AUTHORS
View file @
44df8345
...
@@ -34,6 +34,7 @@ Paul Oswald <poswald>
...
@@ -34,6 +34,7 @@ Paul Oswald <poswald>
Sean C. Farley <scfarley>
Sean C. Farley <scfarley>
Daniel Izquierdo <izquierdo>
Daniel Izquierdo <izquierdo>
Can Yavuz <tschan>
Can Yavuz <tschan>
Shawn Lewis <shawnlewis>
THANKS TO:
THANKS TO:
...
...
djangorestframework/parsers.py
View file @
44df8345
...
@@ -104,7 +104,7 @@ class YAMLParser(BaseParser):
...
@@ -104,7 +104,7 @@ class YAMLParser(BaseParser):
"""
"""
try
:
try
:
return
(
yaml
.
safe_load
(
stream
),
None
)
return
(
yaml
.
safe_load
(
stream
),
None
)
except
ValueError
,
exc
:
except
(
ValueError
,
yaml
.
parser
.
ParserError
)
,
exc
:
raise
ImmediateResponse
(
raise
ImmediateResponse
(
{
'detail'
:
'YAML parse error -
%
s'
%
unicode
(
exc
)},
{
'detail'
:
'YAML parse error -
%
s'
%
unicode
(
exc
)},
status
=
status
.
HTTP_400_BAD_REQUEST
)
status
=
status
.
HTTP_400_BAD_REQUEST
)
...
...
djangorestframework/serializer.py
View file @
44df8345
...
@@ -25,16 +25,9 @@ def _field_to_tuple(field):
...
@@ -25,16 +25,9 @@ def _field_to_tuple(field):
def
_fields_to_list
(
fields
):
def
_fields_to_list
(
fields
):
"""
"""
Return a list of field
nam
es.
Return a list of field
tupl
es.
"""
"""
return
[
_field_to_tuple
(
field
)[
0
]
for
field
in
fields
or
()]
return
[
_field_to_tuple
(
field
)
for
field
in
fields
or
()]
def
_fields_to_dict
(
fields
):
"""
Return a `dict` of field name -> None, or tuple of fields, or Serializer class
"""
return
dict
([
_field_to_tuple
(
field
)
for
field
in
fields
or
()])
class
_SkipField
(
Exception
):
class
_SkipField
(
Exception
):
...
@@ -110,9 +103,6 @@ class Serializer(object):
...
@@ -110,9 +103,6 @@ class Serializer(object):
self
.
stack
=
stack
self
.
stack
=
stack
def
get_fields
(
self
,
obj
):
def
get_fields
(
self
,
obj
):
"""
Return the set of field names/keys to use for a model instance/dict.
"""
fields
=
self
.
fields
fields
=
self
.
fields
# If `fields` is not set, we use the default fields and modify
# If `fields` is not set, we use the default fields and modify
...
@@ -123,9 +113,6 @@ class Serializer(object):
...
@@ -123,9 +113,6 @@ class Serializer(object):
exclude
=
self
.
exclude
or
()
exclude
=
self
.
exclude
or
()
fields
=
set
(
default
+
list
(
include
))
-
set
(
exclude
)
fields
=
set
(
default
+
list
(
include
))
-
set
(
exclude
)
else
:
fields
=
_fields_to_list
(
self
.
fields
)
return
fields
return
fields
def
get_default_fields
(
self
,
obj
):
def
get_default_fields
(
self
,
obj
):
...
@@ -139,9 +126,7 @@ class Serializer(object):
...
@@ -139,9 +126,7 @@ class Serializer(object):
else
:
else
:
return
obj
.
keys
()
return
obj
.
keys
()
def
get_related_serializer
(
self
,
key
):
def
get_related_serializer
(
self
,
info
):
info
=
_fields_to_dict
(
self
.
fields
)
.
get
(
key
,
None
)
# If an element in `fields` is a 2-tuple of (str, tuple)
# If an element in `fields` is a 2-tuple of (str, tuple)
# then the second element of the tuple is the fields to
# then the second element of the tuple is the fields to
# set on the related serializer
# set on the related serializer
...
@@ -175,11 +160,11 @@ class Serializer(object):
...
@@ -175,11 +160,11 @@ class Serializer(object):
"""
"""
return
self
.
rename
.
get
(
smart_str
(
key
),
smart_str
(
key
))
return
self
.
rename
.
get
(
smart_str
(
key
),
smart_str
(
key
))
def
serialize_val
(
self
,
key
,
obj
):
def
serialize_val
(
self
,
key
,
obj
,
related_info
):
"""
"""
Convert a model field or dict value into a serializable representation.
Convert a model field or dict value into a serializable representation.
"""
"""
related_serializer
=
self
.
get_related_serializer
(
key
)
related_serializer
=
self
.
get_related_serializer
(
related_info
)
if
self
.
depth
is
None
:
if
self
.
depth
is
None
:
depth
=
None
depth
=
None
...
@@ -219,7 +204,7 @@ class Serializer(object):
...
@@ -219,7 +204,7 @@ class Serializer(object):
fields
=
self
.
get_fields
(
instance
)
fields
=
self
.
get_fields
(
instance
)
# serialize each required field
# serialize each required field
for
fname
in
fields
:
for
fname
,
related_info
in
_fields_to_list
(
fields
)
:
try
:
try
:
# we first check for a method 'fname' on self,
# we first check for a method 'fname' on self,
# 'fname's signature must be 'def fname(self, instance)'
# 'fname's signature must be 'def fname(self, instance)'
...
@@ -237,7 +222,7 @@ class Serializer(object):
...
@@ -237,7 +222,7 @@ class Serializer(object):
continue
continue
key
=
self
.
serialize_key
(
fname
)
key
=
self
.
serialize_key
(
fname
)
val
=
self
.
serialize_val
(
fname
,
obj
)
val
=
self
.
serialize_val
(
fname
,
obj
,
related_info
)
data
[
key
]
=
val
data
[
key
]
=
val
except
_SkipField
:
except
_SkipField
:
pass
pass
...
...
djangorestframework/tests/serializer.py
View file @
44df8345
...
@@ -104,6 +104,27 @@ class TestFieldNesting(TestCase):
...
@@ -104,6 +104,27 @@ class TestFieldNesting(TestCase):
self
.
assertEqual
(
SerializerM2
()
.
serialize
(
self
.
m2
),
{
'field'
:
{
'field1'
:
u'foo'
}})
self
.
assertEqual
(
SerializerM2
()
.
serialize
(
self
.
m2
),
{
'field'
:
{
'field1'
:
u'foo'
}})
self
.
assertEqual
(
SerializerM3
()
.
serialize
(
self
.
m3
),
{
'field'
:
{
'field2'
:
u'bar'
}})
self
.
assertEqual
(
SerializerM3
()
.
serialize
(
self
.
m3
),
{
'field'
:
{
'field2'
:
u'bar'
}})
def
test_serializer_no_fields
(
self
):
"""
Test related serializer works when the fields attr isn't present. Fix for
#178.
"""
class
NestedM2
(
Serializer
):
fields
=
(
'field1'
,
)
class
NestedM3
(
Serializer
):
fields
=
(
'field2'
,
)
class
SerializerM2
(
Serializer
):
include
=
[(
'field'
,
NestedM2
)]
exclude
=
(
'id'
,
)
class
SerializerM3
(
Serializer
):
fields
=
[(
'field'
,
NestedM3
)]
self
.
assertEqual
(
SerializerM2
()
.
serialize
(
self
.
m2
),
{
'field'
:
{
'field1'
:
u'foo'
}})
self
.
assertEqual
(
SerializerM3
()
.
serialize
(
self
.
m3
),
{
'field'
:
{
'field2'
:
u'bar'
}})
def
test_serializer_classname_nesting
(
self
):
def
test_serializer_classname_nesting
(
self
):
"""
"""
Test related model serialization
Test related model serialization
...
...
djangorestframework/utils/__init__.py
View file @
44df8345
...
@@ -9,7 +9,6 @@ from djangorestframework.request import Request
...
@@ -9,7 +9,6 @@ from djangorestframework.request import Request
import
re
import
re
import
xml.etree.ElementTree
as
ET
import
xml.etree.ElementTree
as
ET
MSIE_USER_AGENT_REGEX
=
re
.
compile
(
r'^Mozilla/[0-9]+\.[0-9]+ \([^)]*; MSIE [0-9]+\.[0-9]+[a-z]?;[^)]*\)(?!.* Opera )'
)
MSIE_USER_AGENT_REGEX
=
re
.
compile
(
r'^Mozilla/[0-9]+\.[0-9]+ \([^)]*; MSIE [0-9]+\.[0-9]+[a-z]?;[^)]*\)(?!.* Opera )'
)
...
...
docs/howto/setup.rst
View file @
44df8345
...
@@ -49,6 +49,7 @@ YAML
...
@@ -49,6 +49,7 @@ YAML
YAML support is optional, and requires `PyYAML`_.
YAML support is optional, and requires `PyYAML`_.
Login / Logout
Login / Logout
--------------
--------------
...
...
docs/requirements.txt
View file @
44df8345
# Documentation requires Django & Sphinx, and their dependencies...
# Documentation requires Django & Sphinx, and their dependencies...
Django
=
=1.2.4
Django
>
=1.2.4
Jinja2==2.5.5
Jinja2==2.5.5
Pygments==1.4
Pygments==1.4
Sphinx==1.0.7
Sphinx==1.0.7
...
...
examples/mixin/urls.py
View file @
44df8345
...
@@ -9,15 +9,15 @@ from django.conf.urls.defaults import patterns, url
...
@@ -9,15 +9,15 @@ from django.conf.urls.defaults import patterns, url
class
ExampleView
(
ResponseMixin
,
View
):
class
ExampleView
(
ResponseMixin
,
View
):
"""An example view using Django 1.3's class based views.
"""An example view using Django 1.3's class based views.
Uses djangorestframework's RendererMixin to provide support for multiple output formats."""
Uses djangorestframework's RendererMixin to provide support for multiple
output formats."""
renderers
=
DEFAULT_RENDERERS
renderers
=
DEFAULT_RENDERERS
def
get
(
self
,
request
):
def
get
(
self
,
request
):
url
=
reverse
(
'mixin-view'
,
request
)
url
=
reverse
(
'mixin-view'
,
request
=
request
)
response
=
Response
({
'description'
:
'Some example content'
,
response
=
Response
(
200
,
{
'description'
:
'Some example content'
,
'url'
:
url
},
status
=
200
)
'url'
:
url
})
self
.
response
=
self
.
prepare_response
(
response
)
return
self
.
render
(
response
)
return
self
.
response
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
...
...
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