Skip to content

Commit 26df445

Browse files
Yaoxinmjumbewu
authored andcommitted
add file bom.
1 parent 3ce4222 commit 26df445

File tree

1 file changed

+13
-2
lines changed

1 file changed

+13
-2
lines changed

rest_framework_csv/renderers.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from __future__ import unicode_literals
2+
import codecs
23
import unicodecsv as csv
34
from django.conf import settings
45
from rest_framework.renderers import *
@@ -8,13 +9,15 @@
89
from types import GeneratorType
910

1011
from logging import getLogger
12+
1113
log = getLogger(__name__)
1214

1315
# six versions 1.3.0 and previous don't have PY2
1416
try:
1517
from six import PY2
1618
except ImportError:
1719
import sys
20+
1821
PY2 = sys.version_info[0] == 2
1922

2023

@@ -173,28 +176,32 @@ def flatten_dict(self, d):
173176
def headers():
174177
doc = ("The headers property. Kept around for backward compatibility."
175178
"Use the header attribute instead.")
179+
176180
def fget(self):
177181
log.warning('The CSVRenderer.headers property is deprecated. '
178182
'Use CSVRenderer.header instead.')
179183
return self.header
184+
180185
def fset(self, value):
181186
log.warning('The CSVRenderer.headers property is deprecated. '
182187
'Use CSVRenderer.header instead.')
183188
self.header = value
189+
184190
def fdel(self):
185191
log.warning('The CSVRenderer.headers property is deprecated. '
186192
'Use CSVRenderer.header instead.')
187193
del self.header
194+
188195
return locals()
196+
189197
headers = property(**headers())
190198

191199

192-
class CSVRendererWithUnderscores (CSVRenderer):
200+
class CSVRendererWithUnderscores(CSVRenderer):
193201
level_sep = '_'
194202

195203

196204
class CSVStreamingRenderer(CSVRenderer):
197-
198205
def render(self, data, media_type=None, renderer_context={}):
199206
"""
200207
Renders serialized *data* into CSV to be used with Django
@@ -223,6 +230,10 @@ def render(self, data, media_type=None, renderer_context={}):
223230
header = renderer_context.get('header', self.header)
224231
labels = renderer_context.get('labels', self.labels)
225232
encoding = renderer_context.get('encoding', settings.DEFAULT_CHARSET)
233+
bom = renderer_context.get('bom', False)
234+
235+
if bom and encoding == settings.DEFAULT_CHARSET:
236+
yield codecs.BOM_UTF8
226237

227238
table = self.tablize(data, header=header, labels=labels)
228239
csv_buffer = Echo()

0 commit comments

Comments
 (0)