--- /dev/null
+# -*- coding: utf-8 -*-
+#
+# Copyright (C) 2010 jdunck
+# Copyright (C) 2011 Parisson
+
+# This software is a computer program whose purpose is to backup, analyse,
+# transcode and stream any audio content with its metadata over a web frontend.
+
+# This software is governed by the CeCILL license under French law and
+# abiding by the rules of distribution of free software. You can use,
+# modify and/ or redistribute the software under the terms of the CeCILL
+# license as circulated by CEA, CNRS and INRIA at the following URL
+# "http://www.cecill.info".
+
+# As a counterpart to the access to the source code and rights to copy,
+# modify and redistribute granted by the license, users are provided only
+# with a limited warranty and the software's author, the holder of the
+# economic rights, and the successive licensors have only limited
+# liability.
+
+# In this respect, the user's attention is drawn to the risks associated
+# with loading, using, modifying and/or developing or reproducing the
+# software by the user in light of its specific status of free software,
+# that may mean that it is complicated to manipulate, and that also
+# therefore means that it is reserved for developers and experienced
+# professionals having in-depth computer knowledge. Users are therefore
+# encouraged to load and test the software's suitability as regards their
+# requirements in conditions enabling the security of their systems and/or
+# data to be ensured and, more generally, to use and operate it in the
+# same conditions as regards security.
+
+# The fact that you are presently reading this means that you have had
+# knowledge of the CeCILL license and that you accept its terms.
+#
+# Author: jdunck
+# taken from https://github.com/jdunck/python-unicodecsv.git
+
+import csv, codecs, cStringIO
+
+def _stringify(s, encoding):
+ if type(s)==unicode:
+ return s.encode(encoding)
+ elif isinstance(s, (int , float)):
+ pass #let csv.QUOTE_NONNUMERIC do its thing.
+ elif type(s) != str:
+ s=str(s)
+ return s
+
+def _stringify_list(l, encoding):
+ return [_stringify(s, encoding) for s in l]
+
+
+class UnicodeWriter(object):
+ def __init__(self, f, dialect=csv.excel, encoding="utf-8", **kwds):
+ self.writer = csv.writer(f)
+ self.dialect = dialect
+ self.encoding = encoding
+ self.writer = csv.writer(f, dialect=dialect, **kwds)
+
+ def writerow(self, row):
+ self.writer.writerow(_stringify_list(row, self.encoding))
+
+ def writerows(self, rows):
+ for row in rows:
+ self.writerow(row)
from telemeta.util.unaccent import unaccent
from telemeta.util.unaccent import unaccent_icmp
from telemeta.util.logger import Logger
+from telemeta.util.unicode import UnicodeWriter
from telemeta.cache import TelemetaCache
import telemeta.web.pages as pages
m.delete()
def playlist_csv_export(self, request, public_id):
- playlist = Playlist.objects.get(public_id=public_id)
+ playlist = Playlist.objects.get(public_id=public_id, author=request.user)
resources = PlaylistResource.objects.filter(playlist=playlist)
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename='+playlist.name+'.csv'
- writer = csv.writer(response)
+ writer = UnicodeWriter(response)
+
items = []
for resource in resources:
if resource.resource_type == 'collection':
item = item.to_dict()
tags = item.keys()
writer.writerow(tags)
-
+ import types
+
for item in items:
data = []
item = item.to_dict()
for tag in tags:
data.append(item[tag])
writer.writerow(data)
-
+
return response