aboutsummaryrefslogtreecommitdiffstats
path: root/src/rest/emitters.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/rest/emitters.py')
-rw-r--r--src/rest/emitters.py37
1 files changed, 24 insertions, 13 deletions
diff --git a/src/rest/emitters.py b/src/rest/emitters.py
index 87faa559..dcbaf7b7 100644
--- a/src/rest/emitters.py
+++ b/src/rest/emitters.py
@@ -4,12 +4,8 @@ import json
from utils import dict2xml
class BaseEmitter(object):
- def __init__(self, resource, request, status, headers, form):
- self.request = request
+ def __init__(self, resource):
self.resource = resource
- self.status = status
- self.headers = headers
- self.form = form
def emit(self, output):
return output
@@ -18,28 +14,43 @@ class TemplatedEmitter(BaseEmitter):
template = None
def emit(self, output):
- content = json.dumps(output, indent=4, sort_keys=True)
+ if output is None:
+ content = ''
+ else:
+ content = json.dumps(output, indent=4, sort_keys=True)
+
template = loader.get_template(self.template)
- context = RequestContext(self.request, {
+ context = RequestContext(self.resource.request, {
'content': content,
- 'status': self.status,
- 'reason': STATUS_CODE_TEXT.get(self.status, ''),
- 'headers': self.headers,
+ 'status': self.resource.resp_status,
+ 'reason': STATUS_CODE_TEXT.get(self.resource.resp_status, ''),
+ 'headers': self.resource.resp_headers,
'resource_name': self.resource.__class__.__name__,
'resource_doc': self.resource.__doc__,
- 'create_form': self.form,
- 'update_form': self.form,
- 'request': self.request,
+ 'create_form': self.resource.form,
+ 'update_form': self.resource.form,
+ 'request': self.resource.request,
'resource': self.resource,
})
+
+ # Munge DELETE Response code to allow us to return content
+ if self.resource.resp_status == 204:
+ self.resource.resp_status = 200
+
return template.render(context)
class JSONEmitter(BaseEmitter):
def emit(self, output):
+ if output is None:
+ # Treat None as no message body, rather than serializing
+ return ''
return json.dumps(output)
class XMLEmitter(BaseEmitter):
def emit(self, output):
+ if output is None:
+ # Treat None as no message body, rather than serializing
+ return ''
return dict2xml(output)
class HTMLEmitter(TemplatedEmitter):