diff options
| author | Tom Christie | 2011-04-11 11:54:26 +0100 |
|---|---|---|
| committer | Tom Christie | 2011-04-11 11:54:26 +0100 |
| commit | d4ed17845650d9a548ff0df362f3469878db2f91 (patch) | |
| tree | 27dd8cab495f01ad17b10c89b8623413ebeecd5d | |
| parent | 338b5213fa6232dc6115b214495cf13ded6a3a17 (diff) | |
| download | django-rest-framework-d4ed17845650d9a548ff0df362f3469878db2f91.tar.bz2 | |
More tests passing
| -rw-r--r-- | djangorestframework/parsers.py | 43 | ||||
| -rw-r--r-- | djangorestframework/tests/content.py | 67 |
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()) |
