__author__ = 'tanshu'

import csv
from decimal import Decimal
from io import StringIO
import uuid
from pyramid.renderers import JSON

__author__ = 'tanshu'


class CSVRenderer(object):
    def __init__(self, info):
        pass

    def __call__(self, value, system):
        csv_data = StringIO()
        writer = csv.writer(csv_data, delimiter=',', quoting=csv.QUOTE_MINIMAL)

        if 'header' in value:
            writer.writerow(value['header'])
        if 'rows' in value:
            writer.writerows(value['rows'])
        if 'footer' in value:
            writer.writerows(value['footer'])

        request = system.get('request')
        if request is not None:
            response = request.response
            ct = response.content_type
            if ct == response.default_content_type:
                response.content_type = 'text/csv'
            filename = value['filename'] if 'filename' in value else 'report.csv'
            response.content_disposition = 'attachment;filename="{0}"'.format(filename)
        return csv_data.getvalue()


json_renderer = JSON()

class DecimalAsFloatHack(float):
    def __init__(self, d):
        self.d = d
    def __repr__(self):
    #        return format(self.d, '.5f')
        return str(self.d)

def decimal_adaptor(obj, request):
    return DecimalAsFloatHack(obj)
def uuid_adaptor(obj, request):
    return str(obj)
json_renderer.add_adapter(Decimal, decimal_adaptor)
json_renderer.add_adapter(uuid.UUID, uuid_adaptor)
