aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Christie2011-04-11 11:54:26 +0100
committerTom Christie2011-04-11 11:54:26 +0100
commitd4ed17845650d9a548ff0df362f3469878db2f91 (patch)
tree27dd8cab495f01ad17b10c89b8623413ebeecd5d
parent338b5213fa6232dc6115b214495cf13ded6a3a17 (diff)
downloaddjango-rest-framework-d4ed17845650d9a548ff0df362f3469878db2f91.tar.bz2
More tests passing
-rw-r--r--djangorestframework/parsers.py43
-rw-r--r--djangorestframework/tests/content.py67
2 files changed, 46 insertions, 64 deletions
diff --git a/djangorestframework/parsers.py b/djangorestframework/parsers.py
index 1503342c..5b236647 100644
--- a/djangorestframework/parsers.py
+++ b/djangorestframework/parsers.py
@@ -27,38 +27,7 @@ except ImportError:
class ParserMixin(object):
parsers = ()
- def parse(self, stream, content_type):
- """
- Parse the request content.
-
- May raise a 415 ResponseException (Unsupported Media Type),
- or a 400 ResponseException (Bad Request).
- """
- parsers = as_tuple(self.parsers)
- parser = None
- for parser_cls in parsers:
- if parser_cls.handles(content_type):
- parser = parser_cls(self)
- break
-
- if parser is None:
- raise ResponseException(status.HTTP_415_UNSUPPORTED_MEDIA_TYPE,
- {'error': 'Unsupported media type in request \'%s\'.' %
- content_type.media_type})
-
- return parser.parse(stream)
-
- @property
- def parsed_media_types(self):
- """Return an list of all the media types that this ParserMixin can parse."""
- return [parser.media_type for parser in self.parsers]
-
- @property
- def default_parser(self):
- """Return the ParerMixin's most prefered emitter.
- (This has no behavioural effect, but is may be used by documenting emitters)"""
- return self.parsers[0]
class BaseParser(object):
@@ -122,6 +91,18 @@ class DataFlatener(object):
return False
+class PlainTextParser(BaseParser):
+ """
+ Plain text parser.
+
+ Simply returns the content of the stream
+ """
+ media_type = MediaType('text/plain')
+
+ def parse(self, stream):
+ return stream.read()
+
+
class FormParser(BaseParser, DataFlatener):
"""The default parser for form data.
Return a dict containing a single value for each non-reserved parameter.
diff --git a/djangorestframework/tests/content.py b/djangorestframework/tests/content.py
index 5e77472d..c4f93ef2 100644
--- a/djangorestframework/tests/content.py
+++ b/djangorestframework/tests/content.py
@@ -37,50 +37,51 @@ class TestContentMixins(TestCase):
self.assertEqual(view.RAW_CONTENT, None)
def ensure_determines_form_content_POST(self, view):
- """Ensure determine_content(request) returns content for POST request with content."""
+ """Ensure view.RAW_CONTENT returns content for POST request with form content."""
form_data = {'qwerty': 'uiop'}
view.parsers = (FormParser, MultipartParser)
view.request = self.req.post('/', data=form_data)
self.assertEqual(view.RAW_CONTENT, form_data)
-# def ensure_determines_non_form_content_POST(self, mixin):
-# """Ensure determine_content(request) returns (content type, content) for POST request with content."""
-# content = 'qwerty'
-# content_type = 'text/plain'
-# request = self.req.post('/', content, content_type=content_type)
-# self.assertEqual(mixin.determine_content(request), (content_type, content))
-#
-# def ensure_determines_form_content_PUT(self, mixin):
-# """Ensure determine_content(request) returns content for PUT request with content."""
-# form_data = {'qwerty': 'uiop'}
-# request = self.req.put('/', data=form_data)
-# self.assertEqual(mixin.determine_content(request), (request.META['CONTENT_TYPE'], request.raw_post_data))
-#
-# def ensure_determines_non_form_content_PUT(self, mixin):
-# """Ensure determine_content(request) returns (content type, content) for PUT request with content."""
-# content = 'qwerty'
-# content_type = 'text/plain'
-# request = self.req.put('/', content, content_type=content_type)
-# self.assertEqual(mixin.determine_content(request), (content_type, content))
-#
-# # StandardContentMixin behavioural tests
-#
+ def ensure_determines_non_form_content_POST(self, mixin):
+ """Ensure view.RAW_CONTENT returns content for POST request with non-form content."""
+ content = 'qwerty'
+ content_type = 'text/plain'
+ view.parsers = (PlainTextParser,)
+ view.request = self.req.post('/', content, content_type=content_type)
+ self.assertEqual(view.RAW_CONTENT, form_data)
+
+ def ensure_determines_form_content_PUT(self, mixin):
+ """Ensure view.RAW_CONTENT returns content for PUT request with form content."""
+ form_data = {'qwerty': 'uiop'}
+ view.parsers = (FormParser, MultipartParser)
+ view.request = self.req.put('/', data=form_data)
+ self.assertEqual(view.RAW_CONTENT, form_data)
+
+ def ensure_determines_non_form_content_PUT(self, mixin):
+ """Ensure view.RAW_CONTENT returns content for PUT request with non-form content."""
+ content = 'qwerty'
+ content_type = 'text/plain'
+ view.parsers = (PlainTextParser,)
+ view.request = self.req.post('/', content, content_type=content_type)
+ self.assertEqual(view.RAW_CONTENT, form_data)#
+
def test_standard_behaviour_determines_no_content_GET(self):
"""Ensure request.RAW_CONTENT returns None for GET request with no content."""
self.ensure_determines_no_content_GET(RequestMixin())
def test_standard_behaviour_determines_form_content_POST(self):
- """Ensure request.RAW_CONTENT returns content for POST request with content."""
+ """Ensure request.RAW_CONTENT returns content for POST request with form content."""
self.ensure_determines_form_content_POST(RequestMixin())
-#
-# def test_standard_behaviour_determines_non_form_content_POST(self):
-# """Ensure StandardContentMixin.determine_content(request) returns (content type, content) for POST request with content."""
-# self.ensure_determines_non_form_content_POST(StandardContentMixin())
-#
-# def test_standard_behaviour_determines_form_content_PUT(self):
-# """Ensure StandardContentMixin.determine_content(request) returns content for PUT request with content."""
-# self.ensure_determines_form_content_PUT(StandardContentMixin())
-#
+
+ def test_standard_behaviour_determines_non_form_content_POST(self):
+ """Ensure StandardContentMixin.determine_content(request) returns (content type, content) for POST request with content."""
+ self.ensure_determines_non_form_content_POST(RequestMixin())
+
+ def test_standard_behaviour_determines_form_content_PUT(self):
+ """Ensure StandardContentMixin.determine_content(request) returns content for PUT request with content."""
+ self.ensure_determines_form_content_PUT(RequestMixin())
+
# def test_standard_behaviour_determines_non_form_content_PUT(self):
# """Ensure StandardContentMixin.determine_content(request) returns (content type, content) for PUT request with content."""
# self.ensure_determines_non_form_content_PUT(StandardContentMixin())