|
|
|
from django.http import HttpResponse
|
|
|
|
from django.utils.encoding import force_text
|
|
|
|
|
|
|
|
|
|
|
|
class OvvpFile:
|
|
|
|
def __init__(self):
|
|
|
|
# { header: value, ... }
|
|
|
|
self.headers = {}
|
|
|
|
# [ 'column-name', ... ]
|
|
|
|
self.columns = []
|
|
|
|
# [ { column: value, ...}, ...]
|
|
|
|
self.rows = []
|
|
|
|
|
|
|
|
def to_lines(self):
|
|
|
|
# header
|
|
|
|
for hk in sorted(self.headers.keys()):
|
|
|
|
yield f'{hk}\t{self.headers[hk]}\n'
|
|
|
|
yield '\n'
|
|
|
|
# columns
|
|
|
|
yield '\t'.join(self.columns) + '\n'
|
|
|
|
# rows
|
|
|
|
for r in self.rows:
|
|
|
|
yield '\t'.join([force_text(r[c]) for c in self.columns]) + '\n'
|
|
|
|
|
|
|
|
def to_string(self):
|
|
|
|
return ''.join(self.to_lines())
|
|
|
|
|
|
|
|
# Pozn: tohle je ta jediná funkce, která se reálně používá…
|
|
|
|
def to_HttpResponse(self):
|
|
|
|
return HttpResponse(self.to_string(), content_type='text/plain; charset=utf-8')
|