1# -*- coding: utf-8 -*- 2#pylint: disable=deprecated-module 3import csv 4import codecs 5import io 6 7_reader = codecs.getreader('utf-8') 8_writer = codecs.getwriter('utf-8') 9 10 11def csv_reader(stream, **params): 12 assert not isinstance(stream, io.TextIOBase),\ 13 "For cross-compatibility purposes, csv_reader takes a bytes stream" 14 return csv.reader(_reader(stream), **params) 15 16 17def csv_writer(stream, **params): 18 assert not isinstance(stream, io.TextIOBase), \ 19 "For cross-compatibility purposes, csv_writer takes a bytes stream" 20 return csv.writer(_writer(stream), **params) 21 22 23def to_text(source): 24 """ Generates a text value (an instance of text_type) from an arbitrary 25 source. 26 27 * False and None are converted to empty strings 28 * text is passed through 29 * bytes are decoded as UTF-8 30 * rest is textified via the current version's relevant data model method 31 """ 32 if source is None or source is False: 33 return u'' 34 35 if isinstance(source, bytes): 36 return source.decode('utf-8') 37 38 return str(source) 39