[POS-commit] r8145 - in stoqlib/trunk/stoqlib/gui: . dialogs
george at async.com.br
george at async.com.br
Mon Jul 6 15:07:46 BRT 2009
Author: george
Date: Mon Jul 6 15:07:45 2009
New Revision: 8145
Log:
#3898: arquivo csv nao abre corretamente no openoffice em portugues. r=romaia
Modified:
stoqlib/trunk/stoqlib/gui/csvexporter.py
stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py
Modified: stoqlib/trunk/stoqlib/gui/csvexporter.py
==============================================================================
--- stoqlib/trunk/stoqlib/gui/csvexporter.py Mon Jul 6 13:59:08 2009 (r8144)
+++ stoqlib/trunk/stoqlib/gui/csvexporter.py Mon Jul 6 15:07:45 2009 (r8145)
@@ -23,8 +23,11 @@
##
"""CSV Exporter Utilities"""
+from kiwi.datatypes import number
from kiwi.ui.objectlist import Column, ObjectList
+from stoqlib.lib.validators import get_formatted_price as format_number
+
def objectlist2csv(objectlist, encoding):
"""Convert a instance of L{kiwi.ui.objectlist.ObjectList} to a CSV format.
@@ -41,24 +44,35 @@
objectlist.__class__.__name__)
attributes = []
- title = ''
+ title = []
for column in objectlist.get_treeview().get_columns():
if not column.get_visible():
continue
header_widget = column.get_widget()
if header_widget:
- title += header_widget.get_text() + ','
+ title.append(header_widget.get_text())
attributes.append(column.attribute)
# the header must be the first line of the CSV
csv_lines = [title]
for item in objectlist:
- csv_line = ','.join(
- [str(Column.get_attribute(item, attr, '')) for attr in attributes])
- csv_line = csv_line.replace('None', '')
- csv_line += ','
- csv_lines.append(csv_line.encode(encoding, 'replace'))
-
- return '\n'.join(csv_lines)
+ csv_line = []
+ csv_line.extend(
+ [_get_field_string(item, attr).encode(encoding, 'replace')
+ for attr in attributes])
+ csv_lines.append(csv_line)
+
+ return csv_lines
+
+
+def _get_field_string(item, field):
+ field_value = Column.get_attribute(item, field, '')
+ field_value_as_str = str(field_value)
+ if not field_value_as_str or field_value_as_str == 'None':
+ return ''
+ if isinstance(field_value, number):
+ #XXX: workaround to not handle locale differences directly.
+ return format_number(field_value, symbol=False)
+ return field_value_as_str
Modified: stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py
==============================================================================
--- stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py Mon Jul 6 13:59:08 2009 (r8144)
+++ stoqlib/trunk/stoqlib/gui/dialogs/csvexporterdialog.py Mon Jul 6 15:07:45 2009 (r8145)
@@ -24,6 +24,8 @@
"""CSV Exporter Dialog"""
+import csv
+
import gtk
from kiwi.python import Settable
@@ -120,10 +122,12 @@
content = export_csv(self.model.klass, select=results,
connection=self.conn)
- return content.encode(encoding, 'replace')
+ content = content.encode(encoding, 'replace')
+ return content.split('\n')
def _save(self, filename):
encoding = self.encoding.get_selected()
- writer = open(filename, 'w')
- writer.write(self._get_csv_content(encoding))
- writer.close()
+ csv_file = open(filename, 'w')
+ writer = csv.writer(csv_file, doublequote=True, quoting=csv.QUOTE_ALL)
+ writer.writerows(self._get_csv_content(encoding))
+ csv_file.close()
More information about the POS-commit
mailing list