if field_value:
						value = "\r\n".join(to_utf8(key) + ":" + to_utf8(value)  for key, value in
							field_value.items())
				else:
					value = to_utf8(record[key])

				ws.write(row, col, value )
				col = col + 1
			row = row + 1
		wb.save(stream)
		return stream.getvalue()
	# TODO
    # Works only for outputting handlers extending the ModelHandler class
	# Doesn't really work with outputing nested fields 

Emitter.register('excel', ExcelEmitter, 'application/vnd.ms-excel')
 
               
class HTMLEmitter(Emitter):
	def render(self, request):
		construct = self.construct()

		if 'data' in construct:
			# Correct response
			return construct['data']

		elif 'errors' in construct:
			# Validation was raised
			return construct['errors']

		return None			
Exemple #2
0
	"""

    native_render = klass.render

    def render(self, request):
        """
		We need *request* in (our monkey-patched)
		:meth:`pistoff.emitters.Emitter.construct`, and this method is the only
		instance method on the emitter that is being invoked with a *request*
		argument.
		"""
        if isinstance(self.data, HttpResponse):
            return self.data

        self.request = request
        return native_render(self, request)

    klass.render = render

    return native_register(name, klass, content_type)


Emitter.register = classmethod(register)


# Register response formats. Is guaranteed to use the monkey-patched
# *Emitter.register*, which means the registered emitter type classes will be
# fully monkey-patched as well.
for format in set(getattr(settings, "PISTON_FORMATS", ("json", "excel", "html"))).intersection(ALL_FORMATS.keys()):
    Emitter.register(format, *ALL_FORMATS.get(format))