diff options
Diffstat (limited to 'src/rest/emitters.py')
| -rw-r--r-- | src/rest/emitters.py | 37 |
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): |
