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
dea4a45e
Commit
dea4a45e
authored
Jan 21, 2012
by
Tom Christie
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
pep8/pyflakes cleanup
parent
a851294d
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
25 additions
and
108 deletions
+25
-108
djangorestframework/authentication.py
+0
-1
djangorestframework/mixins.py
+0
-17
djangorestframework/parsers.py
+6
-4
djangorestframework/renderers.py
+4
-5
djangorestframework/resources.py
+0
-32
djangorestframework/response.py
+1
-0
djangorestframework/serializer.py
+2
-16
djangorestframework/utils/breadcrumbs.py
+1
-0
djangorestframework/utils/description.py
+0
-3
djangorestframework/utils/mediatypes.py
+2
-26
djangorestframework/utils/staticviews.py
+3
-0
djangorestframework/views.py
+6
-4
No files found.
djangorestframework/authentication.py
View file @
dea4a45e
...
@@ -9,7 +9,6 @@ The set of authentication methods which are used is then specified by setting th
...
@@ -9,7 +9,6 @@ The set of authentication methods which are used is then specified by setting th
from
django.contrib.auth
import
authenticate
from
django.contrib.auth
import
authenticate
from
djangorestframework.compat
import
CsrfViewMiddleware
from
djangorestframework.compat
import
CsrfViewMiddleware
from
djangorestframework.utils
import
as_tuple
import
base64
import
base64
__all__
=
(
__all__
=
(
...
...
djangorestframework/mixins.py
View file @
dea4a45e
...
@@ -68,7 +68,6 @@ class RequestMixin(object):
...
@@ -68,7 +68,6 @@ class RequestMixin(object):
self
.
_load_method_and_content_type
()
self
.
_load_method_and_content_type
()
return
self
.
_method
return
self
.
_method
@property
@property
def
content_type
(
self
):
def
content_type
(
self
):
"""
"""
...
@@ -82,7 +81,6 @@ class RequestMixin(object):
...
@@ -82,7 +81,6 @@ class RequestMixin(object):
self
.
_load_method_and_content_type
()
self
.
_load_method_and_content_type
()
return
self
.
_content_type
return
self
.
_content_type
@property
@property
def
DATA
(
self
):
def
DATA
(
self
):
"""
"""
...
@@ -95,7 +93,6 @@ class RequestMixin(object):
...
@@ -95,7 +93,6 @@ class RequestMixin(object):
self
.
_load_data_and_files
()
self
.
_load_data_and_files
()
return
self
.
_data
return
self
.
_data
@property
@property
def
FILES
(
self
):
def
FILES
(
self
):
"""
"""
...
@@ -107,7 +104,6 @@ class RequestMixin(object):
...
@@ -107,7 +104,6 @@ class RequestMixin(object):
self
.
_load_data_and_files
()
self
.
_load_data_and_files
()
return
self
.
_files
return
self
.
_files
def
_load_data_and_files
(
self
):
def
_load_data_and_files
(
self
):
"""
"""
Parse the request content into self.DATA and self.FILES.
Parse the request content into self.DATA and self.FILES.
...
@@ -118,7 +114,6 @@ class RequestMixin(object):
...
@@ -118,7 +114,6 @@ class RequestMixin(object):
if
not
hasattr
(
self
,
'_data'
):
if
not
hasattr
(
self
,
'_data'
):
(
self
.
_data
,
self
.
_files
)
=
self
.
_parse
(
self
.
_get_stream
(),
self
.
_content_type
)
(
self
.
_data
,
self
.
_files
)
=
self
.
_parse
(
self
.
_get_stream
(),
self
.
_content_type
)
def
_load_method_and_content_type
(
self
):
def
_load_method_and_content_type
(
self
):
"""
"""
Set the method and content_type, and then check if they've been overridden.
Set the method and content_type, and then check if they've been overridden.
...
@@ -127,7 +122,6 @@ class RequestMixin(object):
...
@@ -127,7 +122,6 @@ class RequestMixin(object):
self
.
_content_type
=
self
.
request
.
META
.
get
(
'HTTP_CONTENT_TYPE'
,
self
.
request
.
META
.
get
(
'CONTENT_TYPE'
,
''
))
self
.
_content_type
=
self
.
request
.
META
.
get
(
'HTTP_CONTENT_TYPE'
,
self
.
request
.
META
.
get
(
'CONTENT_TYPE'
,
''
))
self
.
_perform_form_overloading
()
self
.
_perform_form_overloading
()
def
_get_stream
(
self
):
def
_get_stream
(
self
):
"""
"""
Returns an object that may be used to stream the request content.
Returns an object that may be used to stream the request content.
...
@@ -147,7 +141,6 @@ class RequestMixin(object):
...
@@ -147,7 +141,6 @@ class RequestMixin(object):
return
request
return
request
return
StringIO
(
request
.
raw_post_data
)
return
StringIO
(
request
.
raw_post_data
)
def
_perform_form_overloading
(
self
):
def
_perform_form_overloading
(
self
):
"""
"""
If this is a form POST request, then we need to check if the method and content/content_type have been
If this is a form POST request, then we need to check if the method and content/content_type have been
...
@@ -173,7 +166,6 @@ class RequestMixin(object):
...
@@ -173,7 +166,6 @@ class RequestMixin(object):
stream
=
StringIO
(
self
.
_data
.
pop
(
self
.
_CONTENT_PARAM
)[
0
])
stream
=
StringIO
(
self
.
_data
.
pop
(
self
.
_CONTENT_PARAM
)[
0
])
(
self
.
_data
,
self
.
_files
)
=
self
.
_parse
(
stream
,
self
.
_content_type
)
(
self
.
_data
,
self
.
_files
)
=
self
.
_parse
(
stream
,
self
.
_content_type
)
def
_parse
(
self
,
stream
,
content_type
):
def
_parse
(
self
,
stream
,
content_type
):
"""
"""
Parse the request content.
Parse the request content.
...
@@ -194,7 +186,6 @@ class RequestMixin(object):
...
@@ -194,7 +186,6 @@ class RequestMixin(object):
{
'error'
:
'Unsupported media type in request
\'
%
s
\'
.'
%
{
'error'
:
'Unsupported media type in request
\'
%
s
\'
.'
%
content_type
})
content_type
})
@property
@property
def
_parsed_media_types
(
self
):
def
_parsed_media_types
(
self
):
"""
"""
...
@@ -202,7 +193,6 @@ class RequestMixin(object):
...
@@ -202,7 +193,6 @@ class RequestMixin(object):
"""
"""
return
[
parser
.
media_type
for
parser
in
self
.
parsers
]
return
[
parser
.
media_type
for
parser
in
self
.
parsers
]
@property
@property
def
_default_parser
(
self
):
def
_default_parser
(
self
):
"""
"""
...
@@ -211,7 +201,6 @@ class RequestMixin(object):
...
@@ -211,7 +201,6 @@ class RequestMixin(object):
return
self
.
parsers
[
0
]
return
self
.
parsers
[
0
]
########## ResponseMixin ##########
########## ResponseMixin ##########
class
ResponseMixin
(
object
):
class
ResponseMixin
(
object
):
...
@@ -233,7 +222,6 @@ class ResponseMixin(object):
...
@@ -233,7 +222,6 @@ class ResponseMixin(object):
Should be a tuple/list of classes as described in the :mod:`renderers` module.
Should be a tuple/list of classes as described in the :mod:`renderers` module.
"""
"""
# TODO: wrap this behavior around dispatch(), ensuring it works
# TODO: wrap this behavior around dispatch(), ensuring it works
# out of the box with existing Django classes that use render_to_response.
# out of the box with existing Django classes that use render_to_response.
def
render
(
self
,
response
):
def
render
(
self
,
response
):
...
@@ -266,7 +254,6 @@ class ResponseMixin(object):
...
@@ -266,7 +254,6 @@ class ResponseMixin(object):
return
resp
return
resp
def
_determine_renderer
(
self
,
request
):
def
_determine_renderer
(
self
,
request
):
"""
"""
Determines the appropriate renderer for the output, given the client's 'Accept' header,
Determines the appropriate renderer for the output, given the client's 'Accept' header,
...
@@ -309,7 +296,6 @@ class ResponseMixin(object):
...
@@ -309,7 +296,6 @@ class ResponseMixin(object):
{
'detail'
:
'Could not satisfy the client
\'
s Accept header'
,
{
'detail'
:
'Could not satisfy the client
\'
s Accept header'
,
'available_types'
:
self
.
_rendered_media_types
})
'available_types'
:
self
.
_rendered_media_types
})
@property
@property
def
_rendered_media_types
(
self
):
def
_rendered_media_types
(
self
):
"""
"""
...
@@ -353,7 +339,6 @@ class AuthMixin(object):
...
@@ -353,7 +339,6 @@ class AuthMixin(object):
Should be a tuple/list of classes as described in the :mod:`permissions` module.
Should be a tuple/list of classes as described in the :mod:`permissions` module.
"""
"""
@property
@property
def
user
(
self
):
def
user
(
self
):
"""
"""
...
@@ -364,7 +349,6 @@ class AuthMixin(object):
...
@@ -364,7 +349,6 @@ class AuthMixin(object):
self
.
_user
=
self
.
_authenticate
()
self
.
_user
=
self
.
_authenticate
()
return
self
.
_user
return
self
.
_user
def
_authenticate
(
self
):
def
_authenticate
(
self
):
"""
"""
Attempt to authenticate the request using each authentication class in turn.
Attempt to authenticate the request using each authentication class in turn.
...
@@ -377,7 +361,6 @@ class AuthMixin(object):
...
@@ -377,7 +361,6 @@ class AuthMixin(object):
return
user
return
user
return
AnonymousUser
()
return
AnonymousUser
()
# TODO: wrap this behavior around dispatch()
# TODO: wrap this behavior around dispatch()
def
_check_permissions
(
self
):
def
_check_permissions
(
self
):
"""
"""
...
...
djangorestframework/parsers.py
View file @
dea4a45e
...
@@ -115,6 +115,7 @@ if yaml:
...
@@ -115,6 +115,7 @@ if yaml:
else
:
else
:
YAMLParser
=
None
YAMLParser
=
None
class
PlainTextParser
(
BaseParser
):
class
PlainTextParser
(
BaseParser
):
"""
"""
Plain text parser.
Plain text parser.
...
@@ -223,7 +224,7 @@ class XMLParser(BaseParser):
...
@@ -223,7 +224,7 @@ class XMLParser(BaseParser):
return
value
return
value
try
:
try
:
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
return
datetime
.
datetime
.
strptime
(
value
,
'
%
Y-
%
m-
%
d
%
H:
%
M:
%
S'
)
except
ValueError
:
except
ValueError
:
pass
pass
...
@@ -240,11 +241,12 @@ class XMLParser(BaseParser):
...
@@ -240,11 +241,12 @@ class XMLParser(BaseParser):
return
value
return
value
DEFAULT_PARSERS
=
(
JSONParser
,
DEFAULT_PARSERS
=
(
JSONParser
,
FormParser
,
FormParser
,
MultiPartParser
,
MultiPartParser
,
XMLParser
XMLParser
)
)
if
YAMLParser
:
if
YAMLParser
:
DEFAULT_PARSERS
+=
(
YAMLParser
,
)
DEFAULT_PARSERS
+=
(
YAMLParser
,
)
djangorestframework/renderers.py
View file @
dea4a45e
...
@@ -226,7 +226,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
...
@@ -226,7 +226,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
return
content
return
content
def
_get_form_instance
(
self
,
view
,
method
):
def
_get_form_instance
(
self
,
view
,
method
):
"""
"""
Get a form, possibly bound to either the input or output data.
Get a form, possibly bound to either the input or output data.
...
@@ -262,7 +261,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
...
@@ -262,7 +261,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
return
form_instance
return
form_instance
def
_get_generic_content_form
(
self
,
view
):
def
_get_generic_content_form
(
self
,
view
):
"""
"""
Returns a form that allows for arbitrary content types to be tunneled via standard HTML forms
Returns a form that allows for arbitrary content types to be tunneled via standard HTML forms
...
@@ -298,7 +296,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
...
@@ -298,7 +296,6 @@ class DocumentingTemplateRenderer(BaseRenderer):
# Okey doke, let's do it
# Okey doke, let's do it
return
GenericContentForm
(
view
)
return
GenericContentForm
(
view
)
def
render
(
self
,
obj
=
None
,
media_type
=
None
):
def
render
(
self
,
obj
=
None
,
media_type
=
None
):
"""
"""
Renders *obj* using the :attr:`template` set on the class.
Renders *obj* using the :attr:`template` set on the class.
...
@@ -398,12 +395,14 @@ class DocumentingPlainTextRenderer(DocumentingTemplateRenderer):
...
@@ -398,12 +395,14 @@ class DocumentingPlainTextRenderer(DocumentingTemplateRenderer):
template
=
'renderer.txt'
template
=
'renderer.txt'
DEFAULT_RENDERERS
=
(
JSONRenderer
,
DEFAULT_RENDERERS
=
(
JSONRenderer
,
JSONPRenderer
,
JSONPRenderer
,
DocumentingHTMLRenderer
,
DocumentingHTMLRenderer
,
DocumentingXHTMLRenderer
,
DocumentingXHTMLRenderer
,
DocumentingPlainTextRenderer
,
DocumentingPlainTextRenderer
,
XMLRenderer
)
XMLRenderer
)
if
YAMLRenderer
:
if
YAMLRenderer
:
DEFAULT_RENDERERS
+=
(
YAMLRenderer
,)
DEFAULT_RENDERERS
+=
(
YAMLRenderer
,)
djangorestframework/resources.py
View file @
dea4a45e
from
django
import
forms
from
django
import
forms
from
django.core.urlresolvers
import
reverse
,
get_urlconf
,
get_resolver
,
NoReverseMatch
from
django.core.urlresolvers
import
reverse
,
get_urlconf
,
get_resolver
,
NoReverseMatch
from
django.db
import
models
from
django.db
import
models
from
django.db.models.query
import
QuerySet
from
django.db.models.fields.related
import
RelatedField
from
django.utils.encoding
import
smart_unicode
from
djangorestframework.response
import
ErrorResponse
from
djangorestframework.response
import
ErrorResponse
from
djangorestframework.serializer
import
Serializer
,
_SkipField
from
djangorestframework.serializer
import
Serializer
,
_SkipField
from
djangorestframework.utils
import
as_tuple
from
djangorestframework.utils
import
as_tuple
import
decimal
import
inspect
import
re
class
BaseResource
(
Serializer
):
class
BaseResource
(
Serializer
):
"""
"""
...
@@ -86,7 +77,6 @@ class FormResource(Resource):
...
@@ -86,7 +77,6 @@ class FormResource(Resource):
expected fields are validated.
expected fields are validated.
"""
"""
def
validate_request
(
self
,
data
,
files
=
None
):
def
validate_request
(
self
,
data
,
files
=
None
):
"""
"""
Given some content as input return some cleaned, validated content.
Given some content as input return some cleaned, validated content.
...
@@ -101,7 +91,6 @@ class FormResource(Resource):
...
@@ -101,7 +91,6 @@ class FormResource(Resource):
"""
"""
return
self
.
_validate
(
data
,
files
)
return
self
.
_validate
(
data
,
files
)
def
_validate
(
self
,
data
,
files
,
allowed_extra_fields
=
(),
fake_data
=
None
):
def
_validate
(
self
,
data
,
files
,
allowed_extra_fields
=
(),
fake_data
=
None
):
"""
"""
Wrapped by validate to hide the extra flags that are used in the implementation.
Wrapped by validate to hide the extra flags that are used in the implementation.
...
@@ -187,7 +176,6 @@ class FormResource(Resource):
...
@@ -187,7 +176,6 @@ class FormResource(Resource):
# Return HTTP 400 response (BAD REQUEST)
# Return HTTP 400 response (BAD REQUEST)
raise
ErrorResponse
(
400
,
detail
)
raise
ErrorResponse
(
400
,
detail
)
def
get_form_class
(
self
,
method
=
None
):
def
get_form_class
(
self
,
method
=
None
):
"""
"""
Returns the form class used to validate this resource.
Returns the form class used to validate this resource.
...
@@ -209,7 +197,6 @@ class FormResource(Resource):
...
@@ -209,7 +197,6 @@ class FormResource(Resource):
return
form
return
form
def
get_bound_form
(
self
,
data
=
None
,
files
=
None
,
method
=
None
):
def
get_bound_form
(
self
,
data
=
None
,
files
=
None
,
method
=
None
):
"""
"""
Given some content return a Django form bound to that content.
Given some content return a Django form bound to that content.
...
@@ -226,20 +213,6 @@ class FormResource(Resource):
...
@@ -226,20 +213,6 @@ class FormResource(Resource):
return
form
()
return
form
()
#class _RegisterModelResource(type):
# """
# Auto register new ModelResource classes into ``_model_to_resource``
# """
# def __new__(cls, name, bases, dct):
# resource_cls = type.__new__(cls, name, bases, dct)
# model_cls = dct.get('model', None)
# if model_cls:
# _model_to_resource[model_cls] = resource_cls
# return resource_cls
class
ModelResource
(
FormResource
):
class
ModelResource
(
FormResource
):
"""
"""
Resource class that uses forms for validation and otherwise falls back to a model form if no form is set.
Resource class that uses forms for validation and otherwise falls back to a model form if no form is set.
...
@@ -282,7 +255,6 @@ class ModelResource(FormResource):
...
@@ -282,7 +255,6 @@ class ModelResource(FormResource):
The list of fields to exclude. This is only used if :attr:`fields` is not set.
The list of fields to exclude. This is only used if :attr:`fields` is not set.
"""
"""
include
=
(
'url'
,)
include
=
(
'url'
,)
"""
"""
The list of extra fields to include. This is only used if :attr:`fields` is not set.
The list of extra fields to include. This is only used if :attr:`fields` is not set.
...
@@ -298,7 +270,6 @@ class ModelResource(FormResource):
...
@@ -298,7 +270,6 @@ class ModelResource(FormResource):
self
.
model
=
getattr
(
view
,
'model'
,
None
)
or
self
.
model
self
.
model
=
getattr
(
view
,
'model'
,
None
)
or
self
.
model
def
validate_request
(
self
,
data
,
files
=
None
):
def
validate_request
(
self
,
data
,
files
=
None
):
"""
"""
Given some content as input return some cleaned, validated content.
Given some content as input return some cleaned, validated content.
...
@@ -315,7 +286,6 @@ class ModelResource(FormResource):
...
@@ -315,7 +286,6 @@ class ModelResource(FormResource):
"""
"""
return
self
.
_validate
(
data
,
files
,
allowed_extra_fields
=
self
.
_property_fields_set
)
return
self
.
_validate
(
data
,
files
,
allowed_extra_fields
=
self
.
_property_fields_set
)
def
get_bound_form
(
self
,
data
=
None
,
files
=
None
,
method
=
None
):
def
get_bound_form
(
self
,
data
=
None
,
files
=
None
,
method
=
None
):
"""
"""
Given some content return a ``Form`` instance bound to that content.
Given some content return a ``Form`` instance bound to that content.
...
@@ -348,7 +318,6 @@ class ModelResource(FormResource):
...
@@ -348,7 +318,6 @@ class ModelResource(FormResource):
return
form
()
return
form
()
def
url
(
self
,
instance
):
def
url
(
self
,
instance
):
"""
"""
Attempts to reverse resolve the url of the given model *instance* for this resource.
Attempts to reverse resolve the url of the given model *instance* for this resource.
...
@@ -390,7 +359,6 @@ class ModelResource(FormResource):
...
@@ -390,7 +359,6 @@ class ModelResource(FormResource):
pass
pass
raise
_SkipField
raise
_SkipField
@property
@property
def
_model_fields_set
(
self
):
def
_model_fields_set
(
self
):
"""
"""
...
...
djangorestframework/response.py
View file @
dea4a45e
...
@@ -11,6 +11,7 @@ __all__ = ('Response', 'ErrorResponse')
...
@@ -11,6 +11,7 @@ __all__ = ('Response', 'ErrorResponse')
# TODO: remove raw_content/cleaned_content and just use content?
# TODO: remove raw_content/cleaned_content and just use content?
class
Response
(
object
):
class
Response
(
object
):
"""
"""
An HttpResponse that may include content that hasn't yet been serialized.
An HttpResponse that may include content that hasn't yet been serialized.
...
...
djangorestframework/serializer.py
View file @
dea4a45e
...
@@ -3,10 +3,8 @@ Customizable serialization.
...
@@ -3,10 +3,8 @@ Customizable serialization.
"""
"""
from
django.db
import
models
from
django.db
import
models
from
django.db.models.query
import
QuerySet
from
django.db.models.query
import
QuerySet
from
django.db.models.fields.related
import
RelatedField
from
django.utils.encoding
import
smart_unicode
,
is_protected_type
,
smart_str
from
django.utils.encoding
import
smart_unicode
,
is_protected_type
,
smart_str
import
decimal
import
inspect
import
inspect
import
types
import
types
...
@@ -24,12 +22,14 @@ def _field_to_tuple(field):
...
@@ -24,12 +22,14 @@ def _field_to_tuple(field):
return
(
field
[
0
],
field
[
1
])
return
(
field
[
0
],
field
[
1
])
return
(
field
,
None
)
return
(
field
,
None
)
def
_fields_to_list
(
fields
):
def
_fields_to_list
(
fields
):
"""
"""
Return a list of field names.
Return a list of field names.
"""
"""
return
[
_field_to_tuple
(
field
)[
0
]
for
field
in
fields
or
()]
return
[
_field_to_tuple
(
field
)[
0
]
for
field
in
fields
or
()]
def
_fields_to_dict
(
fields
):
def
_fields_to_dict
(
fields
):
"""
"""
Return a `dict` of field name -> None, or tuple of fields, or Serializer class
Return a `dict` of field name -> None, or tuple of fields, or Serializer class
...
@@ -104,13 +104,11 @@ class Serializer(object):
...
@@ -104,13 +104,11 @@ class Serializer(object):
The maximum depth to serialize to, or `None`.
The maximum depth to serialize to, or `None`.
"""
"""
def
__init__
(
self
,
depth
=
None
,
stack
=
[],
**
kwargs
):
def
__init__
(
self
,
depth
=
None
,
stack
=
[],
**
kwargs
):
if
depth
is
not
None
:
if
depth
is
not
None
:
self
.
depth
=
depth
self
.
depth
=
depth
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.
Return the set of field names/keys to use for a model instance/dict.
...
@@ -130,7 +128,6 @@ class Serializer(object):
...
@@ -130,7 +128,6 @@ class Serializer(object):
return
fields
return
fields
def
get_default_fields
(
self
,
obj
):
def
get_default_fields
(
self
,
obj
):
"""
"""
Return the default list of field names/keys for a model instance/dict.
Return the default list of field names/keys for a model instance/dict.
...
@@ -142,7 +139,6 @@ class Serializer(object):
...
@@ -142,7 +139,6 @@ class Serializer(object):
else
:
else
:
return
obj
.
keys
()
return
obj
.
keys
()
def
get_related_serializer
(
self
,
key
):
def
get_related_serializer
(
self
,
key
):
info
=
_fields_to_dict
(
self
.
fields
)
.
get
(
key
,
None
)
info
=
_fields_to_dict
(
self
.
fields
)
.
get
(
key
,
None
)
...
@@ -172,7 +168,6 @@ class Serializer(object):
...
@@ -172,7 +168,6 @@ class Serializer(object):
# Otherwise use `related_serializer` or fall back to `Serializer`
# Otherwise use `related_serializer` or fall back to `Serializer`
return
getattr
(
self
,
'related_serializer'
)
or
Serializer
return
getattr
(
self
,
'related_serializer'
)
or
Serializer
def
serialize_key
(
self
,
key
):
def
serialize_key
(
self
,
key
):
"""
"""
Keys serialize to their string value,
Keys serialize to their string value,
...
@@ -180,7 +175,6 @@ class Serializer(object):
...
@@ -180,7 +175,6 @@ 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
):
"""
"""
Convert a model field or dict value into a serializable representation.
Convert a model field or dict value into a serializable representation.
...
@@ -202,7 +196,6 @@ class Serializer(object):
...
@@ -202,7 +196,6 @@ class Serializer(object):
return
related_serializer
(
depth
=
depth
,
stack
=
stack
)
.
serialize
(
obj
)
return
related_serializer
(
depth
=
depth
,
stack
=
stack
)
.
serialize
(
obj
)
def
serialize_max_depth
(
self
,
obj
):
def
serialize_max_depth
(
self
,
obj
):
"""
"""
Determine how objects should be serialized once `depth` is exceeded.
Determine how objects should be serialized once `depth` is exceeded.
...
@@ -210,7 +203,6 @@ class Serializer(object):
...
@@ -210,7 +203,6 @@ class Serializer(object):
"""
"""
raise
_SkipField
raise
_SkipField
def
serialize_recursion
(
self
,
obj
):
def
serialize_recursion
(
self
,
obj
):
"""
"""
Determine how objects should be serialized if recursion occurs.
Determine how objects should be serialized if recursion occurs.
...
@@ -218,7 +210,6 @@ class Serializer(object):
...
@@ -218,7 +210,6 @@ class Serializer(object):
"""
"""
raise
_SkipField
raise
_SkipField
def
serialize_model
(
self
,
instance
):
def
serialize_model
(
self
,
instance
):
"""
"""
Given a model instance or dict, serialize it to a dict..
Given a model instance or dict, serialize it to a dict..
...
@@ -253,35 +244,30 @@ class Serializer(object):
...
@@ -253,35 +244,30 @@ class Serializer(object):
return
data
return
data
def
serialize_iter
(
self
,
obj
):
def
serialize_iter
(
self
,
obj
):
"""
"""
Convert iterables into a serializable representation.
Convert iterables into a serializable representation.
"""
"""
return
[
self
.
serialize
(
item
)
for
item
in
obj
]
return
[
self
.
serialize
(
item
)
for
item
in
obj
]
def
serialize_func
(
self
,
obj
):
def
serialize_func
(
self
,
obj
):
"""
"""
Convert no-arg methods and functions into a serializable representation.
Convert no-arg methods and functions into a serializable representation.
"""
"""
return
self
.
serialize
(
obj
())
return
self
.
serialize
(
obj
())
def
serialize_manager
(
self
,
obj
):
def
serialize_manager
(
self
,
obj
):
"""
"""
Convert a model manager into a serializable representation.
Convert a model manager into a serializable representation.
"""
"""
return
self
.
serialize_iter
(
obj
.
all
())
return
self
.
serialize_iter
(
obj
.
all
())
def
serialize_fallback
(
self
,
obj
):
def
serialize_fallback
(
self
,
obj
):
"""
"""
Convert any unhandled object into a serializable representation.
Convert any unhandled object into a serializable representation.
"""
"""
return
smart_unicode
(
obj
,
strings_only
=
True
)
return
smart_unicode
(
obj
,
strings_only
=
True
)
def
serialize
(
self
,
obj
):
def
serialize
(
self
,
obj
):
"""
"""
Convert any object into a serializable representation.
Convert any object into a serializable representation.
...
...
djangorestframework/utils/breadcrumbs.py
View file @
dea4a45e
from
django.core.urlresolvers
import
resolve
from
django.core.urlresolvers
import
resolve
from
djangorestframework.utils.description
import
get_name
from
djangorestframework.utils.description
import
get_name
def
get_breadcrumbs
(
url
):
def
get_breadcrumbs
(
url
):
"""Given a url returns a list of breadcrumbs, which are each a tuple of (name, url)."""
"""Given a url returns a list of breadcrumbs, which are each a tuple of (name, url)."""
...
...
djangorestframework/utils/description.py
View file @
dea4a45e
...
@@ -50,7 +50,6 @@ def get_name(view):
...
@@ -50,7 +50,6 @@ def get_name(view):
return
re
.
sub
(
'(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))'
,
'
\\
1'
,
name
)
.
strip
()
return
re
.
sub
(
'(((?<=[a-z])[A-Z])|([A-Z](?![A-Z]|$)))'
,
'
\\
1'
,
name
)
.
strip
()
def
get_description
(
view
):
def
get_description
(
view
):
"""
"""
Provide a description for the view.
Provide a description for the view.
...
@@ -63,7 +62,6 @@ def get_description(view):
...
@@ -63,7 +62,6 @@ def get_description(view):
if
getattr
(
view
,
'cls_instance'
,
None
):
if
getattr
(
view
,
'cls_instance'
,
None
):
view
=
view
.
cls_instance
view
=
view
.
cls_instance
# If this view has a resource that's been overridden, then use the resource's doctring
# If this view has a resource that's been overridden, then use the resource's doctring
if
getattr
(
view
,
'resource'
,
None
)
not
in
(
None
,
Resource
,
FormResource
,
ModelResource
):
if
getattr
(
view
,
'resource'
,
None
)
not
in
(
None
,
Resource
,
FormResource
,
ModelResource
):
doc
=
view
.
resource
.
__doc__
doc
=
view
.
resource
.
__doc__
...
@@ -88,4 +86,3 @@ def get_description(view):
...
@@ -88,4 +86,3 @@ def get_description(view):
# otherwise return it as-is
# otherwise return it as-is
return
doc
return
doc
djangorestframework/utils/mediatypes.py
View file @
dea4a45e
...
@@ -61,10 +61,10 @@ def order_by_precedence(media_type_lst):
...
@@ -61,10 +61,10 @@ def order_by_precedence(media_type_lst):
1. 'type/*'
1. 'type/*'
0. '*/*'
0. '*/*'
"""
"""
ret
=
[[],
[],[],
[]]
ret
=
[[],
[],
[],
[]]
for
media_type
in
media_type_lst
:
for
media_type
in
media_type_lst
:
precedence
=
_MediaType
(
media_type
)
.
precedence
precedence
=
_MediaType
(
media_type
)
.
precedence
ret
[
3
-
precedence
]
.
append
(
media_type
)
ret
[
3
-
precedence
]
.
append
(
media_type
)
return
ret
return
ret
...
@@ -103,29 +103,6 @@ class _MediaType(object):
...
@@ -103,29 +103,6 @@ class _MediaType(object):
return
2
return
2
return
3
return
3
#def quality(self):
# """
# Return a quality level for the media type.
# """
# try:
# return Decimal(self.params.get('q', '1.0'))
# except Exception:
# return Decimal(0)
#def score(self):
# """
# Return an overall score for a given media type given it's quality and precedence.
# """
# # NB. quality values should only have up to 3 decimal points
# # http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.9
# return self.quality * 10000 + self.precedence
#def as_tuple(self):
# return (self.main_type, self.sub_type, self.params)
#def __repr__(self):
# return "<MediaType %s>" % (self.as_tuple(),)
def
__str__
(
self
):
def
__str__
(
self
):
return
unicode
(
self
)
.
encode
(
'utf-8'
)
return
unicode
(
self
)
.
encode
(
'utf-8'
)
...
@@ -134,4 +111,3 @@ class _MediaType(object):
...
@@ -134,4 +111,3 @@ class _MediaType(object):
for
key
,
val
in
self
.
params
.
items
():
for
key
,
val
in
self
.
params
.
items
():
ret
+=
";
%
s=
%
s"
%
(
key
,
val
)
ret
+=
";
%
s=
%
s"
%
(
key
,
val
)
return
ret
return
ret
djangorestframework/utils/staticviews.py
View file @
dea4a45e
...
@@ -5,13 +5,16 @@ from django.shortcuts import render_to_response
...
@@ -5,13 +5,16 @@ from django.shortcuts import render_to_response
from
django.template
import
RequestContext
from
django.template
import
RequestContext
import
base64
import
base64
def
deny_robots
(
request
):
def
deny_robots
(
request
):
return
HttpResponse
(
'User-agent: *
\n
Disallow: /'
,
mimetype
=
'text/plain'
)
return
HttpResponse
(
'User-agent: *
\n
Disallow: /'
,
mimetype
=
'text/plain'
)
def
favicon
(
request
):
def
favicon
(
request
):
data
=
'AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLy8tLy8vL3svLy1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy8vLBsvLywkAAAAATkZFS1xUVPqhn57/y8vL0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmVlQ/GxcXiy8vL88vLy4FdVlXzTkZF/2RdXP/Ly8vty8vLtMvLy5DLy8vty8vLxgAAAAAAAAAAAAAAAAAAAABORkUJTkZF4lNMS/+Lh4f/cWtq/05GRf9ORkX/Vk9O/3JtbP+Ef3//Vk9O/2ljYv/Ly8v5y8vLCQAAAAAAAAAAAAAAAE5GRQlORkX2TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/UElI/8PDw5cAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRZZORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf+Cfn3/y8vLvQAAAAAAAAAAAAAAAAAAAADLy8tIaWNi805GRf9ORkX/YVpZ/396eV7Ly8t7qaen9lZOTu5ORkX/TkZF/25oZ//Ly8v/y8vLycvLy0gAAAAATkZFSGNcXPpORkX/TkZF/05GRf+ysLDzTkZFe1NLSv6Oior/raur805GRf9ORkX/TkZF/2hiYf+npaX/y8vL5wAAAABORkXnTkZF/05GRf9ORkX/VU1M/8vLy/9PR0b1TkZF/1VNTP/Ly8uQT0dG+E5GRf9ORkX/TkZF/1hRUP3Ly8tmAAAAAE5GRWBORkXkTkZF/05GRf9ORkX/t7a2/355eOpORkX/TkZFkISAf1BORkX/TkZF/05GRf9XT075TkZFZgAAAAAAAAAAAAAAAAAAAABORkXDTkZF/05GRf9lX17/ubi4/8vLy/+2tbT/Yltb/05GRf9ORkX/a2Vk/8vLy5MAAAAAAAAAAAAAAAAAAAAAAAAAAFNLSqNORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf+Cfn3/y8vL+cvLyw8AAAAAAAAAAAAAAABORkUSTkZF+U5GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/1BJSP/CwsLmy8vLDwAAAAAAAAAAAAAAAE5GRRJORkXtTkZF9FFJSJ1ORkXJTkZF/05GRf9ORkX/ZF5d9k5GRZ9ORkXtTkZF5HFsaxUAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRQxORkUJAAAAAAAAAABORkXhTkZF/2JbWv7Ly8tgAAAAAAAAAABORkUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRWBORkX2TkZFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAP9/gAD+P4AA4AOAAMADgADAA4AAwAOAAMMBgACCAIAAAAGAAIBDgADAA4AAwAOAAMADgADAB4AA/H+AAP7/gAA='
data
=
'AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLy8tLy8vL3svLy1QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy8vLBsvLywkAAAAATkZFS1xUVPqhn57/y8vL0gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJmVlQ/GxcXiy8vL88vLy4FdVlXzTkZF/2RdXP/Ly8vty8vLtMvLy5DLy8vty8vLxgAAAAAAAAAAAAAAAAAAAABORkUJTkZF4lNMS/+Lh4f/cWtq/05GRf9ORkX/Vk9O/3JtbP+Ef3//Vk9O/2ljYv/Ly8v5y8vLCQAAAAAAAAAAAAAAAE5GRQlORkX2TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/UElI/8PDw5cAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRZZORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf+Cfn3/y8vLvQAAAAAAAAAAAAAAAAAAAADLy8tIaWNi805GRf9ORkX/YVpZ/396eV7Ly8t7qaen9lZOTu5ORkX/TkZF/25oZ//Ly8v/y8vLycvLy0gAAAAATkZFSGNcXPpORkX/TkZF/05GRf+ysLDzTkZFe1NLSv6Oior/raur805GRf9ORkX/TkZF/2hiYf+npaX/y8vL5wAAAABORkXnTkZF/05GRf9ORkX/VU1M/8vLy/9PR0b1TkZF/1VNTP/Ly8uQT0dG+E5GRf9ORkX/TkZF/1hRUP3Ly8tmAAAAAE5GRWBORkXkTkZF/05GRf9ORkX/t7a2/355eOpORkX/TkZFkISAf1BORkX/TkZF/05GRf9XT075TkZFZgAAAAAAAAAAAAAAAAAAAABORkXDTkZF/05GRf9lX17/ubi4/8vLy/+2tbT/Yltb/05GRf9ORkX/a2Vk/8vLy5MAAAAAAAAAAAAAAAAAAAAAAAAAAFNLSqNORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf+Cfn3/y8vL+cvLyw8AAAAAAAAAAAAAAABORkUSTkZF+U5GRf9ORkX/TkZF/05GRf9ORkX/TkZF/05GRf9ORkX/TkZF/1BJSP/CwsLmy8vLDwAAAAAAAAAAAAAAAE5GRRJORkXtTkZF9FFJSJ1ORkXJTkZF/05GRf9ORkX/ZF5d9k5GRZ9ORkXtTkZF5HFsaxUAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRQxORkUJAAAAAAAAAABORkXhTkZF/2JbWv7Ly8tgAAAAAAAAAABORkUGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE5GRWBORkX2TkZFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+AAP9/gAD+P4AA4AOAAMADgADAA4AAwAOAAMMBgACCAIAAAAGAAIBDgADAA4AAwAOAAMADgADAB4AA/H+AAP7/gAA='
return
HttpResponse
(
base64
.
b64decode
(
data
),
mimetype
=
'image/vnd.microsoft.icon'
)
return
HttpResponse
(
base64
.
b64decode
(
data
),
mimetype
=
'image/vnd.microsoft.icon'
)
# BLERGH
# BLERGH
# Replicate django.contrib.auth.views.login simply so we don't have get users to update TEMPLATE_CONTEXT_PROCESSORS
# Replicate django.contrib.auth.views.login simply so we don't have get users to update TEMPLATE_CONTEXT_PROCESSORS
# to add ADMIN_MEDIA_PREFIX to the RequestContext. I don't like this but really really want users to not have to
# to add ADMIN_MEDIA_PREFIX to the RequestContext. I don't like this but really really want users to not have to
...
...
djangorestframework/views.py
View file @
dea4a45e
...
@@ -25,7 +25,6 @@ __all__ = (
...
@@ -25,7 +25,6 @@ __all__ = (
)
)
class
View
(
ResourceMixin
,
RequestMixin
,
ResponseMixin
,
AuthMixin
,
DjangoView
):
class
View
(
ResourceMixin
,
RequestMixin
,
ResponseMixin
,
AuthMixin
,
DjangoView
):
"""
"""
Handles incoming requests and maps them to REST operations.
Handles incoming requests and maps them to REST operations.
...
@@ -48,13 +47,13 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
...
@@ -48,13 +47,13 @@ class View(ResourceMixin, RequestMixin, ResponseMixin, AuthMixin, DjangoView):
List of parsers the resource can parse the request with.
List of parsers the resource can parse the request with.
"""
"""
authentication
=
(
authentication
.
UserLoggedInAuthentication
,
authentication
=
(
authentication
.
UserLoggedInAuthentication
,
authentication
.
BasicAuthentication
)
authentication
.
BasicAuthentication
)
"""
"""
List of all authenticating methods to attempt.
List of all authenticating methods to attempt.
"""
"""
permissions
=
(
permissions
.
FullAnonAccess
,
)
permissions
=
(
permissions
.
FullAnonAccess
,
)
"""
"""
List of all permissions that must be checked.
List of all permissions that must be checked.
"""
"""
...
@@ -185,18 +184,21 @@ class ModelView(View):
...
@@ -185,18 +184,21 @@ class ModelView(View):
"""
"""
resource
=
resources
.
ModelResource
resource
=
resources
.
ModelResource
class
InstanceModelView
(
InstanceMixin
,
ReadModelMixin
,
UpdateModelMixin
,
DeleteModelMixin
,
ModelView
):
class
InstanceModelView
(
InstanceMixin
,
ReadModelMixin
,
UpdateModelMixin
,
DeleteModelMixin
,
ModelView
):
"""
"""
A view which provides default operations for read/update/delete against a model instance.
A view which provides default operations for read/update/delete against a model instance.
"""
"""
_suffix
=
'Instance'
_suffix
=
'Instance'
class
ListModelView
(
ListModelMixin
,
ModelView
):
class
ListModelView
(
ListModelMixin
,
ModelView
):
"""
"""
A view which provides default operations for list, against a model in the database.
A view which provides default operations for list, against a model in the database.
"""
"""
_suffix
=
'List'
_suffix
=
'List'
class
ListOrCreateModelView
(
ListModelMixin
,
CreateModelMixin
,
ModelView
):
class
ListOrCreateModelView
(
ListModelMixin
,
CreateModelMixin
,
ModelView
):
"""
"""
A view which provides default operations for list and create, against a model in the database.
A view which provides default operations for list and create, against a model in the database.
...
...
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