Version initiale
authorCyril Robert <Cyril Robert crobert@inverse.ca>
Thu, 4 Feb 2010 19:47:16 +0000 (14:47 -0500)
committerCyril Robert <Cyril Robert crobert@inverse.ca>
Thu, 4 Feb 2010 19:47:16 +0000 (14:47 -0500)
django_exportateur/__init__.py [new file with mode: 0644]
django_exportateur/models.py [new file with mode: 0644]
django_exportateur/views.py [new file with mode: 0644]

diff --git a/django_exportateur/__init__.py b/django_exportateur/__init__.py
new file mode 100644 (file)
index 0000000..258d91c
--- /dev/null
@@ -0,0 +1 @@
+from models import *
diff --git a/django_exportateur/models.py b/django_exportateur/models.py
new file mode 100644 (file)
index 0000000..cb33228
--- /dev/null
@@ -0,0 +1,95 @@
+import csv
+from django.db import models
+from StringIO import StringIO
+from odf.opendocument import OpenDocumentSpreadsheet
+from odf.style import Style, TextProperties, TableColumnProperties
+from odf.text import P
+from odf.table import Table, TableRow, TableCell
+
+
+
+def export_csv (headers, data):
+    buffer = StringIO ()
+    writer = csv.writer (buffer)
+    if len (headers) > 0:
+        writer.writerow (headers)
+    for line in data:
+        writer.writerow (line)
+
+    return buffer.getvalue ()
+
+def export_ods (headers, data):
+    doc = OpenDocumentSpreadsheet()
+    style = Style(name="Large number", family="table-cell")
+    style.addElement(TextProperties(fontfamily="Arial", fontsize="15pt"))
+    doc.styles.addElement(style)
+    widewidth = Style(name="co1", family="table-column")
+    widewidth.addElement(TableColumnProperties(columnwidth="2.8cm", breakbefore="auto"))
+    doc.automaticstyles.addElement(widewidth)
+
+    table = Table()
+    if len (headers) > 0:
+        tr = TableRow ()
+        table.addElement (tr)
+        for item in headers:
+            tc = TableCell ()
+            tr.addElement (tc)
+            p = P(stylename = style, text = unicode (item, "utf-8"))
+            tc.addElement (p)
+
+    for line in data:
+        tr = TableRow ()
+        table.addElement (tr)
+        for item in line:
+            tc = TableCell ()
+            tr.addElement (tc)
+            p = P (stylename = style, text = unicode (item, "utf-8"))
+            tc.addElement (p)
+
+    doc.spreadsheet.addElement(table)
+    buffer = StringIO ()
+    doc.write(buffer)
+
+    return buffer.getvalue ()
+
+
+def exportateur (headers = [], data = [], type = "csv"):
+    if type == "csv":
+        return export_csv (headers, data)
+    elif type == "ods":
+        return export_ods (headers, data)
+    else:
+        raise "Type d'exportateur inconnu: %s" % type
+
+
+def object_fields (instance, ignore = []):
+    fields = []
+    headers = []
+
+    for field in instance._meta.fields:
+        name = field.verbose_name
+        if len(name.strip()) == 0:
+            name = field.name
+        if field.name not in ignore:
+            fields.append (field.name)
+            headers.append (name)
+
+    return (fields, headers)
+
+def object_values (instance, fields):
+    values = []
+
+    for field in fields:
+        val = getattr (instance, field)
+        if val is None:
+            val = u""
+        if hasattr (val, "encode"):
+            val = val.encode("utf-8")
+        else:
+            val = str(val)
+        values.append(val)
+
+    return values
+
+setattr (models.Model, 'object_fields', object_fields)
+setattr (models.Model, 'object_values', object_values)
diff --git a/django_exportateur/views.py b/django_exportateur/views.py
new file mode 100644 (file)
index 0000000..60f00ef
--- /dev/null
@@ -0,0 +1 @@
+# Create your views here.